frameAttaque.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 QString, QSize
  7. from PyQt4.QtGui import QFrame, QHBoxLayout, QLayout
  8. from Actions import *
  9. # from lib.br import ligne
  10. from lib.ui.dm import DmLabel, DmLineEdit
  11. import regles
  12. from ui.ecran_panneauAttaques import Ui_att_frame
  13. class FrameAttaque(QFrame):
  14. """Panneau de creation/edition d'une attaque
  15. a inserer dans le layout de l'onglet attaques
  16. de l'ecran d'edition des combattants"""
  17. def __init__(self, idAtt, parent=None):
  18. super (FrameAttaque, self).__init__(parent)
  19. self.idAtt = idAtt
  20. self.enCreation = False
  21. self.createWidgets()
  22. def createWidgets(self):
  23. """construction de l'interface"""
  24. self.ui = Ui_att_frame()
  25. self.ui.setupUi(self)
  26. self.ui.att_forme.setVisible(False)
  27. self.ui.att_forme_e.setVisible(False)
  28. self.ui.att_rayon.setVisible(False)
  29. self.ui.att_rayon_e.setVisible(False)
  30. self.ui.att_voile.setAttribute(Qt.WA_TransparentForMouseEvents)
  31. self.connect(self.ui.att_type, SIGNAL("activated(int)"), self.majAffichage)
  32. self.connect(self.ui.att_type, SIGNAL("activated(int)"), self.signalerNouvelleAttaque)
  33. self.connect(self.ui.att_forme, SIGNAL("activated(int)"), self.majAffichage)
  34. self.connect(self.ui.att_nom, SIGNAL("textEdited(const QString&)"), self.signalerNouvelleAttaque)
  35. self.connect(self.ui.att_supprimer, SIGNAL("clicked()"), self.signalerSuppressionAttaque)
  36. self.construireListeAttributs()
  37. def signalerNouvelleAttaque(self):
  38. """on signale a la fenetre principale qu'une nouvelle attaque est creee"""
  39. if not self.enCreation:
  40. self.emit(SIGNAL("attaqueNouvelle()"))
  41. self.enCreation = True
  42. self.majAffichage()
  43. def signalerSuppressionAttaque(self):
  44. """on signale a la fenetre principale qu'une nouvelle attaque est creee"""
  45. if self.enCreation:
  46. self.enCreation = False
  47. self.reinitialiser()
  48. self.emit(SIGNAL("attaqueSupprimer(int)"), self.idAtt)
  49. def majAffichage(self):
  50. if self.enCreation: self.ui.att_nom.setPlaceholderText(QString(""))
  51. self.ui.att_voile.setVisible(not self.enCreation)
  52. self.ui.att_forme.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2)
  53. self.ui.att_forme_e.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2)
  54. self.ui.att_rayon.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2 and self.ui.att_forme.currentIndex() == 1)
  55. self.ui.att_rayon_e.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2 and self.ui.att_forme.currentIndex() == 1)
  56. self.ui.att_supprimer.setEnabled(self.enCreation)
  57. def attaque(self):
  58. """retourne l'attaque representee"""
  59. attaque = None
  60. if self.enCreation:
  61. if self.ui.att_type.currentIndex() == 0:
  62. attaque = Cac()
  63. elif self.ui.att_type.currentIndex() == 1:
  64. attaque = Distance()
  65. elif self.ui.att_type.currentIndex() == 2:
  66. if self.ui.att_forme.currentIndex() == 0:
  67. attaque = Ligne()
  68. elif self.ui.att_forme.currentIndex() == 1:
  69. attaque = Disque()
  70. attaque.majRayon(self.ui.att_rayon.value())
  71. elif self.ui.att_forme.currentIndex() == 2:
  72. attaque = Cone()
  73. nom = self.ui.att_nom.texte()
  74. if len(nom) == 0: nom = "..."
  75. attaque.majNom(nom)
  76. attaque.majPortee(self.ui.att_portee.value())
  77. attaque.majAttributs(self.attributs())
  78. attaque.majNotes(self.ui.att_notes.texte())
  79. return attaque
  80. def chargerAttaque(self, attaque = None):
  81. """met a jour le contenu avec les donnees de l'attaque en param"""
  82. if attaque:
  83. if isinstance(attaque, Cac):
  84. self.ui.att_type.setCurrentIndex(0)
  85. elif isinstance(attaque, Distance):
  86. self.ui.att_type.setCurrentIndex(1)
  87. elif isinstance(attaque, Zone):
  88. self.ui.att_type.setCurrentIndex(2)
  89. if isinstance(attaque, Ligne):
  90. self.ui.att_forme.setCurrentIndex(0)
  91. elif isinstance(attaque, Disque):
  92. self.ui.att_forme.setCurrentIndex(1)
  93. self.ui.att_rayon.setValue(attaque.rayon())
  94. elif isinstance(attaque, Cone):
  95. self.ui.att_forme.setCurrentIndex(2)
  96. self.ui.att_nom.majTexte(attaque.nom())
  97. self.ui.att_portee.setValue(attaque.portee())
  98. self.chargerAttributs(attaque.attributs())
  99. self.ui.att_notes.majTexte(attaque.notes())
  100. self.enCreation = True
  101. self.majAffichage()
  102. def reinitialiser(self):
  103. self.ui.att_type.setCurrentIndex(0)
  104. self.ui.att_nom.majTexte("")
  105. self.ui.att_portee.setValue(1)
  106. self.ui.att_forme.setCurrentIndex(0)
  107. self.ui.att_rayon.setValue(1)
  108. self.ui.att_notes.majTexte("")
  109. for i in range(0, self.ui.att_layout_attributs.count()):
  110. layout = self.ui.att_layout_attributs.itemAt(i).layout()
  111. widget = layout.itemAt(1).widget()
  112. if widget != 0:
  113. if str(widget.objectName()[-6:]) == "_champ":
  114. widget.clear()
  115. self.majAffichage()
  116. def construireListeAttributs(self):
  117. """cree les champs dedies a la saisie des attributs dans la grille dediee"""
  118. self.ui.att_layout_attributs.setSpacing(4)
  119. self.ui.att_layout_attributs.setMargin(0)
  120. ligne = 0
  121. largeurLigne = 0
  122. colonne = 0
  123. for nomAttribut in regles.ordreAttributsAttaques():
  124. lay = QHBoxLayout()
  125. lay.setMargin(0)
  126. lay.setSpacing(2)
  127. lay.setSizeConstraint(QLayout.SetMinimumSize)
  128. etiquette = DmLabel()
  129. etiquette.majTexte(nomAttribut)
  130. etiquette.setObjectName("{}_etiquette".format(nomAttribut))
  131. lay.addWidget(etiquette)
  132. champ = DmLineEdit()
  133. champ.setMinimumSize(QSize(80, 20))
  134. champ.setMaximumSize(QSize(80, 20))
  135. champ.majTexte(regles.listeAttributsAttaques()[nomAttribut])
  136. champ.setObjectName("{}_champ".format(nomAttribut))
  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. if __name__ == "__main__":
  172. app = QApplication(sys.argv)
  173. ecran = FrameAttaque(0)
  174. ecran.show()
  175. r = app.exec_()
  176. exit(r)