| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- #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)
|