#from __future__ import unicode_literals # -*- coding: utf-8 -*- from __future__ import division import sys from PyQt4.QtCore import SIGNAL, QString from PyQt4.QtGui import QDialog, QColorDialog, QColor, QApplication from Decor import Decor from EcranEditionObjet import EcranEditionObjet from Objet import Objet from VueEditionForme import VueEditionForme import rsc from ui.ecran_editionDecor import Ui_edd_fenetre 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.createWidgets() self.decor = Decor() if not decor else decor self.ouverture() self.allerAPage(pageInitiale) if formeCases == "C": self.ui.edd_casesCarrees.setChecked(True) self.majFormeCases() def formeCases(self): return "H" if self.ui.edd_casesHexa.isChecked() else "C" 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 mat(self): """retourne le materiel de la fenetre""" return self.decor def vueGraphique(self): return self.ui.edd_vueForme def allerAPage(self, index): self.ui.edd_menu.setCurrentCell(index, 0) self.ui.edd_pages.setCurrentIndex(index) 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.estValide(): 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(True) 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_hauteurPlafond.setChecked(self.decor.hauteurMax) 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 if "dim" in self.decor.details: self.ui.edd_detail_dim.majTexte(self.decor.details["dim"]) if "poids" in self.decor.details: self.ui.edd_detail_poids.majTexte(self.decor.details["poids"]) if "notes" in self.decor.details: self.ui.edd_notes.majTexte(self.decor.details["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(): 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""" #page nom self.decor.majNom(self.ui.edd_nom.texte()) if self.ui.edd_logo.image(): 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.hauteurMax = self.ui.edd_hauteurPlafond.isChecked() 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.details["dim"] = self.ui.edd_detail_dim.texte() self.decor.details["poids"] = self.ui.edd_detail_poids.texte() self.decor.details["notes"] = self.ui.edd_notes.texte() 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)