| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- #from __future__ import unicode_literals
- # -*- coding: utf-8 -*-
- from __future__ import division
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- class EcranEditionCreature(QDialog):
- """interface de creation/edition de terrains"""
- def __init__(self, creature=None, formeCases = "H", parent=None):
- """initialisation de la fenetre"""
- super (EcranEditionCreature, self).__init__()
- self.creature = creature
- self.pixGraphique = None
- self.formeCases = formeCases
- self.createWidgets()
-
- if creature == None:
- self.accesCreation()
- else:
- self.accesEdition()
- self.majAffichage("")
- self.afficheListeAttaques()
- self.majListeAttributs()
- ## self.majListeInventaire()
-
- def createWidgets(self):
- """construction de l'interface"""
- #construction de l'interface
- self.ui = Ui_editionCreature()
- self.ui.setupUi(self)
- self.connect(self.ui.enregistrerCreature, SIGNAL("clicked()"), self.enregistrer)
- self.connect(self.ui.annulerCreature, SIGNAL("clicked()"), self.annuler)
- self.connect(self.ui.supprimerCreature, SIGNAL("clicked()"), self.supprimer)
- self.connect(self.ui.idCreature, SIGNAL("textEdited(QString)"), self.majAffichage)
- self.connect(self.ui.nomCreature, SIGNAL("textEdited(QString)"), self.majAffichage)
- self.connect(self.ui.couleurCreature, SIGNAL("clicked()"), self.selectionCouleur)
- self.connect(self.ui.imgTextureCreature, SIGNAL("textEdited(QString)"), self.majApercuImage)
- self.connect(self.ui.imgLogoCreature, SIGNAL("textEdited(QString)"), self.majApercuImage)
- self.connect(self.ui.imgAfficherCreature, SIGNAL("stateChanged(int)"), self.majApercuImage)
- self.connect(self.ui.imgPivoteCreature, SIGNAL("stateChanged(int)"), self.majApercuImage)
- self.connect(self.ui.imgMasqueCreature, SIGNAL("stateChanged(int)"), self.majApercuImage)
- self.connect(self.ui.imgTailleXCreature, SIGNAL("valueChanged(int)"), self.majApercuImage)
- self.connect(self.ui.imgTailleYCreature, SIGNAL("valueChanged(int)"), self.majApercuImage)
- self.connect(self.ui.imgPosXCreature, SIGNAL("valueChanged(int)"), self.majApercuImage)
- self.connect(self.ui.imgPosYCreature, SIGNAL("valueChanged(int)"), self.majApercuImage)
- self.connect(self.ui.imgRotationCreature, SIGNAL("valueChanged(int)"), self.majApercuImage)
- self.connect(self.ui.imgReinitCreature, SIGNAL("clicked()"), self.reinitImage)
- self.connect(self.ui.nomCreature, SIGNAL("textEdited(QString)"), self.majApercuTexte)
- self.connect(self.ui.txtAfficherCreature, SIGNAL("stateChanged(int)"), self.majApercuTexte)
- self.connect(self.ui.txtTaillePoliceCreature, SIGNAL("valueChanged(int)"), self.majApercuTexte)
- self.connect(self.ui.txtGrasCreature, SIGNAL("stateChanged(int)"), self.majApercuTexte)
- self.connect(self.ui.txtPosXCreature, SIGNAL("valueChanged(int)"), self.majApercuTexte)
- self.connect(self.ui.txtPosYCreature, SIGNAL("valueChanged(int)"), self.majApercuTexte)
- self.connect(self.ui.txtRotationCreature, SIGNAL("valueChanged(int)"), self.majApercuTexte)
- self.connect(self.ui.txtReinitCreature, SIGNAL("clicked()"), self.reinitTexte)
- self.vueForme = VueEditionForme(self, self.formeCases)
- self.vueForme.creer()
- self.ui.listeAttributs.setColumnWidth(0, (0.4*self.ui.listeAttributs.width()))
- self.ui.listeAttributs.setColumnWidth(1, (0.4*self.ui.listeAttributs.width()))
- self.connect(self.ui.listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee, Qt.UniqueConnection)
- ## self.ui.listeInventaireCreature.setColumnWidth(0, (0.2*self.ui.listeInventaireCreature.width()))
- ## self.ui.listeInventaireCreature.setColumnWidth(1, (0.8*self.ui.listeInventaireCreature.width()))
- ## self.connect(self.ui.listeInventaireCreature, SIGNAL("clicked()"), self.listeInventaireCelluleModifiee)
- ## self.connect(self.ui.supprimerInventaireCreature, SIGNAL("clicked()"), self.supprimerLigneListeInventaire)
- ## self.connect(self.ui.ajouterInventaireCreature, SIGNAL("clicked()"), self.ajouterLigneListeInventaire)
-
-
- def accesEdition(self):
- """ouverture en mode edition"""
- self.ui.idCreature.setEnabled(True)
-
- self.ui.idCreature.setText(QString.fromUtf8(str(self.creature.id)))
- self.ui.nomCreature.setText(QString.fromUtf8(str(self.creature.nom)))
- self.ui.notesCreature.setText(QString.fromUtf8(str(self.creature.notes)))
-
- if self.creature.couleur.isValid():
- self.ui.affichageCouleurCreature.setStyleSheet("QLabel {backGround:%s}" %(self.creature.couleur.name()))
- self.ui.imgLogoCreature.setText(QString.fromUtf8(str(self.creature.logo)))
- self.ui.imgTextureCreature.setText(QString.fromUtf8(str(self.creature.img["nom"])))
- self.ui.imgTailleXCreature.setValue(self.creature.img["kx"])
- self.ui.imgTailleYCreature.setValue(self.creature.img["ky"])
- self.ui.imgPosXCreature.setValue(self.creature.img["dx"])
- self.ui.imgPosYCreature.setValue(self.creature.img["dy"])
- self.ui.imgRotationCreature.setValue(self.creature.img["rotation"])
- self.ui.imgPivoteCreature.setChecked(self.creature.img["pivote"])
- self.ui.imgMasqueCreature.setChecked(self.creature.img["masqueAuto"])
- self.ui.txtTaillePoliceCreature.setValue(self.creature.txt["taille_police"])
- self.ui.txtGrasCreature.setChecked(self.creature.txt["gras"])
- self.ui.txtPosXCreature.setValue(self.creature.txt["dx"])
- self.ui.txtPosYCreature.setValue(self.creature.txt["dy"])
- self.ui.txtRotationCreature.setValue(self.creature.txt["rotation"])
-
- self.ui.deplacementCreature.setValue(self.creature.deplacement)
- self.ui.hauteurCreature.setValue(self.creature.hauteur)
- self.ui.volCreature.setChecked(self.creature.vol)
-
- self.vueForme.majForme(self.creature.formeDef[self.formeCases])
- self.ui.supprimerCreature.setEnabled(True)
- self.ui.idCreature.setEnabled(False)
- self.majApercuImage()
- self.majApercuTexte()
- def accesCreation(self):
- """ouverture en mode creation"""
- self.creature = Creature()
- self.ui.idCreature.setEnabled(True)
- self.ui.idCreature.setText(QString.fromUtf8(str(self.nouvelIdCreature())))
- self.ui.idCreature.setEnabled(False)
- self.majApercuImage()
- self.majApercuTexte()
- def majAffichage(self, txt):
- """verifie la validite des saisies"""
- self.ui.enregistrerCreature.setEnabled(len(self.ui.idCreature.text().toUtf8()) > 0 and len(self.ui.nomCreature.text().toUtf8()) > 0)
- def afficheListeAttaques(self):
- """insere la frame d'edition des attaques"""
- tabAttaques = self.ui.ongletsCreation.widget(1)
- editionAttaques = EcranEditionAttaques(self.creature)
- editionAttaques.setParent(tabAttaques)
- def majListeAttributs(self):
- """met a jour la liste des attributs de la creature"""
- """met a jour la liste des attributs dans le panneau de combat"""
- self.disconnect(self.ui.listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee)
-
- #on vide la liste
- while self.ui.listeAttributs.rowCount() > 0:
- self.ui.listeAttributs.removeRow(0)
-
- #attributs issus des regles utilisees
- ordre = regles.ordreAttributs()
- for elt in ordre:
- ligne = ordre.index(elt)
- self.ui.listeAttributs.insertRow(ligne)
- if regles.attribut(elt).combatSeulement == True: self.ui.listeAttributs.setRowHidden(ligne, True)
- item = QTableWidgetItem(QString.fromUtf8(elt))
- item.setFlags(Qt.NoItemFlags)
- self.ui.listeAttributs.setItem(ligne, 0, item)
- self.ui.listeAttributs.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(str(self.creature.lstCaracCreature[elt]))))
-
- self.connect(self.ui.listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee)
- def listeAttributCelluleModifiee(self, ligne, colonne):
- """une cellule de la liste des attributs a ete modifiee"""
- if colonne != 1:
- pass
- else:
- attribut = regles.ordreAttributs()[(ligne)]
- nouvelleVal = str(self.ui.listeAttributs.item(ligne, 1).text().toUtf8())
- valVerifiee = regles.listeControle()[attribut].controler(nouvelleVal)
- if valVerifiee != None:
- self.creature.lstCaracCreature[attribut] = valVerifiee
- else:
- self.ui.listeAttributs.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(str(self.creature.lstCaracCreature[attribut]))))
- ## def majListeInventaire(self):
- ## """met a jour la liste de l'inventaire de la creature"""
- ## self.disconnect(self.ui.listeInventaireCreature, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee)
- ##
- ## #on vide la liste
- ## while self.ui.listeInventaireCreature.rowCount() > 0:
- ## self.ui.listeInventaireCreature.removeRow(0)
- ## ligne = 0
- ## #attributs issus des regles utilisees
- ## for objet in self.creature.inventaire:
- ## self.ui.listeInventaireCreature.insertRow(ligne)
- ## self.ui.listeInventaireCreature.setItem(ligne, 0, QTableWidgetItem(QString.fromUtf8(self.creature.inventaire[objet])))
- ## self.ui.listeInventaireCreature.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(objet)))
- ## ligne += 1
- ## self.connect(self.ui.listeInventaireCreature, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee)
- ##
- ## def listeInventaireCelluleModifiee(self, ligne, colonne):
- ## """une cellule de la liste des attributs a ete modifiee"""
- ## nouvelleVal = str(self.ui.listeInventaireCreature.item(ligne, colonne).text().toUtf8())
- ## val = None
- ## if colonne == 0:
- ## try:
- ## nbre = int(nouvelleVal)
- ## except:
- ## nbre = -1
- ## if nbre >= 0: val = str(nbre)
- ## else:
- ## val = str(nouvelleVal)
- ## if val in self.creature.inventaire or len(val) == 0:
- ## print("cet objet existe deja ou a un nom invalide")
- ## val = None
- ##
- ## if colonne == 0:
- ## if val != None:
- ## self.creature.inventaire[str(self.ui.listeInventaireCreature.item(ligne, 1).text().toUtf8())] = val
- ## else:
- ## self.ui.listeInventaireCreature.setItem(ligne, 0, QTableWidgetItem(QString.fromUtf8(\
- ## str(self.creature.inventaire[str(self.ui.listeInventaireCreature.item(ligne, 1).text().toUtf8())]))))
- ## else:
- ## txt = str(self.ui.listeInventaireCreature.item(ligne, 1).text().toUtf8())
- ## if txt in self.creature.inventaire:
- ## del self.creature.inventaire[txt]
- ## if val != None:
- ## self.creature.inventaire[val] = txt
- ## else:
- ## self.ui.listeInventaireCreature.removeRow(ligne)
- ##
- ## def ajouterLigneListeInventaire(self, objet=""):
- ## num = -1
- ## for i in range(0, self.ui.listeInventaireCreature.rowCount()): #si un objet de la liste a deja un nom vide, on ne cree pas de nouvelle ligne
- ## if len(str(self.ui.listeInventaireCreature.item(i, 0).text().toUtf8())) == 0:
- ## num = i
- ## break
- ## if num < 0:
- ## self.disconnect(self.ui.listeInventaireCreature, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee)
- ## ligne = self.ui.listeInventaireCreature.rowCount()
- ## self.ui.listeInventaireCreature.insertRow(ligne)
- ## self.ui.listeInventaireCreature.setItem(ligne, 0, QTableWidgetItem(QString.fromUtf8("0")))
- ## self.ui.listeInventaireCreature.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(objet)))
- ## self.connect(self.ui.listeInventaireCreature, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee)
- ## else:
- ## self.ui.listeInventaireCreature.setCurrentRow(num)
- ##
- ## def supprimerLigneListeInventaire(self):
- ## self.disconnect(self.ui.listeInventaireCreature, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee)
- ## ligne = self.ui.listeInventaireCreature.currentRow()
- ## del self.creature.inventaire[str(self.ui.listeInventaireCreature.item(ligne, 1).text().toUtf8())]
- ## self.ui.listeInventaireCreature.removeRow(ligne)
- ## self.connect(self.ui.listeInventaireCreature, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee)
- def majApercuImage(self):
- """met a jour l'image sur l'apercu du pion"""
- if self.ui.imgAfficherCreature.isChecked():
- if len(str(self.ui.imgTextureCreature.text().toUtf8())) > 0:
- img = str(self.ui.imgTextureCreature.text().toUtf8())
- self.vueForme.majImage(img, self.ui.imgTailleXCreature.value() \
- , self.ui.imgTailleYCreature.value() \
- , self.ui.imgPosXCreature.value() \
- , self.ui.imgPosYCreature.value() \
- , self.ui.imgRotationCreature.value() \
- , self.ui.imgPivoteCreature.isChecked() \
- , self.ui.imgMasqueCreature.isChecked() )
- else:
- img = str(self.ui.imgLogoCreature.text().toUtf8())
- self.vueForme.majImage(img)
- else:
- img = ""
- self.vueForme.majImage(img)
- def majApercuTexte(self):
- """met a jour l'etiquette sur l'apercu du pion"""
- if self.ui.txtAfficherCreature.isChecked():
- txt = str(self.ui.nomCreature.text().toUtf8())
- else:
- txt = "Pion"
- self.vueForme.majTexte(txt, self.ui.txtTaillePoliceCreature.value() \
- , self.ui.txtGrasCreature.isChecked() \
- , self.ui.txtPosXCreature.value() \
- , self.ui.txtPosYCreature.value() \
- , self.ui.txtRotationCreature.value())
- def reinitImage(self):
- self.ui.imgTailleXCreature.setValue(10)
- self.ui.imgTailleYCreature.setValue(10)
- self.ui.imgPosXCreature.setValue(0)
- self.ui.imgPosYCreature.setValue(0)
- self.ui.imgRotationCreature.setValue(0)
- self.ui.imgPivoteCreature.setChecked(False)
- self.ui.imgMasqueCreature.setChecked(False)
- self.majApercuImage()
- def reinitTexte(self):
- self.ui.txtTaillePoliceCreature.setValue(21)
- self.ui.txtGrasCreature.setCheckState(0)
- self.ui.txtPosXCreature.setValue(0)
- self.ui.txtPosYCreature.setValue(0)
- self.ui.txtRotationCreature.setValue(0)
- self.majApercuTexte()
- def nouvelIdCreature(self):
- """renvoie un identifiant pour un nouveau terrain"""
- dicoSvg = afficheSvg("librairie\\creature")
- nouvelId = 1
- while str(nouvelId) in dicoSvg.keys():
- nouvelId += 1
- return str(nouvelId)
- def selectionCouleur(self):
- """selectionne la couleur dans la boite de dialogue dediee"""
- couleur = QColorDialog(self).getColor(QColor("white"), self)
- if couleur.isValid():
- nomCouleur = couleur.name()
- self.ui.affichageCouleurCreature.setStyleSheet("QLabel {backGround:%s}" %(nomCouleur))
- self.creature.couleur = couleur
-
- def enregistrer(self):
- """enregistre le terrain cree/edite"""
- self.creature.id = str(self.ui.idCreature.text().toUtf8())
- self.creature.nom = str(self.ui.nomCreature.text().toUtf8())
- self.creature.logo = str(self.ui.imgLogoCreature.text().toUtf8())
- if len(str(self.ui.imgTextureCreature.text().toUtf8())) > 0:
- self.creature.img["nom"] = str(self.ui.imgTextureCreature.text().toUtf8())
- self.creature.img["kx"] = self.ui.imgTailleXCreature.value()
- self.creature.img["ky"] = self.ui.imgTailleYCreature.value()
- self.creature.img["dx"] = self.ui.imgPosXCreature.value()
- self.creature.img["dy"] = self.ui.imgPosYCreature.value()
- self.creature.img["rotation"] = self.ui.imgRotationCreature.value()
- self.creature.img["pivote"] = self.ui.imgPivoteCreature.isChecked()
- self.creature.img["masqueAuto"] = self.ui.imgMasqueCreature.isChecked()
- else:
- self.creature.img["nom"] = str(self.ui.imgLogoCreature.text().toUtf8())
- self.creature.img["kx"] = 10
- self.creature.img["ky"] = 10
- self.creature.img["dx"] = 0
- self.creature.img["dy"] = 0
- self.creature.img["rotation"] = 0
- self.creature.img["pivote"] = False
- self.creature.img["masqueAuto"] = False
- self.creature.txt["taille_police"] = self.ui.txtTaillePoliceCreature.value()
- self.creature.txt["gras"] = bool(self.ui.txtGrasCreature.checkState())
- self.creature.txt["dx"] = self.ui.txtPosXCreature.value()
- self.creature.txt["dy"] = self.ui.txtPosYCreature.value()
- self.creature.txt["rotation"] = self.ui.txtRotationCreature.value()
- self.creature.deplacement = int(self.ui.deplacementCreature.value())
- self.creature.hauteur = int(self.ui.hauteurCreature.value())
- self.creature.vol = self.ui.volCreature.isChecked()
- self.creature.formeDef[self.formeCases] = self.vueForme.formeDef()
- self.creature.notes = str(self.ui.notesCreature.toPlainText())
- #attributs, attaques et inventaire enregistres lors de la modif des listes
-
- enregistrer(self.creature.id, self.creature, "librairie\\creature")
- self.creature = None
- self.emit(SIGNAL("majListCreatures()"))
- self.close()
- def supprimer(self):
- """supprimer l'enregistrement de ce terrain"""
- supprSvg("librairie\\creature", self.creature.id)
- self.emit(SIGNAL("majListCreatures()"))
- self.close()
- def annuler(self):
- """annule la creation/edition"""
- self.creature = None
- self.close()
|