import sys, PyQt4
from PyQt4 import QtGui, QtCore
from CreerScrutinUI import Ui_mainDialog
class CreerScrutinWindow(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
self.ui = Ui_mainDialog()
self.ui.setupUi(self)
print "INIT"
self.changeTypeScrutin("")
self.connect(self.ui.addElecteurBouton, QtCore.SIGNAL("clicked()"),self.addElecteur)
self.connect(self.ui.addCandidatBouton, QtCore.SIGNAL("clicked()"),self.addCandidat)
self.connect(self.ui.supprimeElecteurBouton, QtCore.SIGNAL("clicked()"),self.supprimeElecteur)
self.connect(self.ui.supprimeCandidatBouton, QtCore.SIGNAL("clicked()"),self.supprimeCandidat)
self.connect(self.ui.chargerScrutinBouton, QtCore.SIGNAL("clicked()"), self.chargerScrutin)
self.connect(self.ui.sauverScrutinBouton, QtCore.SIGNAL("clicked()"), self.sauverScrutin)
self.connect(self.ui.typeScrutinCombo, QtCore.SIGNAL("currentIndexChanged(QString)"), self.changeTypeScrutin)
self.ui.dateDebut.setDateTime(QtCore.QDateTime.currentDateTime ())
self.ui.dateFin.setDateTime(QtCore.QDateTime.currentDateTime ())
def closeEvent(self, event):
reply = QtGui.QMessageBox.question(self, 'Message',u"Voulez-vous vraiment quitter ?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
def addElecteur(self):
if self.ui.electeurEdit.text() == "":
return
self.ui.electeurList.addItem(self.ui.electeurEdit.text())
self.ui.electeurEdit.setText("")
def addCandidat(self):
if self.ui.candidatEdit.text() == "":
return
self.ui.candidatList.addItem(self.ui.candidatEdit.text())
self.ui.candidatEdit.setText("")
def supprimeElecteur(self):
electeur = self.ui.electeurList.takeItem(self.ui.electeurList.currentRow())
electeur = None
def supprimeCandidat(self):
candidat = self.ui.candidatList.takeItem(self.ui.candidatList.currentRow())
candidat = None
def getScrutinHash( self, typeScrutin ):
scrHash = {}
if typeScrutin == "Vote unique":
scrHash["Sieges a pourvoir"] = self.ui.aPourvoirSpin.value()
elif typeScrutin == "Vote unique transferable":
scrHash["Sieges a pourvoir"] = self.ui.aPourvoirSpin.value()
elif typeScrutin == "Vote par assentiment":
scrHash["Sieges a pourvoir"] = self.ui.aPourvoirSpin.value()
scrHash["Methode de calcul"] = unicode(self.ui.methodeCalculCombo.currentText())
scrHash["Notes entieres"] = (self.ui.entierCheck.checkState() == QtCore.Qt.Checked)
scrHash["Note minimale"] = self.ui.noteMinSpin.value()
scrHash["Note maximale"] = self.ui.noteMaxSpin.value()
scrHash["Note par defaut"] = self.ui.noteDefautSpin.value()
else:
self.erreur(u"Type de scrutin inconnu : impossible de sauver ses paramètres !")
return scrHash
def setScrutinHash( self, h, typeScrutin):
if typeScrutin == "Vote unique":
self.ui.aPourvoirSpin.setValue(h["Sieges a pourvoir"])
elif typeScrutin == "Vote unique transferable":
self.ui.aPourvoirSpin.setValue(h["Sieges a pourvoir"])
elif typeScrutin == "Vote par assentiment":
self.ui.aPourvoirSpin.setValue(h["Sieges a pourvoir"])
i = self.ui.methodeCalculCombo.findText(h["Methode de calcul"])
if i == -1:
self.erreur (u"Methode de calcul inconnue"+h["Methode de calcul"])
else:
self.ui.methodeCalculCombo.setCurrentIndex(i)
if h["Notes entieres"] == True:
self.ui.entierCheck.setCheckState(QtCore.Qt.Checked)
else:
self.ui.entierCheck.setCheckState(QtCore.Qt.Unchecked)
self.ui.noteMinSpin.setValue(h["Note minimale"])
self.ui.noteMaxSpin.setValue(h["Note maximale"])
self.ui.noteDefautSpin.setValue(h["Note par defaut"])
else:
self.erreur ( u"Type de scrutin inconnu, impossible de charger ses paramètres !" )
def chargerScrutin(self):
filename = QtGui.QFileDialog.getOpenFileName ( self, "Charger un scrutin existant...", "", "Scrutin (*.scrutin)")
if filename is None or filename == "":
return
f = open(filename, 'r')
if eval(f.readline()) != "SCRUTIN FILE version 1.0":
self.erreur (u"Fichier invalide : l'en tête est incorrect !")
return
self.ui.intituleEdit.setText(eval(f.readline()))
dt = eval(f.readline().replace ( "\n", "" ))
self.ui.dateDebut.setDateTime(QtCore.QDateTime.fromString(dt, QtCore.Qt.ISODate))
dt = eval(f.readline().replace ( "\n", "" ))
self.ui.dateFin.setDateTime(QtCore.QDateTime.fromString(dt, QtCore.Qt.ISODate))
typeS = eval(f.readline()).replace ( "\n", "" )
i = self.ui.typeScrutinCombo.findText(typeS)
if i == -1:
self.erreur (u"Impossible de retrouver le type de scrutin '"+unicode(typeS)+"'")
else:
self.ui.typeScrutinCombo.setCurrentIndex(i)
self.setScrutinHash(eval(f.readline()), typeS)
self.changeTypeScrutin("")
self.ui.electeurList.clear()
for t in eval(f.readline()):
elec = t.replace ( "\n", "" )
self.ui.electeurList.addItem(elec)
self.ui.candidatList.clear()
for t in eval(f.readline()):
cand = t.replace ( "\n", "" )
self.ui.candidatList.addItem(cand)
self.ui.scrutinDescriptionText.setHtml(eval(f.readline()))
if eval(f.readline()) != "SCRUTIN FILE version 1.0":
self.erreur (u"Fichier invalide : la dernière ligne est incorrecte !")
return
f.close()
def sauverScrutin(self):
filename = QtGui.QFileDialog.getSaveFileName ( self, u"Enregistrer le scrutin", "", "Scrutin (*.scrutin)")
if filename is None or filename == "":
return
f = open(filename, 'w')
f.write(repr("SCRUTIN FILE version 1.0")+"\n")
f.write(repr(unicode(self.ui.intituleEdit.text()))+"\n")
f.write(repr(str(self.ui.dateDebut.dateTime().toString(QtCore.Qt.ISODate)))+"\n")
f.write(repr(str(self.ui.dateFin.dateTime().toString(QtCore.Qt.ISODate)))+"\n")
f.write(repr(str(self.ui.typeScrutinCombo.currentText()))+"\n")
f.write(repr(self.getScrutinHash(str(self.ui.typeScrutinCombo.currentText())))+"\n")
items = [unicode(self.ui.electeurList.item(index).text()) for index in xrange(self.ui.electeurList.count())]
f.write(repr(items)+"\n")
items = [unicode(self.ui.candidatList.item(index).text()) for index in xrange(self.ui.candidatList.count())]
f.write(repr(items)+"\n")
s = repr(unicode(self.ui.scrutinDescriptionText.toHtml()))
f.write(s.replace ( "\n", " " ) + "\n")
f.write(repr("SCRUTIN FILE version 1.0") + "\n")
f.close()
def changeTypeScrutin(self, texte):
print "Type de scrutin changé"
typeScrutin = self.ui.typeScrutinCombo.currentText()
if typeScrutin == "Vote unique":
self.ui.label_noteMin.setVisible(False)
self.ui.label_noteMax.setVisible(False)
self.ui.label_noteDefaut.setVisible(False)
self.ui.entierCheck.setVisible(False)
self.ui.methodeCalculCombo.setVisible(False)
self.ui.noteMinSpin.setVisible(False)
self.ui.noteMaxSpin.setVisible(False)
self.ui.noteDefautSpin.setVisible(False)
elif typeScrutin == "Vote unique transferable":
self.ui.label_noteMin.setVisible(False)
self.ui.label_noteMax.setVisible(False)
self.ui.label_noteDefaut.setVisible(False)
self.ui.entierCheck.setVisible(False)
self.ui.methodeCalculCombo.setVisible(False)
self.ui.noteMinSpin.setVisible(False)
self.ui.noteMaxSpin.setVisible(False)
self.ui.noteDefautSpin.setVisible(False)
elif typeScrutin == "Vote par assentiment":
self.ui.label_noteMin.setVisible(True)
self.ui.label_noteMax.setVisible(True)
self.ui.label_noteDefaut.setVisible(True)
self.ui.entierCheck.setVisible(True)
self.ui.methodeCalculCombo.setVisible(True)
self.ui.noteMinSpin.setVisible(True)
self.ui.noteMaxSpin.setVisible(True)
self.ui.noteDefautSpin.setVisible(True)
else:
self.erreur(u"Type de vote inconnu !"+unicode(typeScrutin))
def erreur( self, message ):
QtGui.QMessageBox.warning(self, "Scrutin", message)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = CreerScrutinWindow()
window.show()
sys.exit(app.exec_())