# -*- coding: utf-8 -*-

# Copyright 2009 Manik Bhattacharjee (manik-listes at altern.org)
#
# This file is part of PyVote.
#
# PyVote is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# PyVote is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with PyVote.  If not, see <http://www.gnu.org/licenses/>.


#
# Crée une fenetre de dialogue permettant de voter pour le Vote unique (vote classique)
# Ce programme n'est pas appelé directement en pratique, mais il est appelé par le 
#    programme de vote principal
#
import sys, PyQt4
from PyQt4 import QtGui, QtCore
from VoteUniqueUI import Ui_VoteUnique
from ScrutinIO import Scrutin, Votes, Registre


class VoteUniqueDialog(QtGui.QDialog):
    def __init__(self, scrutin):
        QtGui.QDialog.__init__(self)

        # Configure l'interface utilisateur à partir du fichier généré par Qt4 Designer
        self.ui = Ui_VoteUnique()
        self.ui.setupUi(self)
        self.scrutin = scrutin
        self.ui.candidatList.clear()
        for candidat in self.scrutin["Candidats"]:
          self.ui.candidatList.addItem(candidat)
        # Connecte les boutons aux fonctions associées.
        self.connect(self.ui.voteBlancBouton, QtCore.SIGNAL("clicked()"), self.voteBlanc)

        # Un clic sur un nom dans la liste doit le sélectionner
        self.connect(self.ui.candidatList, QtCore.SIGNAL("currentRowChanged(int)"), self.selectCandidat)



    # Quand l'utilisateur ferme la fenetre, demander une confirmation : plus que ça, il faut demander un code administrateur
    def closeEvent(self, event):
        reply = QtGui.QMessageBox.question(self, 'Message',"Voulez-vous vraiment quitter ?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


    def resetVote( self ):
        self.ui.electeurEdit.setText("")
        self.ui.choixActuelLabel.setText("")
        self.ui.candidatList.clear()
        for candidat in self.scrutin["Candidats"]:
          self.ui.candidatList.addItem(candidat)

    #Fonction appelée pour sélectionner un candidat
    def selectCandidat(self, index):
        self.ui.choixActuelLabel.setText(self.ui.candidatList.item(index).text())

    def voteBlanc( self ):
        self.ui.choixActuelLabel.setText("Vote Blanc")

    # Renvoie une table de hachage contenant le vote
    def getVoteHash( self ):
            vHash = {"choix":unicode(self.ui.choixActuelLabel.text())}
            return vHash


    # Validation du vote en cours
    def validateVote( self, electeurs, dejavotes ):
      if not(unicode(self.ui.electeurEdit.text()) in electeurs):
        self.erreur("L'identifiant de l'électeur est invalide pour cette élection !")
        return False
      elif unicode(self.ui.electeurEdit.text()) in dejavotes:
        self.erreur("Vous avez déjà voté !\nVote refusé !")
        return False
      elif self.ui.choixActuelLabel.text() == "":
        self.erreur("Vote invalide ! Sélectionnez un candidat ou le vote blanc.")
        return False
      else:
        return True


    # Renvoie l'électeur courant
    def getVotant( self ):
      return unicode(self.ui.electeurEdit.text())


    # Fonction pour afficher une erreur
    def erreur( self, message ):
        QtGui.QMessageBox.warning(self, "Scrutin", message)


if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)
   window = VoteUniqueDialog()

   window.show()
   sys.exit(app.exec_())