#!/usr/bin/python
# -*- coding: UTF-8 -*-


'''
    Programme tutoriel 5 sur l'utilisation de PyQT.
'''


#############################################################################
# Informations de versions
#############################################################################
__project__   = 'Applications Interface Graphique'
__author__    = 'Simon CHOLLET (simon.chollet@ens.fr)'
__modifiers__ = ''
__date__      = '18/06/2013'
__version__   = '1.0'


#############################################################################
# Importations
#############################################################################
# Module systeme : pour la gestion des arguments
import sys

# Module QtGUI de PyQT
from PyQt4 import QtGui


#############################################################################
# Definitions specifiques
#############################################################################


#############################################################################
# Declaration des classes / fonctions
#############################################################################
class MessageBox(QtGui.QWidget):
    '''
    Classe qui permet de definir une fenetre dont on doit valider la
    fermeture avec une boite de dialogue avec 2 boutons 'yes' et 'no'.
    -------------------------------------------------------------------------
    Attributs : Aucun.
    '''

    def __init__(self, parent=None):
        '''
        Constructeur
        ---------------------------------------------------------------------
        Arguments :
            - parent : Fenetre parente.
        ---------------------------------------------------------------------
        Retour : Aucun.
        '''

        # Appel du constructeur de la classe mere
        QtGui.QWidget.__init__(self, parent)

        # Reglage des dimensions de la fenetre
        self.setGeometry(300, 300, 250, 150)
        # Reglage du titre de la fenetre
        self.setWindowTitle('Message Box')


    def closeEvent(self, event):
        '''
        Methode appelee sur fermeture de la fenetre.
        ---------------------------------------------------------------------
        Arguments :
            - event : Evenement.
        ---------------------------------------------------------------------
        Retour : Aucun.
        '''

        # Creation de la boite de dialogue de demande de confirmation
        reply = QtGui.QMessageBox.question(
            self,                    # Fenetre parente
            'Message',               # Titre de la fenetre
            "Are you sure to quit?", # Message a afficher
            QtGui.QMessageBox.Yes |
            QtGui.QMessageBox.No,    # Boutons a incorporer
            QtGui.QMessageBox.No)    # Bouton selectionne par defaut

        # Selon la reponse
        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


#############################################################################
# Execution ...
#############################################################################


#
#
# Fonction appelee lors de la demande
# d'execution de la classe/module
if __name__ == "__main__":
    # Creation de l'application
    app = QtGui.QApplication(sys.argv)

    # Creation de la fenetre
    qb_win = MessageBox()

    # Affichage de la fenetre
    qb_win.show()
    
    # Lancement de l'application graphique
    res = app.exec_()

    # Quitte le programme, avec le resultat de l'execution precedente
    sys.exit(res)
