#from __future__ import unicode_literals # -*- coding: utf-8 -*- from __future__ import division from PyQt4.QtCore import * from PyQt4.QtGui import * from Combattant import Combattant from ui.ecran_editionCombattant import Ui_editionCombattant from outilsSvg import * from VueEditionForme import VueEditionForme from EcranEditionAttaques import EcranEditionAttaques import regles class EcranEditionCombattant(QDialog): """interface de creation/edition de terrains""" def __init__(self, combattant=None, parent=None): """initialisation de la fenetre""" super (EcranEditionCombattant, self).__init__() self.pixGraphique = None self.id = None self.createWidgets() if combattant == None: self.combattant = Combattant() else: self.combattant = combattant self.ouverture() def nouvelIdCombattant(self): """renvoie un identifiant pour un nouveau terrain""" dicoSvg = afficheSvg("lib\\biblio\\Combattant") nouvelId = 1 while str(nouvelId) in dicoSvg.keys(): nouvelId += 1 return str(nouvelId) def formeCases(self): retour = "" if self.ui.edc_casesHexa.isChecked(): retour = "H" else: retour = "C" return retour def createWidgets(self): """construction de l'interface""" #construction de l'interface self.ui = Ui_editionCombattant() self.ui.setupUi(self) self.connect(self.ui.edp_nom, SIGNAL("textEdited(QString)"), self.majActivationEnregistrer) self.connect(self.ui.edp_nom, SIGNAL("textEdited(QString)"), self.majApercuTexte) self.connect(self.ui.edp_enregistrer, SIGNAL("clicked()"), self.enregistrer) self.connect(self.ui.edp_annuler, SIGNAL("clicked()"), self.annuler) self.connect(self.ui.edp_couleur, SIGNAL("clicked()"), self.selectionCouleur) self.connect(self.ui.edp_image, SIGNAL("clicked()"), self.selectionImage) self.connect(self.ui.edp_aideForme, SIGNAL("clicked()"), self.afficherAideForme) 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.listeInventaireCombattant.setColumnWidth(0, (0.2*self.ui.listeInventaireCombattant.width())) ## self.ui.listeInventaireCombattant.setColumnWidth(1, (0.8*self.ui.listeInventaireCombattant.width())) ## self.connect(self.ui.listeInventaireCombattant, SIGNAL("clicked()"), self.listeInventaireCelluleModifiee) ## self.connect(self.ui.supprimerInventaireCombattant, SIGNAL("clicked()"), self.supprimerLigneListeInventaire) ## self.connect(self.ui.ajouterInventaireCombattant, SIGNAL("clicked()"), self.ajouterLigneListeInventaire) def ouverture(self): """premier affichage: on met a jour les champs""" #identifiant if not self.id: self.id = self.nouvelIdCombattant() #page_nom self.ui.edc_nom.majTexte(self.combattant.nom) self.ui.edc_logo.chargerImage(self.combattant.logo) self.vueForme.majForme(self.combattant.formeDef[self.formeCases()]) self.majApercuImage() self.majApercuTexte() #page deplacements self.ui.edc_taille.setValue(self.combattant.taille) self.ui.edc_depMarche.setValue(self.combattant.depMarche) self.ui.edc_depNage.setValue(self.combattant.depNage) self.ui.edc_depEscalade.setValue(self.combattant.depEscalade) self.ui.edc_depVol.setValue(self.combattant.depVol) self.ui.edc_saut.setValue(self.combattant.saut) #page attributs self.majListeAttributs() #page attaques tabAttaques = self.ui.pages.widget(3) editionAttaques = EcranEditionAttaques(self.combattant) editionAttaques.setParent(tabAttaques) #page inventaire #self.majListeInventaire() #page_notes for detail in self.combattant.details: widget = self.ui.findchild(DmLineEdit, "edc_detail_{}".format(detail)) if widget: widget.majTexte(self.combattant.details[detail]) self.ui.edc_notes.setText(self.combattant.notes) def majActivationEnregistrer(self, txt): """verifie la validite des saisies""" self.ui.edc_enregistrer.setEnabled(len(self.ui.edc_nom.texte()) > 0) def majListeAttributs(self): """met a jour la liste des attributs de la Combattant""" 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.combattant.listeAttributs[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.combattant.listeAttributs[attribut] = valVerifiee else: self.ui.listeAttributs.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(str(self.combattant.listeAttributs[attribut])))) ## def majListeInventaire(self): ## """met a jour la liste de l'inventaire de la Combattant""" ## self.disconnect(self.ui.listeInventaireCombattant, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee) ## ## #on vide la liste ## while self.ui.listeInventaireCombattant.rowCount() > 0: ## self.ui.listeInventaireCombattant.removeRow(0) ## ligne = 0 ## #attributs issus des regles utilisees ## for objet in self.combattant.inventaire: ## self.ui.listeInventaireCombattant.insertRow(ligne) ## self.ui.listeInventaireCombattant.setItem(ligne, 0, QTableWidgetItem(QString.fromUtf8(self.combattant.inventaire[objet]))) ## self.ui.listeInventaireCombattant.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(objet))) ## ligne += 1 ## self.connect(self.ui.listeInventaireCombattant, 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.listeInventaireCombattant.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.combattant.inventaire or len(val) == 0: ## print("cet objet existe deja ou a un nom invalide") ## val = None ## ## if colonne == 0: ## if val != None: ## self.combattant.inventaire[str(self.ui.listeInventaireCombattant.item(ligne, 1).text().toUtf8())] = val ## else: ## self.ui.listeInventaireCombattant.setItem(ligne, 0, QTableWidgetItem(QString.fromUtf8(\ ## str(self.combattant.inventaire[str(self.ui.listeInventaireCombattant.item(ligne, 1).text().toUtf8())])))) ## else: ## txt = str(self.ui.listeInventaireCombattant.item(ligne, 1).text().toUtf8()) ## if txt in self.combattant.inventaire: ## del self.combattant.inventaire[txt] ## if val != None: ## self.combattant.inventaire[val] = txt ## else: ## self.ui.listeInventaireCombattant.removeRow(ligne) ## ## def ajouterLigneListeInventaire(self, objet=""): ## num = -1 ## for i in range(0, self.ui.listeInventaireCombattant.rowCount()): #si un objet de la liste a deja un nom vide, on ne cree pas de nouvelle ligne ## if len(str(self.ui.listeInventaireCombattant.item(i, 0).text().toUtf8())) == 0: ## num = i ## break ## if num < 0: ## self.disconnect(self.ui.listeInventaireCombattant, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee) ## ligne = self.ui.listeInventaireCombattant.rowCount() ## self.ui.listeInventaireCombattant.insertRow(ligne) ## self.ui.listeInventaireCombattant.setItem(ligne, 0, QTableWidgetItem(QString.fromUtf8("0"))) ## self.ui.listeInventaireCombattant.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(objet))) ## self.connect(self.ui.listeInventaireCombattant, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee) ## else: ## self.ui.listeInventaireCombattant.setCurrentRow(num) ## ## def supprimerLigneListeInventaire(self): ## self.disconnect(self.ui.listeInventaireCombattant, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee) ## ligne = self.ui.listeInventaireCombattant.currentRow() ## del self.combattant.inventaire[str(self.ui.listeInventaireCombattant.item(ligne, 1).text().toUtf8())] ## self.ui.listeInventaireCombattant.removeRow(ligne) ## self.connect(self.ui.listeInventaireCombattant, SIGNAL("cellChanged(int,int)"), self.listeInventaireCelluleModifiee) def majApercuImage(self): """met a jour l'image sur l'apercu du pion""" if self.ui.imgAfficherCombattant.isChecked(): if len(str(self.ui.imgTextureCombattant.text().toUtf8())) > 0: img = str(self.ui.imgTextureCombattant.text().toUtf8()) self.vueForme.majImage(img, self.ui.imgTailleXCombattant.value() \ , self.ui.imgTailleYCombattant.value() \ , self.ui.imgPosXCombattant.value() \ , self.ui.imgPosYCombattant.value() \ , self.ui.imgRotationCombattant.value() \ , self.ui.imgPivoteCombattant.isChecked() \ , self.ui.imgMasqueCombattant.isChecked() ) else: img = str(self.ui.imgLogoCombattant.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.txtAfficherCombattant.isChecked(): txt = str(self.ui.nomCombattant.text().toUtf8()) else: txt = "Pion" self.vueForme.majTexte(txt, self.ui.txtTaillePoliceCombattant.value() \ , self.ui.txtGrasCombattant.isChecked() \ , self.ui.txtPosXCombattant.value() \ , self.ui.txtPosYCombattant.value() \ , self.ui.txtRotationCombattant.value()) def reinitImage(self): self.ui.imgTailleXCombattant.setValue(10) self.ui.imgTailleYCombattant.setValue(10) self.ui.imgPosXCombattant.setValue(0) self.ui.imgPosYCombattant.setValue(0) self.ui.imgRotationCombattant.setValue(0) self.ui.imgPivoteCombattant.setChecked(False) self.ui.imgMasqueCombattant.setChecked(False) self.majApercuImage() def reinitTexte(self): self.ui.txtTaillePoliceCombattant.setValue(21) self.ui.txtGrasCombattant.setCheckState(0) self.ui.txtPosXCombattant.setValue(0) self.ui.txtPosYCombattant.setValue(0) self.ui.txtRotationCombattant.setValue(0) self.majApercuTexte() 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.combattant.couleur = couleur def enregistrer(self): """enregistre le terrain cree/edite""" #page nom self.combattant.id = self.id self.combattant.nom = self.ui.edc_nom.texte() self.combattant.logo = self.ui.edc_logo.image() self.combattant.img = self.vueForme.image() self.combattant.etiquette = self.vueForme.etiquette() self.combattant.formeDef["H"] = self.vueForme.formeDef("H") self.combattant.formeDef["C"] = self.vueForme.formeDef("C") #page dep self.combattant.taille = self.ui.edc_taille.value() self.combattant.depMarche = self.ui.edc_depMarche.value() self.combattant.depNage = self.ui.edc_depNage.value() self.combattant.depEscalade = self.ui.edc_depEscalade.value() self.combattant.depVol = self.ui.edc_depVol.value() self.combattant.saut = self.ui.edc_saut.value() #page attributs #dans listeAttributCelluleModifiee #page attaque #dans EcranEditionAttaque #page inventaire #a voir... #page notes for detail in self.combattant.details: widget = self.ui.findchild(DmLineEdit, "edc_detail_{}".format(detail)) if widget: txt = widget.texte() if len(txt) > 0: self.combattant.details[detail] = txt self.combattant.notes = str(self.ui.notesCombattant.toPlainText()) enregistrer(self.combattant.id, self.combattant, "lib\\biblio\\combattant") self.combattant = None self.done(1) ## def supprimer(self): ## """supprimer l'enregistrement de ce terrain""" ## supprSvg("lib\\biblio\\combattant", self.combattant.id) ## self.done(1) def annuler(self): """annule la creation/edition""" self.combattant = None self.done(0)