frameAttaque.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. """Panneau de creation/edition d'une attaque
  4. """
  5. import sys
  6. from PyQt4.QtCore import *
  7. from PyQt4.QtGui import *
  8. from ui.ecran_panneauAttaques import Ui_att_frame
  9. from Actions import *
  10. import regles
  11. from ui.dm import *
  12. class FrameAttaque(QFrame):
  13. """Panneau de creation/edition d'une attaque
  14. a inserer dans le layout de l'onglet attaques
  15. de l'ecran d'edition des combattants"""
  16. def __init__(self, idAtt, parent=None):
  17. super (FrameAttaque, self).__init__(parent)
  18. self.idAtt = idAtt
  19. self.enCreation = False
  20. self.createWidgets()
  21. def createWidgets(self):
  22. """construction de l'interface"""
  23. self.ui = Ui_att_frame()
  24. self.ui.setupUi(self)
  25. self.ui.att_forme.setVisible(False)
  26. self.ui.att_forme_e.setVisible(False)
  27. self.ui.att_rayon.setVisible(False)
  28. self.ui.att_rayon_e.setVisible(False)
  29. self.ui.att_voile.setAttribute(Qt.WA_TransparentForMouseEvents)
  30. self.connect(self.ui.att_type, SIGNAL("activated(int)"), self.majAffichage)
  31. self.connect(self.ui.att_type, SIGNAL("activated(int)"), self.signalerNouvelleAttaque)
  32. self.connect(self.ui.att_forme, SIGNAL("activated(int)"), self.majAffichage)
  33. self.connect(self.ui.att_nom, SIGNAL("textEdited(const QString&)"), self.signalerNouvelleAttaque)
  34. self.connect(self.ui.att_supprimer, SIGNAL("clicked()"), self.signalerSuppressionAttaque)
  35. self.construireListeAttributs()
  36. def signalerNouvelleAttaque(self):
  37. """on signale a la fenetre principale qu'une nouvelle attaque est creee"""
  38. if not self.enCreation:
  39. self.emit(SIGNAL("attaqueNouvelle()"))
  40. self.enCreation = True
  41. self.majAffichage()
  42. def signalerSuppressionAttaque(self):
  43. """on signale a la fenetre principale qu'une nouvelle attaque est creee"""
  44. if self.enCreation:
  45. self.enCreation = False
  46. self.reinitialiser()
  47. self.emit(SIGNAL("attaqueSupprimer(int)"), self.idAtt)
  48. def majAffichage(self):
  49. if self.enCreation: self.ui.att_nom.setPlaceholderText(QString(""))
  50. self.ui.att_voile.setVisible(not self.enCreation)
  51. self.ui.att_forme.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2)
  52. self.ui.att_forme_e.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2)
  53. self.ui.att_rayon.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2 and self.ui.att_forme.currentIndex() == 1)
  54. self.ui.att_rayon_e.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2 and self.ui.att_forme.currentIndex() == 1)
  55. self.ui.att_supprimer.setEnabled(self.enCreation)
  56. def attaque(self):
  57. """retourne l'attaque representee"""
  58. attaque = None
  59. if self.enCreation:
  60. if self.ui.att_type.currentIndex() == 0:
  61. attaque = Cac()
  62. elif self.ui.att_type.currentIndex() == 1:
  63. attaque = Distance()
  64. elif self.ui.att_type.currentIndex() == 2:
  65. if self.ui.att_forme.currentIndex() == 0:
  66. attaque = Ligne()
  67. elif self.ui.att_forme.currentIndex() == 1:
  68. attaque = Disque()
  69. attaque.majRayon(self.ui.att_rayon.value())
  70. elif self.ui.att_forme.currentIndex() == 2:
  71. attaque = Cone()
  72. nom = self.ui.att_nom.texte()
  73. if len(nom) == 0: nom = "..."
  74. attaque.majNom(nom)
  75. attaque.majPortee(self.ui.att_portee.value())
  76. attaque.majAttributs(self.attributs())
  77. attaque.majNotes(self.ui.att_notes.texte())
  78. return attaque
  79. def chargerAttaque(self, attaque = None):
  80. """met a jour le contenu avec les donnees de l'attaque en param"""
  81. if attaque:
  82. if isinstance(attaque, Cac):
  83. self.ui.att_type.setCurrentIndex(0)
  84. elif isinstance(attaque, Distance):
  85. self.ui.att_type.setCurrentIndex(1)
  86. elif isinstance(attaque, Zone):
  87. self.ui.att_type.setCurrentIndex(2)
  88. if isinstance(attaque, Ligne):
  89. self.ui.att_forme.setCurrentIndex(0)
  90. elif isinstance(attaque, Disque):
  91. self.ui.att_forme.setCurrentIndex(1)
  92. self.ui.att_rayon.setValue(attaque.rayon())
  93. elif isinstance(attaque, Cone):
  94. self.ui.att_forme.setCurrentIndex(2)
  95. self.ui.att_nom.majTexte(attaque.nom())
  96. self.ui.att_portee.setValue(attaque.portee())
  97. self.chargerAttributs(attaque.attributs())
  98. self.ui.att_notes.majTexte(attaque.notes())
  99. self.enCreation = True
  100. self.majAffichage()
  101. def reinitialiser(self):
  102. self.ui.att_type.setCurrentIndex(0)
  103. self.ui.att_nom.majTexte("")
  104. self.ui.att_portee.setValue(1)
  105. self.ui.att_forme.setCurrentIndex(0)
  106. self.ui.att_rayon.setValue(1)
  107. self.ui.att_notes.majTexte("")
  108. for i in range(0, self.ui.att_layout_attributs.count()):
  109. layout = self.ui.att_layout_attributs.itemAt(i).layout()
  110. widget = layout.itemAt(1).widget()
  111. if widget != 0:
  112. if str(widget.objectName()[-6:]) == "_champ":
  113. widget.clear()
  114. self.majAffichage()
  115. def construireListeAttributs(self):
  116. """cree les champs dedies a la saisie des attributs dans la grille dediee"""
  117. self.ui.att_layout_attributs.setSpacing(4)
  118. self.ui.att_layout_attributs.setMargin(0)
  119. ligne = 0
  120. largeurLigne = 0
  121. colonne = 0
  122. for nomAttribut in regles.ordreAttributsAttaques():
  123. lay = QHBoxLayout()
  124. lay.setMargin(0)
  125. lay.setSpacing(2)
  126. lay.setSizeConstraint(QLayout.SetMinimumSize)
  127. etiquette = DmLabel()
  128. etiquette.majTexte(nomAttribut)
  129. etiquette.setObjectName("{}_etiquette".format(nomAttribut))
  130. lay.addWidget(etiquette)
  131. champ = DmLineEdit()
  132. champ.setMinimumSize(QSize(60, 20))
  133. champ.setMaximumSize(QSize(60, 20))
  134. champ.majTexte(regles.listeAttributsAttaques()[nomAttribut])
  135. champ.setObjectName("{}_champ".format(nomAttribut))
  136. self.connect(champ, SIGNAL("textChanged()"), self.controlerAttribut)
  137. lay.addWidget(champ)
  138. largeur = 85
  139. if (largeurLigne + largeur) > (0.9*self.ui.att_panneau.width()):
  140. ligne += 1
  141. colonne = 0
  142. largeurLigne = 0
  143. self.ui.att_layout_attributs.addLayout(lay, ligne, colonne)
  144. largeurLigne += largeur
  145. colonne += 1
  146. nouvelleH = 100 + (ligne*50)
  147. self.setMaximumHeight(nouvelleH)
  148. self.setMinimumHeight(nouvelleH)
  149. self.ui.att_panneau.setGeometry(0, 0, 471, (nouvelleH-1))
  150. self.ui.att_voile.setGeometry(0, 0, 471, (nouvelleH-1))
  151. def chargerAttributs(self, attributs):
  152. """charge le dictionnaire d'attributs demande"""
  153. for i in range(0, self.ui.att_layout_attributs.count()):
  154. layout = self.ui.att_layout_attributs.itemAt(i).layout()
  155. widget = layout.itemAt(1).widget()
  156. if widget != 0:
  157. if str(widget.objectName()[-6:]) == "_champ":
  158. attr = str(widget.objectName()[:-6])
  159. widget.majTexte(attributs[attr])
  160. def attributs(self):
  161. """recupere les attributs saisis dans la grille dediee"""
  162. attributs = regles.listeAttributsAttaques()
  163. for i in range(0, self.ui.att_layout_attributs.count()):
  164. layout = self.ui.att_layout_attributs.itemAt(i).layout()
  165. widget = layout.itemAt(1).widget()
  166. if widget != 0 and widget != None:
  167. if str(widget.objectName()[-6:]) == "_champ":
  168. attr = str(widget.objectName()[:-6])
  169. attributs[attr] = widget.texte()
  170. return attributs
  171. def controlerAttribut(self):
  172. emetteur = self.sender().objectName()
  173. index = colonne - 10
  174. attribut = regles.ordreAttributsAttaques()[index]
  175. valeurAttribut = regles.listeControleAttaques()[attribut].controler(str(self.data(ligne, colonne).toString()))
  176. if valeurAttribut != None:
  177. attaque.attributs[attribut] = valeurAttribut
  178. else:
  179. self.majData(ligne, colonne, attaque.attributs[attribut])
  180. if __name__ == "__main__":
  181. app = QApplication(sys.argv)
  182. ecran = FrameAttaque(0)
  183. ecran.show()
  184. r = app.exec_()
  185. exit(r)