#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)