| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- #from __future__ import unicode_literals
- # -*- coding: utf-8 -*-
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- from ui.ecran_editionAttaques import Ui_editionAttaques
-
- class EcranEditionAttaques(QFrame):
- #*EEA
- """interface d'edition des attaques du pion"""
- def __init__(self, pion, parent=None):
- """initialisation de la fenetre"""
- super (EcranEditionAttaques, self).__init__()
- self.pion = pion
- self.colonnesBase = {}
- self.createWidgets()
- self.majEnCours = False
-
- def createWidgets(self):
- """construction de l'interface"""
- #construction de l'interface
- self.ui = Ui_editionAttaques()
- self.ui.setupUi(self)
- self.connect(self.ui.nouvelleAttaque, SIGNAL("clicked()"), self.nouvelleAttaque)
- self.connect(self.ui.supprimerAttaque, SIGNAL("clicked()"), self.supprimerAttaque)
- ## self.connect(SIGNAL("majTypeAttaque()"), self.majTypeAttaque)
- self.initListe()
- self.majListe()
- self.connect(self.ui.editionListeAttaques, SIGNAL("cellChanged(int, int)"), self.celluleModifiee)
- def initListe(self):
- """formate la table des donnees"""
- #mise en forme des colonnes
- #colonnes de base: celles qui ne dependent pas des regles utilisees
- self.colonnesBase = ["numAttaque","Type","Nom","Portee","Forme","Rayon"]
- largeurColonnesBase = {"numAttaque": 0, "Type": 70, "Nom": 100, "Portee": 60, "Forme": 80,"Rayon": 60}
- for i in range(0, 10):
- self.ui.editionListeAttaques.insertColumn(i)
- self.ui.editionListeAttaques.setColumnHidden(i, (i >= len(self.colonnesBase)))
- if i < len(self.colonnesBase):
- self.ui.editionListeAttaques.setHorizontalHeaderItem(i, QTableWidgetItem(self.colonnesBase[i]))
- if self.colonnesBase[i] in largeurColonnesBase:
- largeur = largeurColonnesBase[self.colonnesBase[i]]
- else:
- largeur = 60
- if largeur > 0:
- self.ui.editionListeAttaques.setColumnWidth(i, largeur)
- else:
- self.ui.editionListeAttaques.setColumnHidden(i, True)
-
- ordre = regles.ordreAttributsAttaques()
- for elt in ordre:
- numCol = 10 + ordre.index(elt)
- self.ui.editionListeAttaques.insertColumn(numCol)
- self.ui.editionListeAttaques.setHorizontalHeaderItem(numCol, QTableWidgetItem(QString.fromUtf8(elt)))
- self.ui.editionListeAttaques.setColumnWidth(numCol, 45)
- self.ui.editionListeAttaques.setColumnHidden(numCol, False)
-
- def majListe(self):
- """met a jour le contenu de la table des donnees"""
- self.majEnCours = True
- while self.ui.editionListeAttaques.rowCount() > 0:
- self.ui.editionListeAttaques.removeRow(0)
- index = 0
- for numAttaque in range(0, len(self.pion.attaques)):
- self.ui.editionListeAttaques.insertRow(int(index))
- #liste deroulante des types d'attaque
- self.ui.editionListeAttaques.setCellWidget(int(index), self.colonnesBase.index("Type"), self.listeTypesAttaques())
-
- #num du pion (0):
- self.ui.editionListeAttaques.setItem(int(index),0,QTableWidgetItem(QString.fromUtf8(str(numAttaque))))
- self.majDonneesAttaque(numAttaque)
- index += 1
- self.majEnCours = False
- def majDonneesAttaque(self, numAttaque):
- """met a jour les donnees de l'attaque"""
- index = None
- for i in range(0, self.ui.editionListeAttaques.rowCount()):
- if int(self.ui.editionListeAttaques.item(i, 0).text().toUtf8()) == numAttaque:
- index = i
- break
- if index != None:
- ### parametres de base
- #Type d'attaque
- item = QTableWidgetItem()
- item.setFlags(Qt.NoItemFlags)
- item.setFlags(Qt.ItemIsSelectable)
- if self.pion.attaques[numAttaque].typ in ["cac", "dist", "zone"]:
- self.ui.editionListeAttaques.cellWidget(index, self.colonnesBase.index("Type")).setCurrentIndex(\
- self.ui.editionListeAttaques.cellWidget(index, self.colonnesBase.index("Type")).findData(QVariant(self.pion.attaques[numAttaque].typ)))
- self.afficherDonneesAttaqueZone(index, (self.pion.attaques[numAttaque].typ == "zone"))
- #Nom de l'attaque
- self.ui.editionListeAttaques.setItem(index, self.colonnesBase.index("Nom"), QTableWidgetItem(QString.fromUtf8(self.pion.attaques[numAttaque].nom)))
-
- #Portee
- self.ui.editionListeAttaques.setItem(index, self.colonnesBase.index("Portee"), QTableWidgetItem(QString.fromUtf8(str(self.pion.attaques[numAttaque].portee))))
-
- ### parametres supplementaires (issus des regles)
- for elt in self.pion.attaques[numAttaque].attributs:
- col = 10 + regles.ordreAttributsAttaques().index(elt)
- self.ui.editionListeAttaques.setItem(index, col , QTableWidgetItem(QString.fromUtf8(str(self.pion.attaques[numAttaque].attributs[elt]))))
- else:
- print ("Attaque {} introuvable, impossible de maj".format(numPion))
-
-
- def celluleModifiee(self, ligne, colonne):
- """une cellule de la table a ete modifiee"""
- if not self.majEnCours:
- numAttaque = int(self.ui.editionListeAttaques.item(ligne, 0).text().toUtf8())
- if colonne < len(self.colonnesBase):
- if colonne == self.colonnesBase.index("Nom"):
- nom = str(self.ui.editionListeAttaques.item(ligne, colonne).text().toUtf8())
- if not len(nom) > 0:
- nom = "Att. {}".format(numAttaque)
- self.pion.attaques[numAttaque].nom = nom
-
- elif colonne == self.colonnesBase.index("Type"):
- typ = str(self.ui.editionListeAttaques.cellWidget(ligne, colonne).itemData(\
- self.ui.editionListeAttaques.cellWidget(ligne, colonne).currentIndex()).toString())
- self.pion.attaques[numAttaque].typ = typ
- self.afficherDonneesAttaqueZone(ligne, (typ == "zone"))
-
- elif colonne == self.colonnesBase.index("Forme"):
- forme = str(self.ui.editionListeAttaques.cellWidget(ligne, colonne).itemData(\
- self.ui.editionListeAttaques.cellWidget(ligne, colonne).currentIndex()).toString())
- self.pion.attaques[numAttaque].formeZone = forme
-
- elif colonne == self.colonnesBase.index("Portee"):
- #doit etre de type numerique
- try:
- portee = int(str(self.ui.editionListeAttaques.item(ligne, colonne).text().toUtf8()))
- valide = True
- except:
- valide = False
- if valide:
- self.pion.attaques[numAttaque].portee = portee
- else:
- self.ui.editionListeAttaques.item(ligne, colonne).setText(QString.fromUtf8(self.pion.attaques[numAttaque].portee))
- elif colonne == self.colonnesBase.index("Rayon"):
- #doit etre de type numerique
- try:
- rayon = int(str(self.ui.editionListeAttaques.item(ligne, colonne).text().toUtf8()))
- valide = True
- except:
- valide = False
- if valide:
- self.pion.attaques[numAttaque].rayon = rayon
- else:
- self.ui.editionListeAttaques.item(ligne, colonne).setText(QString.fromUtf8(str(self.pion.attaques[numAttaque].rayon)))
-
- elif colonne >= 10:
- self.majEnCours = True
- index = colonne - 10
- attribut = regles.ordreAttributsAttaques()[index]
- valeurAttribut = regles.listeControleAttaques()[attribut].controler(str(self.ui.editionListeAttaques.item(ligne, colonne).text().toUtf8()))
- if valeurAttribut != None:
- self.pion.attaques[numAttaque].attributs[attribut] = valeurAttribut
- else:
- self.ui.editionListeAttaques.item(ligne, colonne).setText(QString.fromUtf8(str(self.pion.attaques[numAttaque].attributs[attribut])))
- self.majEnCours = False
- def majTypeAttaque(self):
- """une des liste de type a ete modifiee, on met a jour toute la colonne (en attendant mieux :( )"""
- colonne = self.colonnesBase.index("Type")
- for i in range(0, self.ui.editionListeAttaques.rowCount()):
- if str(self.ui.editionListeAttaques.cellWidget(i, colonne).itemData(\
- self.ui.editionListeAttaques.cellWidget(i, colonne).currentIndex())) != \
- self.pion.attaques[int(self.ui.editionListeAttaques.item(i, 0).text().toUtf8())].typ:
- self.celluleModifiee(i, colonne)
- def majFormeZone(self):
- """une des liste de type a ete modifiee, on met a jour toute la colonne (en attendant mieux :( )"""
- colonne = self.colonnesBase.index("Forme")
- for i in range(0, self.ui.editionListeAttaques.rowCount()):
- if self.ui.editionListeAttaques.cellWidget(i, colonne).__class__.__name__ == "QComboBox":
- if str(self.ui.editionListeAttaques.cellWidget(i, colonne).itemData(\
- self.ui.editionListeAttaques.cellWidget(i, colonne).currentIndex())) != \
- self.pion.attaques[int(self.ui.editionListeAttaques.item(i, 0).text().toUtf8())].formeZone:
- self.celluleModifiee(i, colonne)
-
- def nouvelleAttaque(self):
- """ajoute une ligne a la table et une attaque au pion"""
- self.pion.attaques.append(Attaque())
- self.majListe()
- def supprimerAttaque(self):
- """supprime l'attaque selectionnee de la liste des attaques du pion"""
- numAttaque = None
- for i in range(0, self.ui.editionListeAttaques.rowCount()):
- if self.ui.editionListeAttaques.item(i,0).isSelected():
- numAttaque = int(self.ui.editionListeAttaques.item(i,0).text().toUtf8())
- if numAttaque != None:
- reponse = QMessageBox.question(self, 'Message',
- "Etes vous sûr de vouloir supprimer cette attaque?", QMessageBox.Yes |
- QMessageBox.No, QMessageBox.No)
- if reponse == QMessageBox.Yes:
- del self.pion.attaques[numAttaque]
- self.majListe()
- else:
- print "pas d'attaque selectionnee"
- def listeTypesAttaques(self):
- """retourne la QComboBox qui apparait dans la colonne Type d'attaque"""
- liste = QComboBox()
- liste.addItem(QIcon("img\\curseurEpee.png"), QString.fromUtf8("C.à.C"), "cac")
- liste.addItem(QIcon("img\\arc.png"), QString.fromUtf8("Dist."), "dist")
- liste.addItem(QIcon("img\\baguette.png"), QString.fromUtf8("Zone"), "zone")
- self.connect(liste, SIGNAL("currentIndexChanged(int)"), self.majTypeAttaque)
- return liste
-
- def listeFormesZone(self):
- """retourne la QComboBox qui apparait dans la colonne forme de zone"""
- liste = QComboBox()
- liste.addItem(QIcon("img\\formeLigne.png"), QString.fromUtf8("Ligne"), "ligne")
- liste.addItem(QIcon("img\\formeEllipsePlein.png"), QString.fromUtf8("Disque"), "disque")
- liste.addItem(QIcon("img\\cone.png"), QString.fromUtf8("Cone"), "cone")
- self.connect(liste, SIGNAL("currentIndexChanged(int)"), self.majFormeZone)
- return liste
- def afficherDonneesAttaqueZone(self, ligne, afficher):
- """rend modifiables ou non les donnees de base liees aux attaques de zone et modifie l'affichage en consequence"""
- self.majEnCours = True
- if afficher == True:
- numAttaque = int(self.ui.editionListeAttaques.item(ligne, 0).text().toUtf8())
- if self.ui.editionListeAttaques.cellWidget(ligne, self.colonnesBase.index("Forme")) == None:
- self.ui.editionListeAttaques.setCellWidget(ligne, self.colonnesBase.index("Forme"), self.listeFormesZone())
- if self.pion.attaques[numAttaque].formeZone in ["ligne", "disque", "cone"]:
- self.ui.editionListeAttaques.cellWidget(ligne, self.colonnesBase.index("Forme")).setCurrentIndex(\
- self.ui.editionListeAttaques.cellWidget(ligne, self.colonnesBase.index("Forme")).findData(QVariant(self.pion.attaques[numAttaque].formeZone)))
- item = QTableWidgetItem(QString.fromUtf8(str(self.pion.attaques[numAttaque].rayon)))
- item.setBackgroundColor(QColor("white"))
- self.ui.editionListeAttaques.setItem(ligne, self.colonnesBase.index("Rayon"), item)
- else:
- if self.ui.editionListeAttaques.cellWidget(ligne, self.colonnesBase.index("Forme")) != None:
- self.ui.editionListeAttaques.removeCellWidget(ligne, self.colonnesBase.index("Forme"))
- item = QTableWidgetItem(QString.fromUtf8(""))
- item.setFlags(Qt.NoItemFlags)
- item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
- item.setBackgroundColor(QColor(200,200,200))
- self.ui.editionListeAttaques.setItem(ligne, self.colonnesBase.index("Forme"), item)
- item = QTableWidgetItem(QString.fromUtf8(""))
- item.setFlags(Qt.NoItemFlags)
- item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
- item.setBackgroundColor(QColor(200,200,200))
- self.ui.editionListeAttaques.setItem(ligne, self.colonnesBase.index("Rayon"), item)
- self.majEnCours = False
|