Kaynağa Gözat

Création d'une liste des attributs assez stylée

unknown 10 yıl önce
ebeveyn
işleme
02ad18077b

+ 2 - 2
lib/Combattant.py

@@ -35,8 +35,8 @@ class Combattant(Pion):
         self.etat = ""
         self.deplacementRestant = 0        
 
-    def listeAttributs(self):
-        return self.listeAttributs
+##    def listeAttributs(self):
+##        return self.listeAttributs
 
     def listeAttaques(self):
         return self.attaques

+ 85 - 44
lib/EcranEditionCombattant.py

@@ -14,7 +14,7 @@ import regles
 import Actions
 import ui.dm as dm
 
-
+	
 class EcranEditionCombattant(QDialog):
     """interface de creation/edition de terrains"""
     def __init__(self, combattant=None, parent=None):
@@ -66,10 +66,11 @@ class EcranEditionCombattant(QDialog):
 
         self.connect(self.ui.edc_logo, SIGNAL("imageModifiee()"), self.logoModifie)
         self.vueForme = VueEditionForme(self)
-        
-        self.ui.edc_listeAttributs.setColumnWidth(0, (0.4*self.ui.edc_listeAttributs.width())) 
-        self.ui.edc_listeAttributs.setColumnWidth(1, (0.4*self.ui.edc_listeAttributs.width()))
-        self.connect(self.ui.edc_listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee, Qt.UniqueConnection)
+
+        self.construireListeAttributs()
+##        self.ui.edc_listeAttributs.setColumnWidth(0, (0.4*self.ui.edc_listeAttributs.width())) 
+##        self.ui.edc_listeAttributs.setColumnWidth(1, (0.4*self.ui.edc_listeAttributs.width()))
+##        self.connect(self.ui.edc_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()))
@@ -78,7 +79,12 @@ class EcranEditionCombattant(QDialog):
 ##        self.connect(self.ui.ajouterInventaireCombattant, SIGNAL("clicked()"), self.ajouterLigneListeInventaire)
 
     def layoutAtt(self):
+        """retourne le layout des attaques"""
         return self.ui.edc_deroulementAttaques_layout
+
+    def layoutCarac(self):
+        """retourne le layout des attributs"""
+        return self.ui.edc_deroulementAttributs_layout        
         
     def ouverture(self):
         """premier affichage: on met a jour les champs"""
@@ -106,7 +112,7 @@ class EcranEditionCombattant(QDialog):
         self.ui.edc_saut.setValue(self.combattant.saut)      
 
         #page attributs
-        self.majListeAttributs()
+        self.majListeAttributs()        
 
         #page attaques: chargement des attaques du combattant, puis panneau 'nouvelle attaque'
         index = 0
@@ -128,44 +134,9 @@ class EcranEditionCombattant(QDialog):
         #autre
         self.majActivationEnregistrer()
 
-    def majActivationEnregistrer(self):
-        """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.edc_listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee)
-        
-        #on vide la liste
-        while self.ui.edc_listeAttributs.rowCount() > 0:
-            self.ui.edc_listeAttributs.removeRow(0)
-        
-        #attributs issus des regles utilisees    
-        ordre = regles.ordreAttributs()
-        for elt in ordre:
-            ligne = ordre.index(elt)
-            self.ui.edc_listeAttributs.insertRow(ligne)
-            if regles.attribut(elt).combatSeulement == True: self.ui.edc_listeAttributs.setRowHidden(ligne, True)
-            item = QTableWidgetItem(QString.fromUtf8(elt))
-            item.setFlags(Qt.NoItemFlags)
-            self.ui.edc_listeAttributs.setItem(ligne, 0, item)
-            self.ui.edc_listeAttributs.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(str(self.combattant.listeAttributs[elt]))))
-            
-        self.connect(self.ui.edc_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.edc_listeAttributs.item(ligne, 1).text().toUtf8())
-            valVerifiee = regles.listeControle()[attribut].controler(nouvelleVal)
-            if valVerifiee != None:
-                self.combattant.listeAttributs[attribut] = valVerifiee
-            else:    
-                self.ui.edc_listeAttributs.setItem(ligne, 1, QTableWidgetItem(QString.fromUtf8(str(self.combattant.listeAttributs[attribut]))))
+    
 
+    ### page apparence
     def majFormeCases(self):
         if self.vueForme.formeCases() != self.formeCases():
             #on enregistre la def de forme, d'image et d'etiquette en cours
@@ -216,6 +187,71 @@ class EcranEditionCombattant(QDialog):
             self.combattant.couleur = couleur
             self.vueForme.majCouleur(couleur)
 
+    #### page attributs
+    def construireListeAttributs(self):
+        """construit les champs d'attributs"""
+        """cree les champs dedies a la saisie des attributs dans la grille dediee"""
+        self.layoutCarac().setSpacing(4)
+        self.layoutCarac().setMargin(0)
+        self.layoutAtt().setAlignment(Qt.AlignLeft)
+        
+        for nomAttribut in regles.ordreAttributsFichePerso():
+            if len(nomAttribut) > 0:
+                lay = QHBoxLayout()
+                lay.setMargin(0)
+                lay.setSpacing(2)
+                
+                etiquette = dm.DmLabel()
+                etiquette.majTexte(regles.attribut(nomAttribut).nom)        
+                etiquette.setObjectName("{}_etiquette".format(nomAttribut))
+                etiquette.setAlignment(Qt.AlignLeft|Qt.AlignVCenter)
+                etiquette.setMinimumSize(QSize(110, 22))
+                etiquette.setMaximumSize(QSize(110, 22))
+                lay.addWidget(etiquette)
+                
+                champ = dm.DmLineEdit()
+                champ.setMinimumSize(QSize(80, 22))
+                champ.setMaximumSize(QSize(80, 22))
+                champ.setAlignment(Qt.AlignCenter)
+                champ.majTexte(regles.listeAttributs()[nomAttribut])
+                champ.setObjectName("{}_champ".format(nomAttribut))
+    ##            self.connect(champ, SIGNAL("textChanged()"), self.controlerAttribut)
+                lay.addWidget(champ)
+
+                self.layoutCarac().addLayout(lay)
+            else:
+                lay = QHBoxLayout()
+                etiquetteVide = dm.DmLabel()
+                etiquetteVide.setMinimumHeight(10)
+                etiquetteVide.setMaximumHeight(10)
+                lay.addWidget(etiquetteVide)
+                lay.addWidget(etiquetteVide)
+                self.layoutCarac().addLayout(lay)
+
+    def majListeAttributs(self):
+        """met a jour la liste des attributs de la Combattant"""
+        for i in range(0, self.layoutCarac().count()):
+            layout = self.layoutCarac().itemAt(i).layout()
+            widget = layout.itemAt(1).widget()
+            if widget != 0:
+                if str(widget.objectName()[-6:]) == "_champ":
+                    attr = str(widget.objectName()[:-6])
+                    widget.majTexte(self.combattant.listeAttributs[attr])            
+
+    def listeAttributs(self):
+        """renvoie la liste des attributs tels qu'ils
+           sont saisis dans la liste des attributs"""
+        attributs = regles.listeAttributs()
+        for i in range(0, self.layoutCarac().count()):
+            layout = self.layoutCarac().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   
+
+    #### page attaques
     def attaqueNouvelle(self, attaque = None):
         """ajoute une nouvelle ligne a la liste des attaques"""
         #on ajoute de suite un panneau 'nouvelle attaque en dessous'
@@ -233,6 +269,11 @@ class EcranEditionCombattant(QDialog):
         panneau = self.findChild(QFrame, "att_frame_{}".format(index))
         self.layoutAtt().removeWidget(panneau)
 
+    #### barre d'outils
+    def majActivationEnregistrer(self):
+        """verifie la validite des saisies"""
+        self.ui.edc_enregistrer.setEnabled(len(self.ui.edc_nom.texte()) > 0) 
+    
     def enregistrer(self):
         """enregistre le terrain cree/edite"""
         #identifiant
@@ -256,7 +297,7 @@ class EcranEditionCombattant(QDialog):
         self.combattant.saut = self.ui.edc_saut.value()
 
         #page attributs
-        #dans listeAttributCelluleModifiee
+        self.combattant.listeAttributs = self.listeAttributs()
 
         #page attaque
         listeAttaques = []

BIN
lib/biblio/combattant


+ 0 - 1
lib/frameAttaque.py

@@ -169,7 +169,6 @@ class FrameAttaque(QFrame):
         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()):

+ 26 - 16
lib/regles.py

@@ -11,11 +11,29 @@ def sensTriOrdreJeu():
     """renvoie le type de tri pour l'ordre de jeu: 0 = croissant / 1 = decroissant"""
     return 1
 
+def valeurDefaut(nom):
+    """renvoie la valeur par defaut demandee"""
+    retour = None
+    dico = {"depMarche": 9, "depNage": 6, "depEscalade": 3, "depVol": 0, "saut": 6}
+    if nom in dico:
+        retour = dico[nom]
+    return retour
+
 def ordreAttributs():
-    """renvoie la liste des attributs avec leur position relative"""
-    lst = ["init", "PV", "TotalPV", "CA", "BBA", "Ref", "Vig", "Vol", "F", "D", "C", "I", "S", "Ch", "B_init", "Special"]
+    """renvoie la liste des attributs avec leur position relative (pour l'affichage en combat)"""
+    lst = ["init", "PV", "TotalPV", "CA", "BBA", "Ref", "Vig", "Vol", "F", "D", "C", "I", "S", "Ch", "B_init"]
     return lst     
 
+def ordreAttributsFichePerso():
+    """renvoie la liste des attributs avec leur position relative
+        (pour l'affichage sur la fiche de perso)
+        les chaines vides corresponsent a des espacements"""
+    lst = ["Classe", "Niv", "Exp", "", \
+           "TotalPV", "CA", "BBA", "B_init", "", \
+           "F", "D", "C", "I", "S", "Ch", "", \
+           "Ref", "Vig", "Vol"]
+    return lst  
+
 def listeAttributs():
     """renvoie un dictionnaire vide des attributs d'une creature ou joueur"""
     dico = {}
@@ -36,13 +54,15 @@ def listeControle():
            "Ref": Attribut("Reflexes", "Ref", "entier", None, None, 0, True, False, False), \
            "Vig": Attribut("Vigueur", "Vig", "entier", None, None, 0, True, False, False), \
            "Vol": Attribut("Volonte", "Vol", "entier", None, None, 0, True, False, False), \
-           "TotalPV": Attribut("Points de vie totaux", "TotalPV", "entier", None, None, 0, True, False, False), \
+           "TotalPV": Attribut("Points de vie\ntotaux", "TotalPV", "entier", None, None, 0, True, False, False), \
            "PV": Attribut("Points de vie", "PV", "entier", None, None, 0, True, True, False), \
            "CA": Attribut("Capacite d'armure", "CA", "entier", 0, None, 10, True, False, False), \
+           "BBA": Attribut("Bonus de base\nà l'attaque", "BBA", "entier", 0, None, 0, True, False, False), \
            "B_init": Attribut("Bonus d'initiative", "B_init", "entier", None, None, 0, True, False, False), \
            "init": Attribut("Initiative", "B_init", "entier", None, None, 10, True, True, False), \
-           "BBA": Attribut("Bonus de base a l'attaque", "BBA", "entier", 0, None, 0, True, False, False), \
-           "Special": Attribut("Special", "Special", "texte", 0, None, "", True, False, False)
+           "Classe": Attribut("Classe", "Classe", "texte", None, None, "", False, False, False), \
+           "Niv": Attribut("Niveau", "Niv", "entier", 0, None, 0, True, False, False), \
+           "Exp": Attribut("Experience", "Exp", "entier", 0, None, 0, False, False, True)
            }
     return dico 
 
@@ -57,7 +77,7 @@ def attribut(nomCourt):
 
 def ordreAttributsAttaques():
     """renvoie la liste des attributs avec leur position relative"""
-    lst = ["BA", "Dgts", "Crit.", "PorteeS", "DD", "svg", "Special"]
+    lst = ["BA", "Dgts", "Crit.", "DD", "svg"]
     return lst     
 
 def listeAttributsAttaques():
@@ -74,10 +94,8 @@ def listeControleAttaques():
            "BA": Attribut("Bonus d'attaque", "BA", "entier", None, None, 0, True, False, False), \
            "Dgts": Attribut("Degats", "Dgts", "texte", None, None, "", True, False, False), \
            "Crit.": Attribut("Critique", "Crit.", "texte", None, None, "20/x2", True, False, False), \
-           "PorteeS": Attribut("Portee", "PorteeS", "texte", 0, None, "", True, False, False), \
            "DD": Attribut("DD", "DD", "entier", None, None, 10, True, False, False), \
            "svg": Attribut("Type de sauvegarde", "svg", "texte", None, None, "", True, False, False), \
-           "Special": Attribut("Special", "special", "texte", None, None, "", True, False, False)
            }
     return dico 
 
@@ -90,14 +108,6 @@ def attributAttaque(nomCourt):
         retour = None
     return retour    
 
-def valeurDefaut(nom):
-    """renvoie la valeur par defaut demandee"""
-    retour = None
-    dico = {"depMarche": 9, "depNage": 6, "depEscalade": 3, "depVol": 0, "saut": 6}
-    if nom in dico:
-        retour = dico[nom]
-    return retour
-
 class Attribut():
     """attribut des pions et personnages"""
     def __init__(self, nom, nomCourt, typ, mini, maxi, defaut, afficherCombat, combatSeulement, joueursSeulement):

+ 18 - 4
lib/ui/ecran_editionCombattant.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'editionCombattant.ui'
 #
-# Created: Wed Jun 17 13:39:16 2015
+# Created: Wed Jun 17 15:59:41 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -507,7 +507,7 @@ class Ui_edc_fenetre(object):
         self.page_attr = QtGui.QWidget()
         self.page_attr.setObjectName(_fromUtf8("page_attr"))
         self.edc_listeAttributs = QtGui.QTableWidget(self.page_attr)
-        self.edc_listeAttributs.setGeometry(QtCore.QRect(20, 50, 171, 351))
+        self.edc_listeAttributs.setGeometry(QtCore.QRect(340, 40, 121, 351))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 150))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -539,11 +539,25 @@ class Ui_edc_fenetre(object):
         self.edc_listeAttributs.horizontalHeader().setDefaultSectionSize(50)
         self.edc_listeAttributs.verticalHeader().setVisible(False)
         self.label_18 = QtGui.QLabel(self.page_attr)
-        self.label_18.setGeometry(QtCore.QRect(20, 20, 171, 16))
+        self.label_18.setGeometry(QtCore.QRect(320, 20, 171, 16))
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
         self.label_18.setFont(font)
         self.label_18.setObjectName(_fromUtf8("label_18"))
+        self.edc_deroulementAttributs = QtGui.QScrollArea(self.page_attr)
+        self.edc_deroulementAttributs.setGeometry(QtCore.QRect(10, 10, 231, 411))
+        self.edc_deroulementAttributs.setFrameShape(QtGui.QFrame.StyledPanel)
+        self.edc_deroulementAttributs.setFrameShadow(QtGui.QFrame.Raised)
+        self.edc_deroulementAttributs.setWidgetResizable(True)
+        self.edc_deroulementAttributs.setObjectName(_fromUtf8("edc_deroulementAttributs"))
+        self.scrollAreaWidgetContents_2 = QtGui.QWidget()
+        self.scrollAreaWidgetContents_2.setGeometry(QtCore.QRect(0, 0, 229, 409))
+        self.scrollAreaWidgetContents_2.setObjectName(_fromUtf8("scrollAreaWidgetContents_2"))
+        self.edc_deroulementAttributs_layout = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_2)
+        self.edc_deroulementAttributs_layout.setSpacing(1)
+        self.edc_deroulementAttributs_layout.setMargin(3)
+        self.edc_deroulementAttributs_layout.setObjectName(_fromUtf8("edc_deroulementAttributs_layout"))
+        self.edc_deroulementAttributs.setWidget(self.scrollAreaWidgetContents_2)
         self.edc_pages.addWidget(self.page_attr)
         self.page_att = QtGui.QWidget()
         self.page_att.setObjectName(_fromUtf8("page_att"))
@@ -963,7 +977,7 @@ class Ui_edc_fenetre(object):
         self.horizontalLayout_2.addLayout(self.horizontalLayout)
 
         self.retranslateUi(edc_fenetre)
-        self.edc_pages.setCurrentIndex(3)
+        self.edc_pages.setCurrentIndex(2)
         QtCore.QObject.connect(self.edc_menu, QtCore.SIGNAL(_fromUtf8("cellClicked(int,int)")), self.edc_pages.setCurrentIndex)
         QtCore.QMetaObject.connectSlotsByName(edc_fenetre)
 

+ 3 - 3
lib/ui/ecran_panneauAttaques.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'panneauAttaques.ui'
 #
-# Created: Wed Jun 17 14:10:06 2015
+# Created: Wed Jun 17 15:35:13 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -31,7 +31,7 @@ class Ui_att_frame(object):
         att_frame.setMaximumSize(QtCore.QSize(471, 1000))
         att_frame.setFrameShape(QtGui.QFrame.StyledPanel)
         att_frame.setFrameShadow(QtGui.QFrame.Raised)
-        self.att_panneau = DmEdcPanneauAttaque(att_frame)
+        self.att_panneau = QtGui.QFrame(att_frame)
         self.att_panneau.setEnabled(True)
         self.att_panneau.setGeometry(QtCore.QRect(0, 0, 471, 111))
         self.att_panneau.setMinimumSize(QtCore.QSize(0, 0))
@@ -241,7 +241,7 @@ class Ui_att_frame(object):
         self.att_forme_e.setText(_translate("att_frame", "Forme :", None))
         self.att_supprimer.setText(_translate("att_frame", "...", None))
 
-from dm import DmTextEdit, DmLineEdit, DmComboBox, DmEdcPanneauAttaque
+from dm import DmTextEdit, DmLineEdit, DmComboBox
 
 if __name__ == "__main__":
     import sys

+ 51 - 5
lib/ui/editionCombattant.ui

@@ -508,7 +508,7 @@
           </font>
          </property>
          <property name="currentIndex">
-          <number>3</number>
+          <number>2</number>
          </property>
          <widget class="QWidget" name="page_nom">
           <widget class="DmLineEdit" name="edc_nom">
@@ -1387,9 +1387,9 @@ image</string>
           <widget class="QTableWidget" name="edc_listeAttributs">
            <property name="geometry">
             <rect>
-             <x>20</x>
-             <y>50</y>
-             <width>171</width>
+             <x>340</x>
+             <y>40</y>
+             <width>121</width>
              <height>351</height>
             </rect>
            </property>
@@ -1476,7 +1476,7 @@ image</string>
           <widget class="QLabel" name="label_18">
            <property name="geometry">
             <rect>
-             <x>20</x>
+             <x>320</x>
              <y>20</y>
              <width>171</width>
              <height>16</height>
@@ -1491,6 +1491,52 @@ image</string>
             <string>Attributs / caractéristiques :  </string>
            </property>
           </widget>
+          <widget class="QScrollArea" name="edc_deroulementAttributs">
+           <property name="geometry">
+            <rect>
+             <x>10</x>
+             <y>10</y>
+             <width>231</width>
+             <height>411</height>
+            </rect>
+           </property>
+           <property name="frameShape">
+            <enum>QFrame::StyledPanel</enum>
+           </property>
+           <property name="frameShadow">
+            <enum>QFrame::Raised</enum>
+           </property>
+           <property name="widgetResizable">
+            <bool>true</bool>
+           </property>
+           <widget class="QWidget" name="scrollAreaWidgetContents_2">
+            <property name="geometry">
+             <rect>
+              <x>0</x>
+              <y>0</y>
+              <width>229</width>
+              <height>409</height>
+             </rect>
+            </property>
+            <layout class="QVBoxLayout" name="edc_deroulementAttributs_layout">
+             <property name="spacing">
+              <number>1</number>
+             </property>
+             <property name="leftMargin">
+              <number>3</number>
+             </property>
+             <property name="topMargin">
+              <number>3</number>
+             </property>
+             <property name="rightMargin">
+              <number>3</number>
+             </property>
+             <property name="bottomMargin">
+              <number>3</number>
+             </property>
+            </layout>
+           </widget>
+          </widget>
          </widget>
          <widget class="QWidget" name="page_att">
           <widget class="QScrollArea" name="edc_deroulementAttaques">

+ 1 - 7
lib/ui/panneauAttaques.ui

@@ -31,7 +31,7 @@
   <property name="frameShadow">
    <enum>QFrame::Raised</enum>
   </property>
-  <widget class="DmEdcPanneauAttaque" name="att_panneau">
+  <widget class="QFrame" name="att_panneau">
    <property name="enabled">
     <bool>true</bool>
    </property>
@@ -666,12 +666,6 @@
    <extends>QComboBox</extends>
    <header location="global">dm.h</header>
   </customwidget>
-  <customwidget>
-   <class>DmEdcPanneauAttaque</class>
-   <extends>QFrame</extends>
-   <header location="global">dm.h</header>
-   <container>1</container>
-  </customwidget>
  </customwidgets>
  <resources/>
  <connections/>