EcranEditionDecor.py 8.6 KB

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