EcranEditionDecor.py 8.0 KB

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