Beispiel #1
0
 def __init__(self, parent=None, gestionnaire=gestClasse.Sconet):
     """
     le constructeur
     récupérer des données SCONET
     @param parent le widget parent
     @param gestionnaire le système censé gérer les données du fichier f
     """
     QDialog.__init__(self, parent=parent)
     self.ok=None
     self.ui=Ui_Dialog()
     self.ui.setupUi(self)
     self.prefs=db.readPrefs()
     self.gestionnaire=gestionnaire
     self.connecteGestionnaire()
     self.ui.listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
     self.ui.listWidget.setSortingEnabled(True)
     self.ui.checkBoxNumero.setChecked(True)
     self.ui.spinBoxNumero.setValue(1)
     self.ui.spinBoxNumero.setEnabled(True)
     self.ui.pushButtonFile.clicked.connect(self.fichierEleves)
     self.ui.pushButton_replierArbre.clicked.connect(self.replie)
     self.ui.pushButton_cocher.clicked.connect(self.coche)
     self.ui.pushButton_decocher.clicked.connect(self.decoche)
     self.ui.pushButton_addToList.clicked.connect(self.addToList)
     self.ui.pushButton_delInList.clicked.connect(self.delInList)
     self.ui.pushButton_OK.clicked.connect(self.valid)
     self.ui.pushButton_Esc.clicked.connect(self.escape)
     self.ui.checkBoxNumero.stateChanged.connect(self.checkNum)
Beispiel #2
0
class choixElevesDialog(QDialog):
    """
    implémente un dialogue permettant de choisir des élèves
    les propriétés importantes sont self.ok, vrai si on doit prendre en
    compte la liste sélectionnée, et le contenu de la liste des sélectionnés,
    dont on peut récupérer les élèves un par un à l'aide de self.pop()
    """

    def __init__(self, parent=None, gestionnaire=gestClasse.Sconet):
        """
        le constructeur
        récupérer des données SCONET
        @param parent le widget parent
        @param gestionnaire le système censé gérer les données du fichier f
        """
        QDialog.__init__(self, parent=parent)
        self.ok=None
        self.ui=Ui_Dialog()
        self.ui.setupUi(self)
        self.prefs=db.readPrefs()
        self.gestionnaire=gestionnaire
        self.connecteGestionnaire()
        self.ui.listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.ui.listWidget.setSortingEnabled(True)
        self.ui.checkBoxNumero.setChecked(True)
        self.ui.spinBoxNumero.setValue(1)
        self.ui.spinBoxNumero.setEnabled(True)
        self.ui.pushButtonFile.clicked.connect(self.fichierEleves)
        self.ui.pushButton_replierArbre.clicked.connect(self.replie)
        self.ui.pushButton_cocher.clicked.connect(self.coche)
        self.ui.pushButton_decocher.clicked.connect(self.decoche)
        self.ui.pushButton_addToList.clicked.connect(self.addToList)
        self.ui.pushButton_delInList.clicked.connect(self.delInList)
        self.ui.pushButton_OK.clicked.connect(self.valid)
        self.ui.pushButton_Esc.clicked.connect(self.escape)
        self.ui.checkBoxNumero.stateChanged.connect(self.checkNum)

    def fichierEleves(self):
        """
        choisit et ouvre un nouveau fichiers d'élèves
        """
        caption="Choisissez un nouveau fichier de gestion des élèves"
        dirname=os.path.dirname(self.prefs["schoolFile"])
        newFile=QFileDialog.getOpenFileName (self, caption, dirname)
        if os.path.exists(newFile):
            self.prefs["schoolFile"]=newFile
            db.writePrefs(self.prefs)
            self.connecteGestionnaire(renew=True)
        return

    def connecteGestionnaire(self, renew=False):
        """
        met en place l'arbre des noms d'élèves
        @param renew vrai si on veut vider tout l'arbre et recommencer
        """
        try:
            self.ui.lineEditFile.setText(self.prefs["schoolFile"])
            self.ui.treeView.connecteGestionnaire(self.prefs["schoolFile"],
                                                  self.gestionnaire,
                                                  renew=renew)
        except Exception as err:
            QMessageBox.warning(None,
                                QApplication.translate("Dialog","Échec à l'ouverture du fichier élèves",None),
                                QApplication.translate("Dialog","Le fichier {schoolfile} n'a pas pu être traité : {erreur}",None).format(schoolfile=self.prefs["schoolFile"], erreur=err))
    
    def checkNum(self, state):
        """
        fonction de rappel utilisée quand on coche/décoche la case pour
        prendre en compte le numéro
        @param state : l'état coché ou décoché
        """
        if state==Qt.Checked:
            self.ui.spinBoxNumero.setEnabled(True)
        else:
            self.ui.spinBoxNumero.setEnabled(False)
        return
    
    def replie(self):
        """
        replie toutes les classes du dialogue
        """
        self.ui.treeView.collapseAll()
        return

    def coche(self):
        """
        coche toutes les cases d'élèves visibles
        """
        for e in self.ui.treeView.expandedItems():
            e.setCheckState(Qt.Checked)
        return

    def decoche(self):
        """
        décoche toutes les cases d'élèves, visibles ou cachées
        """
        for e in self.ui.treeView.expandedItems():
            e.setCheckState(Qt.Unchecked)
        return

    def updateParentIcon(self):
        """
        Met à jour l'icône du bouton d'activation dans l'application parente
        pour refléter la présence d'éléments dans la liste
        """
        if self.parent():
            self.parent().setAvailableNames(self.ui.listWidget.count() > 0)
        return

    def addToList(self):
        """
        ajoute les élèves cochés dans la liste (s'ils n'y sont pas déjà)
        """
        for n in self.listeUnique_Names():
            if not self.ui.listWidget.findItems(n,Qt.MatchExactly):
                self.ui.listWidget.addItem(n)
        self.updateParentIcon()
        return

    def delInList(self):
        """
        retire les élèves de la liste quand ils y sont sélectionnés
        """
        rows=[]
        for i in self.ui.listWidget.selectedIndexes():
            rows.append(i.row())
        rows.sort(reverse=True)
        for r in rows:
            self.ui.listWidget.takeItem(r)
        self.updateParentIcon()
        return

    def pop(self):
        """
        renvoie et supprime le premier élément de la liste de noms;
        si cette liste est vide, renvoie None
        @return un nom pour un baladeur, sinon None
        """
        if self.ui.listWidget.count() == 0:
            return
        i=self.ui.listWidget.takeItem(0)
        self.updateParentIcon()
        data=i.data(Qt.DisplayRole)
        return data

    def itemStrings(self):
        """
        @return une liste des chaînes contenues dans les items
        """
        itemList=self.ui.listWidget.findItems("*",Qt.MatchWrap | Qt.MatchWildcard)
        l=[i.data(Qt.DisplayRole) for i in itemList]
        l.sort()
        return l

    def takeItem(self, item):
        """
        retire un item de la liste et le renvoie (pourvu qu'il y existe)
        @param une chaîne donnant le texte d'un item à trouver
        @return un nom pour un baladeur, sinon None
        """
        found=self.ui.listWidget.findItems(item,Qt.MatchExactly)
        if len(found) > 0:
            r=self.ui.listWidget.row(found[0])
            i=self.ui.listWidget.takeItem(r)
            self.updateParentIcon()
            data=i.data(Qt.DisplayRole)
            return data
        return ""

    def valid(self):
        """
        Prend acte de la validation
        """
        self.ok=True
        self.close()
        return

    def escape(self):
        """
        Prend acte de l'abandon ; supprime les éléments de la liste et
        ferme le dialogue
        """
        while self.ui.listWidget.count() > 0:
            self.ui.listWidget.takeItem(0)
        self.updateParentIcon()
        self.ok=False
        self.close()
        return

    def listeChoix(self):
        """
        @return la liste de QStandardItems sélectionnés
        """
        return self.ui.treeView.checkedItems()

    def listeUnique_Names(self):
        result=[]
        for e in self.listeChoix():
            prefixe=""
            if self.ui.checkBoxNumero.isChecked():
                n=self.ui.spinBoxNumero.value()
                prefixe="%02d-" %n
                self.ui.spinBoxNumero.setValue(n+1)
            result.append(prefixe+e.unique_name)
        return result