ScolaSync: Fichier source de src/choixEleves.py

ScolaSync 5.1 |

choixEleves.py
Aller à la documentation de ce fichier.
1 #!/usr/bin/python
2
3 licence={}
4 licence['en']="""
5 file choixEleves.py
6 this file is part of the project scolasync
7
8 Copyright (C) 2012 Georges Khaznadar <georgesk@ofset.org>
9
10 This program is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version3 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 """
23
24 import gestClasse
25 from PyQt5.QtWidgets import *
26 from PyQt5.QtCore import *
27 from Ui_choixEleves import Ui_Dialog
28 import db
29 import sys, os.path
30
31
32 # implémente un dialogue permettant de choisir des élèves
33 # les propriétés importantes sont self.ok, vrai si on doit prendre en
34 # compte la liste sélectionnée, et le contenu de la liste des sélectionnés,
35 # dont on peut récupérer les élèves un par un à l'aide de self.pop()
36 #
37
38 class choixElevesDialog(QDialog):
39
40 # le constructeur
41 # récupérer des données SCONET
42 # @param parent le widget parent
43 # @param gestionnaire le système censé gérer les données du fichier f
44 #
45
46 def __init__(self, parent=None, gestionnaire=gestClasse.Sconet):
47 QDialog.__init__(self, parent=parent)
48 self.ok=None
49 self.ui=Ui_Dialog()
50 self.ui.setupUi(self)
51 self.prefs=db.readPrefs()
52 self.gestionnaire=gestionnaire
53 self.connecteGestionnaire()
54 self.ui.listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
55 self.ui.listWidget.setSortingEnabled(True)
56 self.ui.checkBoxNumero.setChecked(True)
57 self.ui.spinBoxNumero.setValue(1)
58 self.ui.spinBoxNumero.setEnabled(True)
59 self.ui.pushButtonFile.clicked.connect(self.fichierEleves)
60 self.ui.pushButton_replierArbre.clicked.connect(self.replie)
61 self.ui.pushButton_cocher.clicked.connect(self.coche)
62 self.ui.pushButton_decocher.clicked.connect(self.decoche)
63 self.ui.pushButton_addToList.clicked.connect(self.addToList)
64 self.ui.pushButton_delInList.clicked.connect(self.delInList)
65 self.ui.pushButton_OK.clicked.connect(self.valid)
66 self.ui.pushButton_Esc.clicked.connect(self.escape)
67 self.ui.checkBoxNumero.stateChanged.connect(self.checkNum)
68
69
71
72 def fichierEleves(self):
73 caption="Choisissez un nouveau fichier de gestion des élèves"
74 dirname=os.path.dirname(self.prefs["schoolFile"])
75 newFile=QFileDialog.getOpenFileName (self, caption, dirname)
76 if os.path.exists(newFile):
77 self.prefs["schoolFile"]=newFile
78 db.writePrefs(self.prefs)
79 self.connecteGestionnaire(renew=True)
80 return
81
82
85
86 def connecteGestionnaire(self, renew=False):
87 try:
88 self.ui.lineEditFile.setText(self.prefs["schoolFile"])
89 self.ui.treeView.connecteGestionnaire(self.prefs["schoolFile"],
90 self.gestionnaire,
91 renew=renew)
92 except Exception as err:
93 QMessageBox.warning(None,
94 QApplication.translate("Dialog","Échec à l'ouverture du fichier élèves",None),
95 QApplication.translate("Dialog","Le fichier {schoolfile} n'a pas pu être traité : {erreur}",None).format(schoolfile=self.prefs["schoolFile"], erreur=err))
96
97 # fonction de rappel utilisée quand on coche/décoche la case pour
98 # prendre en compte le numéro
99 # @param state : l'état coché ou décoché
100 #
101
102 def checkNum(self, state):
103 if state==Qt.Checked:
104 self.ui.spinBoxNumero.setEnabled(True)
105 else:
106 self.ui.spinBoxNumero.setEnabled(False)
107 return
108
109
111
112 def replie(self):
113 self.ui.treeView.collapseAll()
114 return
115
116
118
119 def coche(self):
120 for e in self.ui.treeView.expandedItems():
121 e.setCheckState(Qt.Checked)
122 return
123
124
126
127 def decoche(self):
128 for e in self.ui.treeView.expandedItems():
129 e.setCheckState(Qt.Unchecked)
130 return
131
132 # Met à jour l'icône du bouton d'activation dans l'application parente
133 # pour refléter la présence d'éléments dans la liste
134 #
135
136 def updateParentIcon(self):
137 if self.parent():
138 self.parent().setAvailableNames(self.ui.listWidget.count() > 0)
139 return
140
141
143
144 def addToList(self):
145 for n in self.listeUnique_Names():
146 if not self.ui.listWidget.findItems(n,Qt.MatchExactly):
147 self.ui.listWidget.addItem(n)
148 self.updateParentIcon()
149 return
150
151
153
154 def delInList(self):
155 rows=[]
156 for i in self.ui.listWidget.selectedIndexes():
157 rows.append(i.row())
158 rows.sort(reverse=True)
159 for r in rows:
160 self.ui.listWidget.takeItem(r)
161 self.updateParentIcon()
162 return
163
164 # renvoie et supprime le premier élément de la liste de noms;
165 # si cette liste est vide, renvoie None
166 # @return un nom pour un baladeur, sinon None
167 #
168
169 def pop(self):
170 if self.ui.listWidget.count() == 0:
171 return
172 i=self.ui.listWidget.takeItem(0)
173 self.updateParentIcon()
174 data=i.data(Qt.DisplayRole)
175 return data
176
177
179
180 def itemStrings(self):
181 itemList=self.ui.listWidget.findItems("*",Qt.MatchWrap | Qt.MatchWildcard)
182 l=[i.data(Qt.DisplayRole) for i in itemList]
183 l.sort()
184 return l
185
186
190
191 def takeItem(self, item):
192 found=self.ui.listWidget.findItems(item,Qt.MatchExactly)
193 if len(found) > 0:
194 r=self.ui.listWidget.row(found[0])
195 i=self.ui.listWidget.takeItem(r)
196 self.updateParentIcon()
197 data=i.data(Qt.DisplayRole)
198 return data
199 return ""
200
201
203
204 def valid(self):
205 self.ok=True
206 self.close()
207 return
208
209 # Prend acte de l'abandon ; supprime les éléments de la liste et
210 # ferme le dialogue
211 #
212
213 def escape(self):
214 while self.ui.listWidget.count() > 0:
215 self.ui.listWidget.takeItem(0)
216 self.updateParentIcon()
217 self.ok=False
218 self.close()
219 return
220
221
223
224 def listeChoix(self):
225 return self.ui.treeView.checkedItems()
226
227 def listeUnique_Names(self):
228 result=[]
229 for e in self.listeChoix():
230 prefixe=""
231 if self.ui.checkBoxNumero.isChecked():
232 n=self.ui.spinBoxNumero.value()
233 prefixe="%02d-" %n
234 self.ui.spinBoxNumero.setValue(n+1)
235 result.append(prefixe+e.unique_name)
236 return result
237
238 if __name__=="__main__":
239 app=QApplication(sys.argv)
240 d=choixElevesDialog(gestionnaire=gestClasse.Sconet)
241 d.exec_()
242 print ("dialogue ok = %s" %d.ok)
243 i=d.pop()
244 while i:
245 print ("on a dépilé %s" %i)
246 i=d.pop()
247
src.choixEleves.choixElevesDialog.__init__
def __init__(self, parent=None, gestionnaire=gestClasse.Sconet)
Definition: choixEleves.py:46
src.choixEleves.choixElevesDialog.valid
def valid(self)
Prend acte de la validation.
Definition: choixEleves.py:204
src.choixEleves.choixElevesDialog.fichierEleves
def fichierEleves(self)
choisit et ouvre un nouveau fichiers d'élèves
Definition: choixEleves.py:72
src.choixEleves.choixElevesDialog.listeChoix
def listeChoix(self)
Definition: choixEleves.py:224
src.choixEleves.choixElevesDialog.prefs
prefs
Definition: choixEleves.py:51
QDialog
src.choixEleves.choixElevesDialog.coche
def coche(self)
coche toutes les cases d'élèves visibles
Definition: choixEleves.py:119
src.choixEleves.choixElevesDialog.gestionnaire
gestionnaire
Definition: choixEleves.py:52
src.choixEleves.choixElevesDialog.pop
def pop(self)
Definition: choixEleves.py:169
src.choixEleves.choixElevesDialog.ok
ok
Definition: choixEleves.py:48
src.choixEleves.choixElevesDialog.takeItem
def takeItem(self, item)
retire un item de la liste et le renvoie (pourvu qu'il y existe)
Definition: choixEleves.py:191
src.gestClasse.Sconet
Une classe pour travailler avec des données Sconet.
Definition: gestClasse.py:72
src.choixEleves.choixElevesDialog.ui
ui
Definition: choixEleves.py:49
src.choixEleves.choixElevesDialog.escape
def escape(self)
Definition: choixEleves.py:213
src.choixEleves.choixElevesDialog.listeUnique_Names
def listeUnique_Names(self)
Definition: choixEleves.py:227
src.choixEleves.choixElevesDialog
Definition: choixEleves.py:38
src.choixEleves.choixElevesDialog.updateParentIcon
def updateParentIcon(self)
Definition: choixEleves.py:136
src.choixEleves.choixElevesDialog.addToList
def addToList(self)
ajoute les élèves cochés dans la liste (s'ils n'y sont pas déjà)
Definition: choixEleves.py:144
src.choixEleves.choixElevesDialog.checkNum
def checkNum(self, state)
Definition: choixEleves.py:102
QtCore
src.choixEleves.choixElevesDialog.decoche
def decoche(self)
décoche toutes les cases d'élèves, visibles ou cachées
Definition: choixEleves.py:127
QtWidgets
src.choixEleves.choixElevesDialog.itemStrings
def itemStrings(self)
Definition: choixEleves.py:180
src.choixEleves.choixElevesDialog.delInList
def delInList(self)
retire les élèves de la liste quand ils y sont sélectionnés
Definition: choixEleves.py:154
src.choixEleves.choixElevesDialog.connecteGestionnaire
def connecteGestionnaire(self, renew=False)
met en place l'arbre des noms d'élèves
Definition: choixEleves.py:86
src.choixEleves.choixElevesDialog.replie
def replie(self)
replie toutes les classes du dialogue
Definition: choixEleves.py:112