Exemple #1
0
    def __init__(self, id, locator=None):
        Declaration.__init__(self, locator)

        self.id = id

        self.products = []
        self.reactants = []
        self.efficiencies = []
        self.ford = []

        self.arrhenius = None
        self.units = {}

        self.lt = None
        self.rev = None
        self.rlt = None

        self.duplicate = None
        self.thirdBody = None
        self.reversible = None

        self.falloff = None
        self.low = None
        self.sri = None
        self.troe = None

        self.radiation = None

        return
    def __init__(self, symbol, weight=None, locator=None):
        Declaration.__init__(self, locator)

        self.symbol = symbol
        self.weight = weight

        return
Exemple #3
0
    def __init__(self, symbol, locator=None):
        Declaration.__init__(self, locator)

        self.symbol = symbol
        self.phase = None
        self.composition = []

        return
Exemple #4
0
 def openDeclaration(self):
     noi = int(self.sender().objectName()[3])
     self.scenario.genNbEnf()
     msg = self.scenario.check_consistency()
     if msg:
         QMessageBox.critical(self, u"Ménage non valide", msg,
                              QMessageBox.Ok, QMessageBox.NoButton)
         return False
     self._declaration = Declaration(self, noi)
     self._declaration.exec_()
     self.emit(SIGNAL('compoChanged()'))
Exemple #5
0
    def __init__(self, symbol, locator=None):
        Declaration.__init__(self, locator)

        self.symbol = symbol
        self.phase = None
        self.composition = []

        self.range = None
        self.lowParameters = []
        self.highParameters = []

        return
    def __str__(self):
        str = "symbol='%s'" % self.symbol
        if self.weight:
            str += "weight=%g" % self.weight

        str += ", " + Declaration.__str__(self)

        return str
Exemple #7
0
def convert_to_ast(node):
    program = Program()
    program.set_name(node.get_name())
    program.set_type(node.get_type())
    dclr_child = node.get_child_nodes()[0]
    dclr_list = DclrList()
    while True:
        if dclr_child is not None and dclr_child.get_name() == 'var':
            ident_name = dclr_child.get_child_nodes()[0]
            declaration = Declaration(ident_name.get_name())
            declaration.set_name(ident_name.get_name())
            declaration.set_type(symbol_table.get(ident_name.get_name()))
            dclr_list.add_declaration_to_list(declaration)
            AST.dot.edge(dclr_list.get_gv_name(), declaration.get_gv_name())
            length = len(dclr_child.get_child_nodes())
            dclr_child = dclr_child.get_child_nodes()[length - 1]
        else:
            break
    program.set_dclr_list(dclr_list)
    AST.dot.edge(program.get_gv_name(), dclr_list.get_gv_name())
    stmt_child = node.get_child_nodes()[2]
    stmt_list = generate_statement_list(stmt_child)
    if stmt_list.get_type_error():
        AST.dot.edge(program.get_gv_name(),
                     stmt_list.get_gv_name(),
                     color='red')
    else:
        AST.dot.edge(program.get_gv_name(), stmt_list.get_gv_name())
    program.set_stmt_list(stmt_list)
    return program
Exemple #8
0
 def openDeclaration(self):
     noi = int(self.sender().objectName()[3])
     self.scenario.genNbEnf()
     msg = self.scenario.check_consistency()
     if msg:
         QMessageBox.critical(self, u"Ménage non valide",
                              msg, 
                              QMessageBox.Ok, QMessageBox.NoButton)
         return False
     self._declaration = Declaration(self, noi)
     self._declaration.exec_()
     self.emit(SIGNAL('compoChanged()'))
Exemple #9
0
    def __str__(self):
        str = "symbol='%s'" % self.symbol

        if self.phase:
            str += ", phase=%s" % self.phase

        if self.composition:
            str += ", composition=%s" % `self.composition`

        str += ", " + Declaration.__str__(self)

        return str
Exemple #10
0
def convert_to_ast(node):
    program = Program()
    program.set_name(node.get_name())
    program.set_type(node.get_type())
    dclr_child = node.get_child_nodes()[0]
    dclr_list = DclrList()
    while True:
        if dclr_child is not None and dclr_child.get_name() == 'var':
            ident_name = dclr_child.get_child_nodes()[0]
            declaration = Declaration(ident_name.get_name())
            declaration.set_name(ident_name.get_name())
            declaration.set_type(symbol_table.get(ident_name.get_name()))
            dclr_list.add_declaration_to_list(declaration)
            AST.dot.edge(dclr_list.get_gv_name(), declaration.get_gv_name())
            length = len(dclr_child.get_child_nodes())
            dclr_child = dclr_child.get_child_nodes()[length - 1]
        else:
            break
    program.set_dclr_list(dclr_list)
    AST.dot.edge(program.get_gv_name(), dclr_list.get_gv_name())
    stmt_child = node.get_child_nodes()[2]
    stmt_list = generate_statement_list(stmt_child)
    if stmt_list.get_type_error():
        AST.dot.edge(program.get_gv_name(), stmt_list.get_gv_name(), color='red')
    else:
        AST.dot.edge(program.get_gv_name(), stmt_list.get_gv_name())
    program.set_stmt_list(stmt_list)
    return program
Exemple #11
0
    def __str__(self):
        str = "symbol='%s'" % self.symbol

        if self.phase:
            str += ", phase=%s" % self.phase

        if self.composition:
            str += ", composition=%s" % ` self.composition `

        if self.range:
            str += ", parametrization range=%s" % ` self.range `

        if self.lowParameters:
            str += ", low=%s" % ` self.lowParameters `

        if self.highParameters:
            str += ", high=%s" % ` self.highParameters `

        str += ", " + Declaration.__str__(self)

        return str
Exemple #12
0
class ScenarioWidget(QDockWidget, Ui_Menage):
    def __init__(self, scenario, parent = None):
        super(ScenarioWidget, self).__init__(parent)
        self.setupUi(self)
        self.parent = parent
        self.scenario = scenario

        self.connect(self.open_btn, SIGNAL('clicked()'), self.openScenario)
        self.connect(self.save_btn, SIGNAL('clicked()'), self.saveScenario)
        self.connect(self.add_btn, SIGNAL('clicked()'), self.addPerson)
        self.connect(self.rmv_btn, SIGNAL('clicked()'), self.rmvPerson)
        self.connect(self.lgt_btn, SIGNAL('clicked()'), self.openLogement)
        self.connect(self.inf_btn, SIGNAL('clicked()'), self.openInfoComp)
        self.connect(self, SIGNAL('compoChanged()'), self.changed)

        self._listPerson = []
        self.addPref()
        self.rmv_btn.setEnabled(False)
        self.emit(SIGNAL("ok()"))

    def changed(self):
        self.disconnectAll()
        self.scenario.genNbEnf()
        self.populate()
        self.emit(SIGNAL('changed()'))
        self.connectAll()
        
    def nbRow(self):
        return self.scenario.nbIndiv()

    def populate(self):
        self.populateBirth()
        self.populateQuifoyCombo()
        self.populateFoyerCombo()
        self.populateQuifamCombo()
        self.populateFamilleCombo()

    def populateBirth(self):
        for noi, vals in self.scenario.indiv.iteritems():
            birth = QDate(vals['birth'])
            self._listPerson[noi][S.birth].setDate(birth)
        
    def populateFoyerCombo(self):
        declarKeys = self.scenario.declar.keys()
        for noi, vals in self.scenario.indiv.iteritems():
            noidec = vals['noidec']
            box = self._listPerson[noi][S.decnum]
            box.clear()
            button = self._listPerson[noi][S.decbtn]
            button.setText('Foyer %d' % (noidec+1))
            if vals['quifoy'] == 'vous':
                box.addItems(['%d' % (noidec+1)])
                button.setEnabled(True)
            else :
                box.addItems(['%d' % (k+1) for k in declarKeys])
                button.setEnabled(False)
                box.setCurrentIndex(declarKeys.index(noidec))

    def populateQuifoyCombo(self):
        for noi, vals in self.scenario.indiv.iteritems():
            quifoy = vals['quifoy']
            # retrieve the foyer combobox of individu number noi
            box = self._listPerson[noi][S.decpos]
            # set the combobox to 'vous' 'conj' or 'pac'
            if   quifoy == 'vous': box.setCurrentIndex(0)
            elif quifoy == 'conj': box.setCurrentIndex(1)
            elif quifoy[:3] == 'pac': box.setCurrentIndex(2)

    def populateFamilleCombo(self):
        familleKeys = self.scenario.famille.keys()
        for noi, vals in self.scenario.indiv.iteritems():
            noichef = vals['noichef']
            box = self._listPerson[noi][S.famnum]
            box.clear()
            if vals['quifam'] == 'parent 1':
                box.addItems(['%d' % (noichef+1)])
            else :
                box.addItems(['%d' % (k+1) for k in familleKeys])
                box.setCurrentIndex(familleKeys.index(noichef))

    def populateQuifamCombo(self):
        for noi, vals in self.scenario.indiv.iteritems():
            quifam = vals['quifam']
            # retrieve the foyer combobox of individu number noi
            box = self._listPerson[noi][S.fampos]
            # set the combobox to 'parent 1' 'parent 2' or 'enfant'
            if   quifam == 'chef': box.setCurrentIndex(0)
            elif quifam == 'part': box.setCurrentIndex(1)
            elif quifam[:3] == 'enf': box.setCurrentIndex(2)

    def birthChanged(self, date):
        senderNoi = int(self.sender().objectName()[3])
        self.scenario.indiv[senderNoi].update({'birth': date.toPyDate()})
        self.emit(SIGNAL('compoChanged()'))

    def foyerChanged(self):
        sender = self.sender()
        noi = int(sender.objectName()[3])
        newfoyer = int(sender.currentText()[-1])-1
        self.scenario.modify(noi, newFoyer = newfoyer)
        self.emit(SIGNAL('compoChanged()'))

    def quifoyChanged(self, newQuifoy):
        senderNoi = int(self.sender().objectName()[3])
        self.scenario.modify(senderNoi, newQuifoy = newQuifoy)
        self.emit(SIGNAL('compoChanged()'))

    def familleChanged(self):
        sender = self.sender()
        noi = int(sender.objectName()[3])
        newfamille = int(sender.currentText()[-1])-1
        self.scenario.modifyFam(noi, newFamille = newfamille)
        self.emit(SIGNAL('compoChanged()'))

    def quifamChanged(self, newFam):
        if newFam == 'parent 1' : qui = 'chef'
        elif newFam == 'parent 2' : qui = 'part'
        elif newFam == 'enfant' : qui = 'enf'
        senderNoi = int(self.sender().objectName()[3])
        self.scenario.modifyFam(senderNoi, newQuifam = qui)
        self.emit(SIGNAL('compoChanged()'))
        

    def addPref(self):
        noi = 0
        self._listPerson.append([QLabel('%d' % (noi+1), self),
                                 QDateEdit(self),
                                 QComboBox(self),
                                 QComboBox(self),
                                 QPushButton(self),
                                 QComboBox(self),
                                 QComboBox(self)])

        temp = self._listPerson[0]

        temp[S.birth].setDisplayFormat(QApplication.translate("Page01", "dd MMM yyyy", None, QApplication.UnicodeUTF8))
        temp[S.birth].setObjectName('Bir%d' % noi)
        temp[S.birth].setCurrentSection(QDateEdit.YearSection)

        temp[S.decpos].setObjectName('Dec%d' % noi)
        temp[S.decpos].addItems(['vous'])
        temp[S.decpos].setEnabled(False)

        temp[S.decnum].setObjectName('Foy%d' % noi)
        temp[S.decnum].setEnabled(False)

        temp[S.fampos].addItems(['parent 1'])            
        temp[S.fampos].setObjectName('Fam%d' % noi)
        temp[S.fampos].setEnabled(False)

        temp[S.famnum].setObjectName('Fam%d' % noi)
        temp[S.famnum].setEnabled(False)

        temp[S.decbtn].setObjectName('But%d' % noi)

        for i in xrange(7):
            self.gridLayout.addWidget(temp[i], noi + 2, i)
            self.gridLayout.setAlignment(temp[i], Qt.AlignCenter)

        self.emit(SIGNAL('compoChanged()'))
                
    def addPerson(self):
        noi = self.nbRow()
        self.addRow()
        if noi == 1: self.scenario.addIndiv(noi, birth = date(1975,1,1), quifoy = 'conj', quifam = 'part')
        else:        self.scenario.addIndiv(noi, birth = date(2000,1,1), quifoy = 'pac' , quifam = 'enf')
        self.emit(SIGNAL('compoChanged()'))
            
    def addRow(self):
        noi = len(self._listPerson)
        self._listPerson.append([QLabel('%d' % (noi+1), self),
                                 QDateEdit(self),
                                 QComboBox(self),
                                 QComboBox(self),
                                 QPushButton(self),
                                 QComboBox(self),
                                 QComboBox(self)])
        temp = self._listPerson[-1]

        temp[S.birth].setDisplayFormat(QApplication.translate("Page01", "dd MMM yyyy", None, QApplication.UnicodeUTF8))
        temp[S.birth].setObjectName('Bir%d' % noi)
        temp[S.birth].setCurrentSection(QDateEdit.YearSection)

        temp[S.decpos].setObjectName('Dec%d' % noi)
        temp[S.decpos].addItems(['vous', 'conj', 'pac'])

        temp[S.decnum].setObjectName('Foy%d' % noi)

        temp[S.fampos].setObjectName('Fam%d' % noi)
        temp[S.fampos].addItems(['parent 1', 'parent 2', 'enfant'])

        temp[S.famnum].setObjectName('Fam%d' % noi)

        temp[S.decbtn].setObjectName('But%d' % noi)
        
        for i in xrange(7):
            self.gridLayout.addWidget(temp[i], noi +2, i)
            self.gridLayout.setAlignment(temp[i], Qt.AlignCenter)


        self.rmv_btn.setEnabled(True)
        if len(self.scenario.indiv) == 9:
            self.add_btn.setEnabled(False)

    def rmvPerson(self, noi = None):
        if noi == None: noi = self.nbRow() - 1
        self.scenario.rmvIndiv(noi)
        self.rmvRow()
        self.add_btn.setEnabled(True)

        self.emit(SIGNAL('compoChanged()'))

    def rmvRow(self):
        '''
        Enlève le dernier individu et l'efface dans le foyer
        '''
        toDel = self._listPerson.pop()
        for widget in toDel:
            widget.setParent(None)
        if len(self.scenario.indiv) == 1: self.rmv_btn.setEnabled(False)

    def openDeclaration(self):
        noi = int(self.sender().objectName()[3])
        self.scenario.genNbEnf()
        msg = self.scenario.check_consistency()
        if msg:
            QMessageBox.critical(self, u"Ménage non valide",
                                 msg, 
                                 QMessageBox.Ok, QMessageBox.NoButton)
            return False
        self._declaration = Declaration(self, noi)
        self._declaration.exec_()
        self.emit(SIGNAL('compoChanged()'))

    def openLogement(self):
        self._logement = Logement(self.scenario, self)
        self._logement.exec_()
        self.emit(SIGNAL('compoChanged()'))

    def openInfoComp(self):
        self._infocomp = InfoComp(self.scenario, self)
        self._infocomp.exec_()
        self.emit(SIGNAL('compoChanged()'))
        
    def disconnectAll(self):
        for person in self._listPerson:
            QObject.disconnect(person[S.birth],  SIGNAL('dateChanged(QDate)'), self.birthChanged)
            QObject.disconnect(person[S.decpos], SIGNAL('currentIndexChanged(QString)'), self.quifoyChanged)
            QObject.disconnect(person[S.decnum], SIGNAL('currentIndexChanged(int)'), self.foyerChanged)
            QObject.disconnect(person[S.fampos], SIGNAL('currentIndexChanged(QString)'), self.quifamChanged)
            QObject.disconnect(person[S.famnum], SIGNAL('currentIndexChanged(int)'), self.familleChanged)
            QObject.disconnect(person[S.decbtn], SIGNAL('clicked()'), self.openDeclaration)
            
    def connectAll(self):
        for person in self._listPerson:
            QObject.connect(person[S.birth],  SIGNAL('dateChanged(QDate)'), self.birthChanged)
            QObject.connect(person[S.decpos], SIGNAL('currentIndexChanged(QString)'), self.quifoyChanged)
            QObject.connect(person[S.decnum], SIGNAL('currentIndexChanged(int)'), self.foyerChanged)
            QObject.connect(person[S.fampos], SIGNAL('currentIndexChanged(QString)'), self.quifamChanged)
            QObject.connect(person[S.famnum], SIGNAL('currentIndexChanged(int)'), self.familleChanged)
            QObject.connect(person[S.decbtn], SIGNAL('clicked()'), self.openDeclaration)

    def openScenario(self):
        cas_type_dir = CONF.get('paths', 'cas_type_dir')
        fileName = QFileDialog.getOpenFileName(self,
                                               u"Ouvrir un cas type", 
                                               cas_type_dir, 
                                               u"Cas type OpenFisca (*.ofct)")
        if not fileName == '':
            n = len(self.scenario.indiv)
            try:
                self.scenario.openFile(fileName)
                while n < self.nbRow():
                    self.addRow()
                    n += 1
                while n > self.nbRow(): 
                    self.rmvRow()
                    n -= 1
                self.emit(SIGNAL('compoChanged()'))
                self.emit(SIGNAL("ok()"))
            except Exception, e:
                QMessageBox.critical(
                    self, "Erreur", u"Erreur lors de l'ouverture du fichier : le fichier n'est pas reconnu",
                    QMessageBox.Ok, QMessageBox.NoButton)
Exemple #13
0
class ScenarioWidget(QDockWidget, Ui_Menage):
    def __init__(self, scenario, parent=None):
        super(ScenarioWidget, self).__init__(parent)
        self.setupUi(self)
        self.parent = parent
        self.scenario = scenario

        self.connect(self.open_btn, SIGNAL('clicked()'), self.openScenario)
        self.connect(self.save_btn, SIGNAL('clicked()'), self.saveScenario)
        self.connect(self.add_btn, SIGNAL('clicked()'), self.addPerson)
        self.connect(self.rmv_btn, SIGNAL('clicked()'), self.rmvPerson)
        self.connect(self.lgt_btn, SIGNAL('clicked()'), self.openLogement)
        self.connect(self.inf_btn, SIGNAL('clicked()'), self.openInfoComp)
        self.connect(self, SIGNAL('compoChanged()'), self.changed)

        self._listPerson = []
        self.addPref()
        self.rmv_btn.setEnabled(False)
        self.emit(SIGNAL("ok()"))

    def changed(self):
        self.disconnectAll()
        self.scenario.genNbEnf()
        self.populate()
        self.emit(SIGNAL('changed()'))
        self.connectAll()

    def nbRow(self):
        return self.scenario.nbIndiv()

    def populate(self):
        self.populateBirth()
        self.populateQuifoyCombo()
        self.populateFoyerCombo()
        self.populateQuifamCombo()
        self.populateFamilleCombo()

    def populateBirth(self):
        for noi, vals in self.scenario.indiv.iteritems():
            birth = QDate(vals['birth'])
            self._listPerson[noi][S.birth].setDate(birth)

    def populateFoyerCombo(self):
        declarKeys = self.scenario.declar.keys()
        for noi, vals in self.scenario.indiv.iteritems():
            noidec = vals['noidec']
            box = self._listPerson[noi][S.decnum]
            box.clear()
            button = self._listPerson[noi][S.decbtn]
            button.setText('Foyer %d' % (noidec + 1))
            if vals['quifoy'] == 'vous':
                box.addItems(['%d' % (noidec + 1)])
                button.setEnabled(True)
            else:
                box.addItems(['%d' % (k + 1) for k in declarKeys])
                button.setEnabled(False)
                box.setCurrentIndex(declarKeys.index(noidec))

    def populateQuifoyCombo(self):
        for noi, vals in self.scenario.indiv.iteritems():
            quifoy = vals['quifoy']
            # retrieve the foyer combobox of individu number noi
            box = self._listPerson[noi][S.decpos]
            # set the combobox to 'vous' 'conj' or 'pac'
            if quifoy == 'vous': box.setCurrentIndex(0)
            elif quifoy == 'conj': box.setCurrentIndex(1)
            elif quifoy[:3] == 'pac': box.setCurrentIndex(2)

    def populateFamilleCombo(self):
        familleKeys = self.scenario.famille.keys()
        for noi, vals in self.scenario.indiv.iteritems():
            noichef = vals['noichef']
            box = self._listPerson[noi][S.famnum]
            box.clear()
            if vals['quifam'] == 'parent 1':
                box.addItems(['%d' % (noichef + 1)])
            else:
                box.addItems(['%d' % (k + 1) for k in familleKeys])
                box.setCurrentIndex(familleKeys.index(noichef))

    def populateQuifamCombo(self):
        for noi, vals in self.scenario.indiv.iteritems():
            quifam = vals['quifam']
            # retrieve the foyer combobox of individu number noi
            box = self._listPerson[noi][S.fampos]
            # set the combobox to 'parent 1' 'parent 2' or 'enfant'
            if quifam == 'chef': box.setCurrentIndex(0)
            elif quifam == 'part': box.setCurrentIndex(1)
            elif quifam[:3] == 'enf': box.setCurrentIndex(2)

    def birthChanged(self, date):
        senderNoi = int(self.sender().objectName()[3])
        self.scenario.indiv[senderNoi].update({'birth': date.toPyDate()})
        self.emit(SIGNAL('compoChanged()'))

    def foyerChanged(self):
        sender = self.sender()
        noi = int(sender.objectName()[3])
        newfoyer = int(sender.currentText()[-1]) - 1
        self.scenario.modify(noi, newFoyer=newfoyer)
        self.emit(SIGNAL('compoChanged()'))

    def quifoyChanged(self, newQuifoy):
        senderNoi = int(self.sender().objectName()[3])
        self.scenario.modify(senderNoi, newQuifoy=newQuifoy)
        self.emit(SIGNAL('compoChanged()'))

    def familleChanged(self):
        sender = self.sender()
        noi = int(sender.objectName()[3])
        newfamille = int(sender.currentText()[-1]) - 1
        self.scenario.modifyFam(noi, newFamille=newfamille)
        self.emit(SIGNAL('compoChanged()'))

    def quifamChanged(self, newFam):
        if newFam == 'parent 1': qui = 'chef'
        elif newFam == 'parent 2': qui = 'part'
        elif newFam == 'enfant': qui = 'enf'
        senderNoi = int(self.sender().objectName()[3])
        self.scenario.modifyFam(senderNoi, newQuifam=qui)
        self.emit(SIGNAL('compoChanged()'))

    def addPref(self):
        noi = 0
        self._listPerson.append([
            QLabel('%d' % (noi + 1), self),
            QDateEdit(self),
            QComboBox(self),
            QComboBox(self),
            QPushButton(self),
            QComboBox(self),
            QComboBox(self)
        ])

        temp = self._listPerson[0]

        temp[S.birth].setDisplayFormat(
            QApplication.translate("Page01", "dd MMM yyyy", None,
                                   QApplication.UnicodeUTF8))
        temp[S.birth].setObjectName('Bir%d' % noi)
        temp[S.birth].setCurrentSection(QDateEdit.YearSection)

        temp[S.decpos].setObjectName('Dec%d' % noi)
        temp[S.decpos].addItems(['vous'])
        temp[S.decpos].setEnabled(False)

        temp[S.decnum].setObjectName('Foy%d' % noi)
        temp[S.decnum].setEnabled(False)

        temp[S.fampos].addItems(['parent 1'])
        temp[S.fampos].setObjectName('Fam%d' % noi)
        temp[S.fampos].setEnabled(False)

        temp[S.famnum].setObjectName('Fam%d' % noi)
        temp[S.famnum].setEnabled(False)

        temp[S.decbtn].setObjectName('But%d' % noi)

        for i in xrange(7):
            self.gridLayout.addWidget(temp[i], noi + 2, i)
            self.gridLayout.setAlignment(temp[i], Qt.AlignCenter)

        self.emit(SIGNAL('compoChanged()'))

    def addPerson(self):
        noi = self.nbRow()
        self.addRow()
        if noi == 1:
            self.scenario.addIndiv(noi,
                                   birth=date(1975, 1, 1),
                                   quifoy='conj',
                                   quifam='part')
        else:
            self.scenario.addIndiv(noi,
                                   birth=date(2000, 1, 1),
                                   quifoy='pac',
                                   quifam='enf')
        self.emit(SIGNAL('compoChanged()'))

    def addRow(self):
        noi = len(self._listPerson)
        self._listPerson.append([
            QLabel('%d' % (noi + 1), self),
            QDateEdit(self),
            QComboBox(self),
            QComboBox(self),
            QPushButton(self),
            QComboBox(self),
            QComboBox(self)
        ])
        temp = self._listPerson[-1]

        temp[S.birth].setDisplayFormat(
            QApplication.translate("Page01", "dd MMM yyyy", None,
                                   QApplication.UnicodeUTF8))
        temp[S.birth].setObjectName('Bir%d' % noi)
        temp[S.birth].setCurrentSection(QDateEdit.YearSection)

        temp[S.decpos].setObjectName('Dec%d' % noi)
        temp[S.decpos].addItems(['vous', 'conj', 'pac'])

        temp[S.decnum].setObjectName('Foy%d' % noi)

        temp[S.fampos].setObjectName('Fam%d' % noi)
        temp[S.fampos].addItems(['parent 1', 'parent 2', 'enfant'])

        temp[S.famnum].setObjectName('Fam%d' % noi)

        temp[S.decbtn].setObjectName('But%d' % noi)

        for i in xrange(7):
            self.gridLayout.addWidget(temp[i], noi + 2, i)
            self.gridLayout.setAlignment(temp[i], Qt.AlignCenter)

        self.rmv_btn.setEnabled(True)
        if len(self.scenario.indiv) == 9:
            self.add_btn.setEnabled(False)

    def rmvPerson(self, noi=None):
        if noi == None: noi = self.nbRow() - 1
        self.scenario.rmvIndiv(noi)
        self.rmvRow()
        self.add_btn.setEnabled(True)

        self.emit(SIGNAL('compoChanged()'))

    def rmvRow(self):
        '''
        Enlève le dernier individu et l'efface dans le foyer
        '''
        toDel = self._listPerson.pop()
        for widget in toDel:
            widget.setParent(None)
        if len(self.scenario.indiv) == 1: self.rmv_btn.setEnabled(False)

    def openDeclaration(self):
        noi = int(self.sender().objectName()[3])
        self.scenario.genNbEnf()
        msg = self.scenario.check_consistency()
        if msg:
            QMessageBox.critical(self, u"Ménage non valide", msg,
                                 QMessageBox.Ok, QMessageBox.NoButton)
            return False
        self._declaration = Declaration(self, noi)
        self._declaration.exec_()
        self.emit(SIGNAL('compoChanged()'))

    def openLogement(self):
        self._logement = Logement(self.scenario, self)
        self._logement.exec_()
        self.emit(SIGNAL('compoChanged()'))

    def openInfoComp(self):
        self._infocomp = InfoComp(self.scenario, self)
        self._infocomp.exec_()
        self.emit(SIGNAL('compoChanged()'))

    def disconnectAll(self):
        for person in self._listPerson:
            QObject.disconnect(person[S.birth], SIGNAL('dateChanged(QDate)'),
                               self.birthChanged)
            QObject.disconnect(person[S.decpos],
                               SIGNAL('currentIndexChanged(QString)'),
                               self.quifoyChanged)
            QObject.disconnect(person[S.decnum],
                               SIGNAL('currentIndexChanged(int)'),
                               self.foyerChanged)
            QObject.disconnect(person[S.fampos],
                               SIGNAL('currentIndexChanged(QString)'),
                               self.quifamChanged)
            QObject.disconnect(person[S.famnum],
                               SIGNAL('currentIndexChanged(int)'),
                               self.familleChanged)
            QObject.disconnect(person[S.decbtn], SIGNAL('clicked()'),
                               self.openDeclaration)

    def connectAll(self):
        for person in self._listPerson:
            QObject.connect(person[S.birth], SIGNAL('dateChanged(QDate)'),
                            self.birthChanged)
            QObject.connect(person[S.decpos],
                            SIGNAL('currentIndexChanged(QString)'),
                            self.quifoyChanged)
            QObject.connect(person[S.decnum],
                            SIGNAL('currentIndexChanged(int)'),
                            self.foyerChanged)
            QObject.connect(person[S.fampos],
                            SIGNAL('currentIndexChanged(QString)'),
                            self.quifamChanged)
            QObject.connect(person[S.famnum],
                            SIGNAL('currentIndexChanged(int)'),
                            self.familleChanged)
            QObject.connect(person[S.decbtn], SIGNAL('clicked()'),
                            self.openDeclaration)

    def openScenario(self):
        cas_type_dir = CONF.get('paths', 'cas_type_dir')
        fileName = QFileDialog.getOpenFileName(self, u"Ouvrir un cas type",
                                               cas_type_dir,
                                               u"Cas type OpenFisca (*.ofct)")
        if not fileName == '':
            n = len(self.scenario.indiv)
            try:
                self.scenario.openFile(fileName)
                while n < self.nbRow():
                    self.addRow()
                    n += 1
                while n > self.nbRow():
                    self.rmvRow()
                    n -= 1
                self.emit(SIGNAL('compoChanged()'))
                self.emit(SIGNAL("ok()"))
            except Exception, e:
                QMessageBox.critical(
                    self, "Erreur",
                    u"Erreur lors de l'ouverture du fichier : le fichier n'est pas reconnu",
                    QMessageBox.Ok, QMessageBox.NoButton)
 def __str__(self):
     str = "symbol='%s', " % self.symbol + Declaration.__str__(self)
     return str
 def __init__(self, symbol, locator=None):
     Declaration.__init__(self, locator)
     self.symbol = symbol
     return