#from __future__ import unicode_literals # -*- coding: utf-8 -*- from __future__ import division import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from Decor import Decor from ui.ecran_editionDecor import Ui_edd_fenetre from EcranEditionObjet import EcranEditionObjet from outilsSvg import * from VueEditionForme import VueEditionForme from Objet import Objet import rsc class EcranEditionDecor(QDialog): """interface de creation/edition de decors""" def __init__(self, decor=None, pageInitiale = 0, formeCases = "H", parent=None): """initialisation de la fenetre""" super (EcranEditionDecor, self).__init__() self.pixGraphique = None self.createWidgets() if decor == None: self.decor = Decor() else: self.decor = decor self.modeCreation = (decor == None) self.ouverture() self.ui.edd_menu.setCurrentCell(pageInitiale, 0) self.ui.edd_pages.setCurrentIndex(pageInitiale) if formeCases == "C": self.ui.edd_casesCarrees.setChecked(True) self.majFormeCases() def nouvelIdDecor(self): """renvoie un identifiant pour un nouveau terrain""" dicoSvg = afficheSvg("lib\\biblio\\Decor") nouvelId = 1 while str(nouvelId) in dicoSvg.keys(): nouvelId += 1 return str(nouvelId) def formeCases(self): retour = "" if self.ui.edd_casesHexa.isChecked(): retour = "H" else: retour = "C" return retour def createWidgets(self): """construction de l'interface""" #construction de l'interface self.ui = Ui_edd_fenetre() self.ui.setupUi(self) self.connect(self.ui.edd_nom, SIGNAL("textEdited(QString)"), self.majActivationEnregistrer) self.connect(self.ui.edd_enregistrer, SIGNAL("clicked()"), self.enregistrer) self.connect(self.ui.edd_annuler, SIGNAL("clicked()"), self.annuler) self.connect(self.ui.edd_casesHexa, SIGNAL("clicked()"), self.majFormeCases) self.connect(self.ui.edd_casesCarrees, SIGNAL("clicked()"), self.majFormeCases) self.connect(self.ui.edd_couleur, SIGNAL("clicked()"), self.selectionCouleur) self.connect(self.ui.edd_image, SIGNAL("clicked()"), self.selectionImage) self.connect(self.ui.edd_logo, SIGNAL("clicked()"), self.selectionnerLogo) self.vueForme = VueEditionForme(self) self.construireInventaire() self.connect(self.ui.edd_filtreTypeObjet, SIGNAL("currentChanged(int)"), self.filtrerInventaire) self.ui.edd_filtreTypeObjet.stackUnder(self.ui.edd_listeInventaire) def vueGraphique(self): return self.ui.edd_vueForme def ouverture(self): """premier affichage: on met a jour les champs""" #page_nom self.ui.edd_nom.majTexte(self.decor.nom) if self.decor.logo: self.ui.edd_logo.chargerImage(self.decor.logo) else: self.ui.edd_logo.majTexte("Choisissez \nun fichier\nimage") self.vueForme.creer(self.formeCases()) self.vueForme.autoriserModifForme(self.modeCreation) self.vueForme.majCouleur(self.decor.couleur) self.vueForme.chargerFormeDef(self.decor.formeDef[self.formeCases()]) self.vueForme.chargerImageDef(self.decor.img) #page deplacements self.ui.edd_taille.setValue(self.decor.hauteur) self.ui.edd_escalade.setChecked(self.decor.escalade) self.ui.edd_brule.setChecked(self.decor.brule) #page inventaire self.ui.edd_listeInventaire.charger(self.decor.inventaire) #page_notes self.ui.edd_notes.setText(QString.fromUtf8(self.decor.notes)) #autre self.majActivationEnregistrer() ### page apparence def majFormeCases(self): if self.vueForme.formeCases() != self.formeCases(): #on enregistre la def de forme, d'image et d'etiquette en cours self.decor.formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef() self.decor.img = self.vueForme.imageDef() self.decor.etiquette = self.vueForme.etiquetteDef() #on recree la scene avec la nouvelle forme de cases self.vueForme.vider() self.vueForme.creer(self.formeCases()) #on charge les def correspondantes a la nouvelle forme self.vueForme.chargerFormeDef(self.decor.formeDef[self.formeCases()]) self.vueForme.chargerImageDef(self.decor.img) self.vueForme.chargerEtiquetteDef(self.decor.etiquette) def logoModifie(self): if not len(self.decor.img.nomFichier) > 0: #si pas d'image attribuee au pion, on utilise le logo pour le pion self.vueForme.nouvelleImageDef(self.ui.edd_logo.image()) def selectionnerLogo(self): img = rsc.selectionImage() if img: self.ui.edd_logo.chargerImage(img) self.vueForme.nouvelleImageDef(self.ui.edd_logo.image()) def selectionImage(self): """selectionne le fichier image dans la boite de dialogue dediee""" img = rsc.selectionImage() if img: self.vueForme.nouvelleImageDef(img) 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.decor.couleur = couleur self.vueForme.majCouleur(couleur) ### page inventaire def construireInventaire(self): """construction de la page inventaire""" self.ui.edd_listeInventaire.construire() self.connect(self.ui.edd_listeInventaire, SIGNAL("objetClique(int)"), self.editerObjet) def editerObjet(self, indexObjet): if indexObjet < len(self.ui.edd_listeInventaire.inventaire()): objet = self.ui.edd_listeInventaire.inventaire()[indexObjet] else: objet = None typeObjet = self.ui.edd_filtreTypeObjet.currentIndex() - 1 self.fenetreEO = EcranEditionObjet(objet, typeObjet) self.fenetreEO.show() self.fenetreEO.exec_() resultat = self.fenetreEO.resultat() if resultat: if objet: self.ui.edd_listeInventaire.majObjet(objet, resultat) else: self.ui.edd_listeInventaire.ajouterObjet(resultat) else: if objet: self.ui.edd_listeInventaire.supprimerObjet(objet) self.fenetreEO = None def majTotauxInventaire(self): inv = self.ui.edd_listeInventaire.inventaire() poidsTotal = 0.00 for obj in inv: poidsTotal += obj.poidsTotal() self.ui.edd_inventaire_poids.majTexte("{} kg".format(poidsTotal)) def filtrerInventaire(self, index): filtre = index - 1 self.ui.edd_listeInventaire.filtrer(filtre) #### barre d'outils def majActivationEnregistrer(self): """verifie la validite des saisies""" self.ui.edd_enregistrer.setEnabled(len(self.ui.edd_nom.texte()) > 0) def enregistrer(self): """enregistre le terrain cree/edite""" #identifiant if not self.decor.id: self.decor.id = self.nouvelIdDecor() #page nom self.decor.nom = self.ui.edd_nom.texte() self.decor.logo = self.ui.edd_logo.image() self.decor.formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef() self.decor.img = self.vueForme.imageDef() self.decor.etiquette = self.vueForme.etiquetteDef() #page dep self.decor.hauteur = self.ui.edd_taille.value() self.decor.escalade = self.ui.edd_escalade.isChecked() self.decor.brule = self.ui.edd_brule.isChecked() #page inventaire self.decor.inventaire = self.ui.edd_listeInventaire.inventaire() #page notes self.decor.notes = str(self.ui.edd_notes.toPlainText().toUtf8()) self.done(1) def annuler(self): """annule la creation/edition""" self.decor = None self.done(0) if __name__ == "__main__": app = QApplication(sys.argv) ecran = EcranEditionDecor() ecran.show() r = app.exec_() exit(r)