| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- #from __future__ import unicode_literals
- # -*- coding: utf-8 -*-
- """Panneau de creation/edition d'une attaque
- """
- import sys
- from PyQt4.QtCore import QString, QSize
- from PyQt4.QtGui import QFrame, QHBoxLayout, QLayout
- from Actions import *
- # from lib.br import ligne
- from lib.ui.dm import DmLabel, DmLineEdit
- import regles
- from ui.ecran_panneauAttaques import Ui_att_frame
- class FrameAttaque(QFrame):
- """Panneau de creation/edition d'une attaque
- a inserer dans le layout de l'onglet attaques
- de l'ecran d'edition des combattants"""
- def __init__(self, idAtt, parent=None):
- super (FrameAttaque, self).__init__(parent)
- self.idAtt = idAtt
- self.enCreation = False
- self.createWidgets()
- def createWidgets(self):
- """construction de l'interface"""
- self.ui = Ui_att_frame()
- self.ui.setupUi(self)
- self.ui.att_forme.setVisible(False)
- self.ui.att_forme_e.setVisible(False)
- self.ui.att_rayon.setVisible(False)
- self.ui.att_rayon_e.setVisible(False)
- self.ui.att_voile.setAttribute(Qt.WA_TransparentForMouseEvents)
-
- self.connect(self.ui.att_type, SIGNAL("activated(int)"), self.majAffichage)
- self.connect(self.ui.att_type, SIGNAL("activated(int)"), self.signalerNouvelleAttaque)
- self.connect(self.ui.att_forme, SIGNAL("activated(int)"), self.majAffichage)
-
- self.connect(self.ui.att_nom, SIGNAL("textEdited(const QString&)"), self.signalerNouvelleAttaque)
- self.connect(self.ui.att_supprimer, SIGNAL("clicked()"), self.signalerSuppressionAttaque)
- self.construireListeAttributs()
- def signalerNouvelleAttaque(self):
- """on signale a la fenetre principale qu'une nouvelle attaque est creee"""
- if not self.enCreation:
- self.emit(SIGNAL("attaqueNouvelle()"))
- self.enCreation = True
- self.majAffichage()
- def signalerSuppressionAttaque(self):
- """on signale a la fenetre principale qu'une nouvelle attaque est creee"""
- if self.enCreation:
- self.enCreation = False
- self.reinitialiser()
- self.emit(SIGNAL("attaqueSupprimer(int)"), self.idAtt)
- def majAffichage(self):
- if self.enCreation: self.ui.att_nom.setPlaceholderText(QString(""))
- self.ui.att_voile.setVisible(not self.enCreation)
- self.ui.att_forme.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2)
- self.ui.att_forme_e.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2)
- self.ui.att_rayon.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2 and self.ui.att_forme.currentIndex() == 1)
- self.ui.att_rayon_e.setVisible(self.enCreation and self.ui.att_type.currentIndex() == 2 and self.ui.att_forme.currentIndex() == 1)
-
- self.ui.att_supprimer.setEnabled(self.enCreation)
- def attaque(self):
- """retourne l'attaque representee"""
- attaque = None
- if self.enCreation:
- if self.ui.att_type.currentIndex() == 0:
- attaque = Cac()
- elif self.ui.att_type.currentIndex() == 1:
- attaque = Distance()
- elif self.ui.att_type.currentIndex() == 2:
- if self.ui.att_forme.currentIndex() == 0:
- attaque = Ligne()
- elif self.ui.att_forme.currentIndex() == 1:
- attaque = Disque()
- attaque.majRayon(self.ui.att_rayon.value())
- elif self.ui.att_forme.currentIndex() == 2:
- attaque = Cone()
- nom = self.ui.att_nom.texte()
- if len(nom) == 0: nom = "..."
- attaque.majNom(nom)
- attaque.majPortee(self.ui.att_portee.value())
- attaque.majAttributs(self.attributs())
- attaque.majNotes(self.ui.att_notes.texte())
- return attaque
- def chargerAttaque(self, attaque = None):
- """met a jour le contenu avec les donnees de l'attaque en param"""
- if attaque:
- if isinstance(attaque, Cac):
- self.ui.att_type.setCurrentIndex(0)
- elif isinstance(attaque, Distance):
- self.ui.att_type.setCurrentIndex(1)
- elif isinstance(attaque, Zone):
- self.ui.att_type.setCurrentIndex(2)
- if isinstance(attaque, Ligne):
- self.ui.att_forme.setCurrentIndex(0)
- elif isinstance(attaque, Disque):
- self.ui.att_forme.setCurrentIndex(1)
- self.ui.att_rayon.setValue(attaque.rayon())
- elif isinstance(attaque, Cone):
- self.ui.att_forme.setCurrentIndex(2)
- self.ui.att_nom.majTexte(attaque.nom())
- self.ui.att_portee.setValue(attaque.portee())
- self.chargerAttributs(attaque.attributs())
- self.ui.att_notes.majTexte(attaque.notes())
- self.enCreation = True
- self.majAffichage()
- def reinitialiser(self):
- self.ui.att_type.setCurrentIndex(0)
- self.ui.att_nom.majTexte("")
- self.ui.att_portee.setValue(1)
- self.ui.att_forme.setCurrentIndex(0)
- self.ui.att_rayon.setValue(1)
- self.ui.att_notes.majTexte("")
- for i in range(0, self.ui.att_layout_attributs.count()):
- layout = self.ui.att_layout_attributs.itemAt(i).layout()
- widget = layout.itemAt(1).widget()
- if widget != 0:
- if str(widget.objectName()[-6:]) == "_champ":
- widget.clear()
- self.majAffichage()
-
- def construireListeAttributs(self):
- """cree les champs dedies a la saisie des attributs dans la grille dediee"""
- self.ui.att_layout_attributs.setSpacing(4)
- self.ui.att_layout_attributs.setMargin(0)
- ligne = 0
- largeurLigne = 0
- colonne = 0
- for nomAttribut in regles.ordreAttributsAttaques():
- lay = QHBoxLayout()
- lay.setMargin(0)
- lay.setSpacing(2)
- lay.setSizeConstraint(QLayout.SetMinimumSize)
-
- etiquette = DmLabel()
- etiquette.majTexte(nomAttribut)
- etiquette.setObjectName("{}_etiquette".format(nomAttribut))
- lay.addWidget(etiquette)
-
- champ = DmLineEdit()
- champ.setMinimumSize(QSize(80, 20))
- champ.setMaximumSize(QSize(80, 20))
- champ.majTexte(regles.listeAttributsAttaques()[nomAttribut])
- champ.setObjectName("{}_champ".format(nomAttribut))
- lay.addWidget(champ)
- largeur = 85
- if (largeurLigne + largeur) > (0.9*self.ui.att_panneau.width()):
- ligne += 1
- colonne = 0
- largeurLigne = 0
- self.ui.att_layout_attributs.addLayout(lay, ligne, colonne)
- largeurLigne += largeur
- colonne += 1
- nouvelleH = 100 + (ligne*50)
- self.setMaximumHeight(nouvelleH)
- self.setMinimumHeight(nouvelleH)
- self.ui.att_panneau.setGeometry(0, 0, 471, (nouvelleH-1))
- self.ui.att_voile.setGeometry(0, 0, 471, (nouvelleH-1))
-
- def chargerAttributs(self, attributs):
- """charge le dictionnaire d'attributs demande"""
- for i in range(0, self.ui.att_layout_attributs.count()):
- layout = self.ui.att_layout_attributs.itemAt(i).layout()
- widget = layout.itemAt(1).widget()
- if widget != 0:
- if str(widget.objectName()[-6:]) == "_champ":
- attr = str(widget.objectName()[:-6])
- widget.majTexte(attributs[attr])
- def attributs(self):
- """recupere les attributs saisis dans la grille dediee"""
- attributs = regles.listeAttributsAttaques()
- for i in range(0, self.ui.att_layout_attributs.count()):
- layout = self.ui.att_layout_attributs.itemAt(i).layout()
- widget = layout.itemAt(1).widget()
- if widget != 0 and widget != None:
- if str(widget.objectName()[-6:]) == "_champ":
- attr = str(widget.objectName()[:-6])
- attributs[attr] = widget.texte()
- return attributs
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- ecran = FrameAttaque(0)
- ecran.show()
- r = app.exec_()
- exit(r)
|