#from __future__ import unicode_literals
# -*- coding: utf-8 -*-
from __future__ import division
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from Decor import Decor
from ui.ecran_editionDecor import Ui_editionDecor
from outilsSvg import *
from VueEditionForme import VueEditionForme


class EcranEditionDecors(QDialog):
    """interface de creation/edition de decors"""
    def __init__(self, decor=None, formeCases = "H", parent=None):
        """initialisation de la fenetre"""
        super (EcranEditionDecors, self).__init__()
        
        self.pixGraphique = None
        self.formeCases = formeCases
        self.createWidgets()
        
        if decor == None:
            self.decor = Decor()
            self.accesCreation()
        else:
            self.decor = decor
            self.accesEdition()
        self.majAffichage("")    
        
    def createWidgets(self):
        """construction de l'interface"""
        #construction de l'interface
        self.ui = Ui_editionDecor()
        self.ui.setupUi(self)
        self.connect(self.ui.enregistrerDecor, SIGNAL("clicked()"), self.enregistrer)
        self.connect(self.ui.annulerDecor, SIGNAL("clicked()"), self.annuler)
        self.connect(self.ui.supprimerDecor, SIGNAL("clicked()"), self.supprimer)
        self.connect(self.ui.idDecor, SIGNAL("textEdited(QString)"), self.majAffichage)
        self.connect(self.ui.nomDecor, SIGNAL("textEdited(QString)"), self.majAffichage)
        self.connect(self.ui.couleurDecor, SIGNAL("clicked()"), self.selectionCouleur)

        self.connect(self.ui.imgDecor, SIGNAL("textEdited(QString)"), self.majApercuImage)
        self.connect(self.ui.imgLogoDecor, SIGNAL("textEdited(QString)"), self.majApercuImage)
        self.connect(self.ui.imgAfficherDecor, SIGNAL("stateChanged(int)"), self.majApercuImage)
        self.connect(self.ui.imgPivoteDecor, SIGNAL("stateChanged(int)"), self.majApercuImage)
        self.connect(self.ui.imgMasqueDecor, SIGNAL("stateChanged(int)"), self.majApercuImage)
        self.connect(self.ui.imgTailleXDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
        self.connect(self.ui.imgTailleYDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
        self.connect(self.ui.imgPosXDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
        self.connect(self.ui.imgPosYDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
        self.connect(self.ui.imgRotationDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
        self.connect(self.ui.imgReinitDecor, SIGNAL("clicked()"), self.reinitImage)

        self.vueForme = VueEditionForme(self, self.formeCases)
        self.vueForme.creer()
        
    def accesEdition(self):
        """ouverture en mode edition"""
        self.ui.idDecor.setEnabled(True)
       
        self.ui.idDecor.setText(QString.fromUtf8(str(self.decor.id)))
        self.ui.nomDecor.setText(QString.fromUtf8(str(self.decor.nom)))        
        if self.decor.couleur.isValid():
            self.ui.affichageCouleurDecor.setStyleSheet("QLabel {backGround:%s}" %(self.decor.couleur.name()))

        self.ui.imgLogoDecor.setText(QString.fromUtf8(str(self.decor.logo)))
        if self.decor.img.nom != self.decor.logo: 
            self.ui.imgDecor.setText(QString.fromUtf8(str(self.decor.img.nom)))
        self.ui.imgTailleXDecor.setValue(self.decor.img.kx)
        self.ui.imgTailleYDecor.setValue(self.decor.img.ky)
        self.ui.imgPosXDecor.setValue(self.decor.img.dx)
        self.ui.imgPosYDecor.setValue(self.decor.img.dy)
        self.ui.imgRotationDecor.setValue(self.decor.img.rotation)
        self.ui.imgPivoteDecor.setChecked(self.decor.img.pivote)
        self.ui.imgMasqueDecor.setChecked(self.decor.img.masqueAuto)
          
        self.ui.hauteurDecor.setValue(self.decor.hauteur)    
        self.ui.couvertDecor.setChecked(self.decor.couvert)
        self.ui.escaladeDecor.setChecked(self.decor.escalade)
        self.ui.franchissablePiedDecor.setChecked(self.decor.franchissablePied)
        self.ui.franchissableVolDecor.setChecked(self.decor.franchissableVol)
        self.ui.bruleDecor.setChecked(self.decor.brule)
              
        self.vueForme.majForme(self.decor.formeDef[self.formeCases])    
        self.ui.supprimerDecor.setEnabled(True)
        self.ui.idDecor.setEnabled(False)
        self.majApercuImage()

    def accesCreation(self):
        """ouverture en mode creation"""
        self.ui.idDecor.setEnabled(True)
        self.ui.idDecor.setText(QString.fromUtf8(str(self.nouvelIdDecor())))
        self.ui.idDecor.setEnabled(False)
        self.majApercuImage()

    def majAffichage(self, txt):
        """verifie la validite des saisies"""
        self.ui.enregistrerDecor.setEnabled(len(self.ui.idDecor.text().toUtf8()) > 0 and len(self.ui.nomDecor.text().toUtf8()) > 0)

    def nouvelIdDecor(self):
        """renvoie un identifiant pour un nouveau decor"""
        dicoSvg = afficheSvg("lib\\biblio\\decor")
        nouvelId = 1
        while str(nouvelId) in dicoSvg.keys():
            nouvelId += 1
        return str(nouvelId)

    def selectionCouleur(self):
        """selectionne la couleur dans la boite de dialogue dediee"""
        couleur = QColorDialog(self).getColor(QColor("white"), self)
        if couleur.isValid():
            nomCouleur = couleur.name()
            self.ui.affichageCouleurDecor.setStyleSheet("QLabel {backGround:%s}" %(nomCouleur))
            self.decor.couleur = couleur    

    def majApercuImage(self):
        """met a jour l'image sur l'apercu du pion"""
        if self.ui.imgAfficherDecor.isChecked():
            if len(str(self.ui.imgDecor.text().toUtf8())) > 0:
                img = str(self.ui.imgDecor.text().toUtf8())
                self.vueForme.majImage(img, self.ui.imgTailleXDecor.value() \
                                  , self.ui.imgTailleYDecor.value() \
                                  , self.ui.imgPosXDecor.value() \
                                  , self.ui.imgPosYDecor.value() \
                                  , self.ui.imgRotationDecor.value() \
                                  , self.ui.imgPivoteDecor.isChecked() \
                                  , self.ui.imgMasqueDecor.isChecked())
            else:
                img = str(self.ui.imgLogoDecor.text().toUtf8())
                self.vueForme.majImage(img)
        else:
            img = ""
            self.vueForme.majImage(img)


    def reinitImage(self):
        self.ui.imgTailleXDecor.setValue(10)
        self.ui.imgTailleYDecor.setValue(10)
        self.ui.imgPosXDecor.setValue(0)
        self.ui.imgPosYDecor.setValue(0)
        self.ui.imgRotationDecor.setValue(0)
        self.ui.imgPivoteDecor.setChecked(False)
        self.ui.imgMasqueDecor.setChecked(False)
        self.majApercuImage()
            
    def enregistrer(self):
        """enregistre le terrain cree/edite"""
        self.decor.id = str(self.ui.idDecor.text().toUtf8())
        self.decor.nom = str(self.ui.nomDecor.text().toUtf8())

        self.decor.logo = str(self.ui.imgLogoDecor.text().toUtf8())
        if len(str(self.ui.imgDecor.text().toUtf8())) > 0:       
            self.decor.img.nom = str(self.ui.imgDecor.text().toUtf8())
            self.decor.img.kx = self.ui.imgTailleXDecor.value()
            self.decor.img.ky = self.ui.imgTailleYDecor.value()
            self.decor.img.dx = self.ui.imgPosXDecor.value()
            self.decor.img.dy = self.ui.imgPosYDecor.value()
            self.decor.img.rotation = self.ui.imgRotationDecor.value()
            self.decor.img.pivote = self.ui.imgPivoteDecor.isChecked()
            self.decor.img.masqueAuto = self.ui.imgMasqueDecor.isChecked()
        else:
            self.decor.img.nom = str(self.ui.imgLogoDecor.text().toUtf8())
            self.decor.img.kx = 10
            self.decor.img.ky = 10
            self.decor.img.dx = 0
            self.decor.img.dy = 0
            self.decor.img.rotation = 0
            self.decor.img.pivote = False
            self.decor.img.masqueAuto = self.ui.imgMasqueDecor.isChecked()
            
        self.decor.hauteur = int(self.ui.hauteurDecor.value())        
        self.decor.couvert = self.ui.couvertDecor.isChecked()
        self.decor.brule = self.ui.bruleDecor.isChecked()
        self.decor.franchissablePied = self.ui.franchissablePiedDecor.isChecked()
        self.decor.franchissableVol = self.ui.franchissableVolDecor.isChecked()
        self.decor.escalade = self.ui.escaladeDecor.isChecked()
        
        self.decor.formeDef[self.formeCases] = self.vueForme.formeDef()
        
        enregistrer(self.decor.id, self.decor, "lib\\biblio\\decor")
        self.decor = None
        self.done(1)

    def supprimer(self):
        """supprimer l'enregistrement de ce terrain"""
        supprSvg("lib\\biblio\\decor", self.decor.id)
        self.done(1)

    def annuler(self):
        """annule la creation/edition"""
        self.decor = None
        self.done(0)
