EcranEditionDecor.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. from __future__ import division
  4. import sys
  5. from PyQt4.QtCore import SIGNAL, QString
  6. from PyQt4.QtGui import QDialog, QColorDialog, QColor, QApplication
  7. from Decor import Decor
  8. from EcranEditionObjet import EcranEditionObjet
  9. from Objet import Objet
  10. from VueEditionForme import VueEditionForme
  11. import rsc
  12. from ui.ecran_editionDecor import Ui_edd_fenetre
  13. class EcranEditionDecor(QDialog):
  14. """interface de creation/edition de decors"""
  15. def __init__(self, decor=None, pageInitiale = 0, formeCases = "H", parent=None):
  16. """initialisation de la fenetre"""
  17. super (EcranEditionDecor, self).__init__()
  18. self.createWidgets()
  19. self.decor = Decor() if not decor else decor
  20. self.ouverture()
  21. self.allerAPage(pageInitiale)
  22. if formeCases == "C":
  23. self.ui.edd_casesCarrees.setChecked(True)
  24. self.majFormeCases()
  25. def formeCases(self):
  26. return "H" if self.ui.edd_casesHexa.isChecked() else "C"
  27. def createWidgets(self):
  28. """construction de l'interface"""
  29. #construction de l'interface
  30. self.ui = Ui_edd_fenetre()
  31. self.ui.setupUi(self)
  32. self.connect(self.ui.edd_nom, SIGNAL("textEdited(QString)"), self.majActivationEnregistrer)
  33. self.connect(self.ui.edd_enregistrer, SIGNAL("clicked()"), self.enregistrer)
  34. self.connect(self.ui.edd_annuler, SIGNAL("clicked()"), self.annuler)
  35. self.connect(self.ui.edd_casesHexa, SIGNAL("clicked()"), self.majFormeCases)
  36. self.connect(self.ui.edd_casesCarrees, SIGNAL("clicked()"), self.majFormeCases)
  37. self.connect(self.ui.edd_couleur, SIGNAL("clicked()"), self.selectionCouleur)
  38. self.connect(self.ui.edd_image, SIGNAL("clicked()"), self.selectionImage)
  39. self.connect(self.ui.edd_logo, SIGNAL("clicked()"), self.selectionnerLogo)
  40. self.vueForme = VueEditionForme(self)
  41. self.construireInventaire()
  42. self.connect(self.ui.edd_filtreTypeObjet, SIGNAL("currentChanged(int)"), self.filtrerInventaire)
  43. self.ui.edd_filtreTypeObjet.stackUnder(self.ui.edd_listeInventaire)
  44. def mat(self):
  45. """retourne le materiel de la fenetre"""
  46. return self.decor
  47. def vueGraphique(self):
  48. return self.ui.edd_vueForme
  49. def allerAPage(self, index):
  50. self.ui.edd_menu.setCurrentCell(index, 0)
  51. self.ui.edd_pages.setCurrentIndex(index)
  52. def ouverture(self):
  53. """premier affichage: on met a jour les champs"""
  54. #page_nom
  55. self.ui.edd_nom.majTexte(self.decor.nom())
  56. if self.decor.logo.estValide():
  57. self.ui.edd_logo.chargerImage(self.decor.logo)
  58. else:
  59. self.ui.edd_logo.majTexte("Choisissez \nun fichier\nimage")
  60. self.vueForme.creer(self.formeCases())
  61. self.vueForme.autoriserModifForme(True)
  62. self.vueForme.majCouleur(self.decor.couleur)
  63. self.vueForme.chargerFormeDef(self.decor.formeDef[self.formeCases()])
  64. self.vueForme.chargerImageDef(self.decor.img)
  65. #page deplacements
  66. self.ui.edd_taille.setValue(self.decor.hauteur)
  67. self.ui.edd_hauteurPlafond.setChecked(self.decor.hauteurMax)
  68. self.ui.edd_escalade.setChecked(self.decor.escalade)
  69. self.ui.edd_brule.setChecked(self.decor.brule)
  70. #page inventaire
  71. self.ui.edd_listeInventaire.charger(self.decor.inventaire)
  72. #page_notes
  73. if "dim" in self.decor.details: self.ui.edd_detail_dim.majTexte(self.decor.details["dim"])
  74. if "poids" in self.decor.details: self.ui.edd_detail_poids.majTexte(self.decor.details["poids"])
  75. if "notes" in self.decor.details: self.ui.edd_notes.majTexte(self.decor.details["notes"])
  76. #autre
  77. self.majActivationEnregistrer()
  78. ### page apparence
  79. def majFormeCases(self):
  80. if self.vueForme.formeCases() != self.formeCases():
  81. #on enregistre la def de forme, d'image et d'etiquette en cours
  82. self.decor.formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef()
  83. self.decor.img = self.vueForme.imageDef()
  84. self.decor.etiquette = self.vueForme.etiquetteDef()
  85. #on recree la scene avec la nouvelle forme de cases
  86. self.vueForme.vider()
  87. self.vueForme.creer(self.formeCases())
  88. #on charge les def correspondantes a la nouvelle forme
  89. self.vueForme.chargerFormeDef(self.decor.formeDef[self.formeCases()])
  90. self.vueForme.chargerImageDef(self.decor.img)
  91. self.vueForme.chargerEtiquetteDef(self.decor.etiquette)
  92. def logoModifie(self):
  93. if not len(self.decor.img.nomFichier) > 0:
  94. #si pas d'image attribuee au pion, on utilise le logo pour le pion
  95. self.vueForme.nouvelleImageDef(self.ui.edd_logo.image())
  96. def selectionnerLogo(self):
  97. img = rsc.selectionImage()
  98. if img:
  99. self.ui.edd_logo.chargerImage(img)
  100. self.vueForme.nouvelleImageDef(self.ui.edd_logo.image())
  101. def selectionImage(self):
  102. """selectionne le fichier image dans la boite de dialogue dediee"""
  103. img = rsc.selectionImage()
  104. if img:
  105. self.vueForme.nouvelleImageDef(img)
  106. def selectionCouleur(self):
  107. """selectionne la couleur dans la boite de dialogue dediee"""
  108. couleur = QColorDialog(self).getColor(QColor("white"), self)
  109. if couleur.isValid():
  110. self.decor.couleur = couleur
  111. self.vueForme.majCouleur(couleur)
  112. ### page inventaire
  113. def construireInventaire(self):
  114. """construction de la page inventaire"""
  115. self.ui.edd_listeInventaire.construire()
  116. self.connect(self.ui.edd_listeInventaire, SIGNAL("objetClique(int)"), self.editerObjet)
  117. def editerObjet(self, indexObjet):
  118. if indexObjet < len(self.ui.edd_listeInventaire.inventaire()):
  119. objet = self.ui.edd_listeInventaire.inventaire()[indexObjet]
  120. else:
  121. objet = None
  122. typeObjet = self.ui.edd_filtreTypeObjet.currentIndex() - 1
  123. self.fenetreEO = EcranEditionObjet(objet, typeObjet)
  124. self.fenetreEO.show()
  125. self.fenetreEO.exec_()
  126. resultat = self.fenetreEO.resultat()
  127. if resultat:
  128. if objet:
  129. self.ui.edd_listeInventaire.majObjet(objet, resultat)
  130. else:
  131. self.ui.edd_listeInventaire.ajouterObjet(resultat)
  132. else:
  133. if objet:
  134. self.ui.edd_listeInventaire.supprimerObjet(objet)
  135. self.fenetreEO = None
  136. def majTotauxInventaire(self):
  137. inv = self.ui.edd_listeInventaire.inventaire()
  138. poidsTotal = 0.00
  139. for obj in inv:
  140. poidsTotal += obj.poidsTotal()
  141. self.ui.edd_inventaire_poids.majTexte("{} kg".format(poidsTotal))
  142. def filtrerInventaire(self, index):
  143. filtre = index - 1
  144. self.ui.edd_listeInventaire.filtrer(filtre)
  145. #### barre d'outils
  146. def majActivationEnregistrer(self):
  147. """verifie la validite des saisies"""
  148. self.ui.edd_enregistrer.setEnabled(len(self.ui.edd_nom.texte()) > 0)
  149. def enregistrer(self):
  150. """enregistre le terrain cree/edite"""
  151. #page nom
  152. self.decor.majNom(self.ui.edd_nom.texte())
  153. if self.ui.edd_logo.image():
  154. self.decor.logo = self.ui.edd_logo.image()
  155. self.decor.formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef()
  156. self.decor.img = self.vueForme.imageDef()
  157. self.decor.etiquette = self.vueForme.etiquetteDef()
  158. #page dep
  159. self.decor.hauteur = self.ui.edd_taille.value()
  160. self.decor.hauteurMax = self.ui.edd_hauteurPlafond.isChecked()
  161. self.decor.escalade = self.ui.edd_escalade.isChecked()
  162. self.decor.brule = self.ui.edd_brule.isChecked()
  163. #page inventaire
  164. self.decor.inventaire = self.ui.edd_listeInventaire.inventaire()
  165. #page notes
  166. self.decor.details["dim"] = self.ui.edd_detail_dim.texte()
  167. self.decor.details["poids"] = self.ui.edd_detail_poids.texte()
  168. self.decor.details["notes"] = self.ui.edd_notes.texte()
  169. self.done(1)
  170. def annuler(self):
  171. """annule la creation/edition"""
  172. self.decor = None
  173. self.done(0)
  174. if __name__ == "__main__":
  175. app = QApplication(sys.argv)
  176. ecran = EcranEditionDecor()
  177. ecran.show()
  178. r = app.exec_()
  179. exit(r)