Browse Source

Gestion des materiels au poil!

olinox14 10 years ago
parent
commit
9118e1f68f

+ 10 - 0
.settings/org.eclipse.core.resources.prefs

@@ -5,6 +5,7 @@ encoding//lib/Cache.py=utf-8
 encoding//lib/Case.py=utf-8
 encoding//lib/Case.py=utf-8
 encoding//lib/Combattant.py=utf-8
 encoding//lib/Combattant.py=utf-8
 encoding//lib/Decor.py=utf-8
 encoding//lib/Decor.py=utf-8
+encoding//lib/EcranAffichageTexte.py=utf-8
 encoding//lib/EcranAltitude.py=utf-8
 encoding//lib/EcranAltitude.py=utf-8
 encoding//lib/EcranChargerPlateau.py=utf-8
 encoding//lib/EcranChargerPlateau.py=utf-8
 encoding//lib/EcranCreerPlateau.py=utf-8
 encoding//lib/EcranCreerPlateau.py=utf-8
@@ -14,17 +15,26 @@ encoding//lib/EcranEditionTerrain.py=utf-8
 encoding//lib/EcranFondPlateau.py=utf-8
 encoding//lib/EcranFondPlateau.py=utf-8
 encoding//lib/EcranGestionCombat.py=utf-8
 encoding//lib/EcranGestionCombat.py=utf-8
 encoding//lib/EcranSelectionPj.py=utf-8
 encoding//lib/EcranSelectionPj.py=utf-8
+encoding//lib/Forme.py=utf-8
 encoding//lib/Modes.py=utf-8
 encoding//lib/Modes.py=utf-8
 encoding//lib/Partie.py=utf-8
 encoding//lib/Partie.py=utf-8
 encoding//lib/Pion.py=utf-8
 encoding//lib/Pion.py=utf-8
 encoding//lib/Plateau.py=utf-8
 encoding//lib/Plateau.py=utf-8
 encoding//lib/Terrain.py=utf-8
 encoding//lib/Terrain.py=utf-8
+encoding//lib/VueEditionForme.py=utf-8
+encoding//lib/explorateurMat.py=utf-8
+encoding//lib/frameAttaque.py=utf-8
 encoding//lib/framePj.py=utf-8
 encoding//lib/framePj.py=utf-8
+encoding//lib/mat.py=utf-8
 encoding//lib/outilsSvg.py=latin1
 encoding//lib/outilsSvg.py=latin1
 encoding//lib/rsc.py=utf-8
 encoding//lib/rsc.py=utf-8
 encoding//lib/ui/dm.py=utf-8
 encoding//lib/ui/dm.py=utf-8
 encoding//lib/ui/ecran_altitude.py=utf-8
 encoding//lib/ui/ecran_altitude.py=utf-8
+encoding//lib/ui/ecran_creationPlateau.py=utf-8
 encoding//lib/ui/ecran_creerPlateau.py=utf-8
 encoding//lib/ui/ecran_creerPlateau.py=utf-8
+encoding//lib/ui/ecran_editionCombattant.py=utf-8
+encoding//lib/ui/ecran_editionDecor.py=utf-8
 encoding//lib/ui/ecran_explorateur.py=utf-8
 encoding//lib/ui/ecran_explorateur.py=utf-8
+encoding//lib/ui/ecran_principal.py=utf-8
 encoding//lib/ui/ecran_saisie.py=utf-8
 encoding//lib/ui/ecran_saisie.py=utf-8
 encoding/DMonde.py=utf-8
 encoding/DMonde.py=utf-8

+ 0 - 239
DMonde.ppr

@@ -1,239 +0,0 @@
-[Config]
-Compilator.SaveAll=0
-Compilator.Capture=0
-Compilator.HideOutput=0
-Compilator.ProgSaveAll=0
-Compilator.ProgRunSelection=0
-Compilator.LogType=0
-DefaultDir=F:\DMonde
-DefaultCPIndex=0
-LogtoEnd=1
-DontOpen=0
-AbsolutePath=0
-FileFormat=0
-ProjectFilesOnly=0
-Extensions=*.py
-[Project tree]
-DMonde
-	+DMonde
-		-.git
-			-hooks
-			-info
-			-logs
-				-refs
-					-heads
-					-remotes
-						-origin
-			-objects
-				-01
-				-02
-				-05
-				-06
-				-08
-				-0c
-				-14
-				-1c
-				-1e
-				-1f
-				-23
-				-24
-				-31
-				-33
-				-37
-				-39
-				-3c
-				-3f
-				-41
-				-48
-				-4b
-				-53
-				-57
-				-58
-				-59
-				-5b
-				-5d
-				-5e
-				-67
-				-68
-				-6f
-				-77
-				-79
-				-7a
-				-7e
-				-81
-				-83
-				-85
-				-87
-				-8b
-				-8d
-				-8f
-				-93
-				-a1
-				-a3
-				-a4
-				-a6
-				-aa
-				-b4
-				-bb
-				-bc
-				-c3
-				-c4
-				-c7
-				-c8
-				-cd
-				-d0
-				-d7
-				-d8
-				-d9
-				-e0
-				-e3
-				-e4
-				-e8
-				-ec
-				-ee
-				-ef
-				-f1
-				-f4
-				-f9
-				-fb
-				-fd
-				-ff
-				-info
-				-pack
-			-refs
-				-heads
-				-remotes
-					-origin
-				-tags
-		+lib
-			-biblio
-			-ui
-				-corbeille_ui
-					lib\ui\corbeille_ui\dmOngletsH.py
-					lib\ui\corbeille_ui\dmtableattaques - Copie.py
-					lib\ui\corbeille_ui\dmtableattaques_tableAttaques.py
-					lib\ui\corbeille_ui\ecran_panneauAttaques.py
-					lib\ui\corbeille_ui\EcranEditionAttaques.py
-					lib\ui\corbeille_ui\test_ui.py
-				-ressource
-				lib\ui\__init__.py
-				lib\ui\dm.py
-				lib\ui\dmOngletsH.py
-				lib\ui\ecran_affichageTexte.py
-				lib\ui\ecran_chargerPlateau.py
-				lib\ui\ecran_creationPlateau.py
-				lib\ui\ecran_creerPlateau.py
-				lib\ui\ecran_editionAttaques.py
-				lib\ui\ecran_editionCombattant.py
-				lib\ui\ecran_editionCreature.py
-				lib\ui\ecran_editionDecor.py
-				lib\ui\ecran_editionObjet.py
-				lib\ui\ecran_editionQuantiteObjet.py
-				lib\ui\ecran_editionTerrain.py
-				lib\ui\ecran_explorateur.py
-				lib\ui\ecran_gestionCombat.py
-				lib\ui\ecran_panneauAttaques.py
-				lib\ui\ecran_panneauPj.py
-				lib\ui\ecran_principal.py
-				lib\ui\ecran_selectionPj.py
-				lib\ui\panneauImage.py
-				lib\ui\ressource_rc.py
-				lib\dmK.py
-			lib\__init__.py
-			lib\Actions.py
-			lib\AEtoile.py
-			lib\afficherSousMenu.py
-			lib\Boucle.py
-			lib\br.py
-			lib\Cache - Copie.py
-			lib\Cache.py
-			lib\Case.py
-			lib\Combattant.py
-			lib\Creature.py
-			lib\Decor.py
-			lib\dmF.py
-			lib\EcranAffichageTexte.py
-			lib\EcranChargerPlateau.py
-			lib\EcranCreerPlateau.py
-			lib\EcranEditionCombattant.py
-			lib\EcranEditionDecor.py
-			lib\EcranEditionObjet.py
-			lib\EcranEditionTerrain.py
-			lib\EcranFondPlateau.py
-			lib\EcranGestionCombat.py
-			lib\EcranSelectionPj.py
-			lib\EcranVol.py
-			lib\EffetsCase.py
-			lib\EntreeSortie.py
-			lib\fonctionsCommunes.py
-			lib\Forme.py
-			lib\frameAttaque.py
-			lib\framePj.py
-			lib\Inventaire.py
-			lib\lancer.py
-			lib\Modes.py
-			lib\Objet.py
-			lib\ObjetAction.py
-			lib\outilsSvg.py
-			lib\Partie.py
-			lib\Pinceau.py
-			lib\Pion.py
-			lib\Plateau.py
-			lib\ProjectionDep.py
-			lib\regles.py
-			lib\rsc.py
-			lib\Terrain.py
-			lib\test.py
-			lib\VueEditionForme.py
-		-parties
-			-Partie1
-				-journal
-				-personnages
-				-ressources
-				-svg
-		-ressources
-			-commun
-			-dd35
-			-dm
-		__init__.py
-		DMonde.py
-[Open project files]
-0=DMonde.py
-1=lib\Plateau.py
-2=lib\Modes.py
-3=lib\br.py
-4=lib\Case.py
-5=lib\Actions.py
-6=lib\Pion.py
-7=lib\ui\dm.py
-8=lib\EcranEditionCombattant.py
-[Selected Project Files]
-Main=
-Selected=lib\Plateau.py
-[DMonde.py]
-TopLine=1
-Caret=25,26
-[lib\Plateau.py]
-TopLine=990
-Caret=22,1002
-[lib\Modes.py]
-TopLine=537
-Caret=1,564
-[lib\br.py]
-TopLine=9
-Caret=1,22
-[lib\Case.py]
-TopLine=256
-Caret=18,269
-[lib\Actions.py]
-TopLine=397
-Caret=49,416
-[lib\Pion.py]
-TopLine=151
-Caret=35,158
-[lib\ui\dm.py]
-TopLine=535
-Caret=47,538
-[lib\EcranEditionCombattant.py]
-TopLine=1
-Caret=30,9

+ 60 - 79
DMonde.py

@@ -3,25 +3,29 @@
 """Interface principale du programme DMonde
 """Interface principale du programme DMonde
 """
 """
 import os
 import os
-from sys import exit, argv
+from sys import exit
 
 
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
+from PyQt4.QtCore import SIGNAL, Qt, QString
+from PyQt4.QtGui import QMainWindow, QGraphicsView, QTableWidget, QLineEdit, \
+    QTextEdit, QToolButton, QSlider, QDoubleSpinBox, QWidget, QFrame, \
+    QApplication
 
 
+from lib.Actions import Ligne
 from lib.EcranChargerPlateau import EcranChargerPlateau
 from lib.EcranChargerPlateau import EcranChargerPlateau
 from lib.EcranCreerPlateau import EcranCreerPlateau
 from lib.EcranCreerPlateau import EcranCreerPlateau
 from lib.EcranEditionCombattant import EcranEditionCombattant
 from lib.EcranEditionCombattant import EcranEditionCombattant
 from lib.EcranFondPlateau import EcranFondPlateau
 from lib.EcranFondPlateau import EcranFondPlateau
 from lib.Plateau import Plateau
 from lib.Plateau import Plateau
+from lib.commun import rep, Session
 from lib.framePj import FramePj
 from lib.framePj import FramePj
-from lib.outilsSvg import *
-from lib.ui.ecran_principal import Ui_principal
-from lib.Actions import Ligne
-from lib.commun import rep
+from lib.mat import chargerMat, supprimerMat
+from lib.outilsSvg import afficheSvg, enregistrer, chargerUnique, supprSvg
 from lib.rsc import RImage
 from lib.rsc import RImage
+from lib.ui.ecran_principal import Ui_principal
+
 
 
 class DMonde(QMainWindow):
 class DMonde(QMainWindow):
-    """interface comprenant: chat ecrit, fenetre d'infos, lancer de des, echange de fichiers, lancement du chat vocal"""
+    """interface principale de DMonde"""
     def __init__(self, parent=None):
     def __init__(self, parent=None):
         """initialisation de la fenetre"""
         """initialisation de la fenetre"""
         super (DMonde, self).__init__()
         super (DMonde, self).__init__()
@@ -39,7 +43,7 @@ class DMonde(QMainWindow):
         self.ui = Ui_principal()
         self.ui = Ui_principal()
         self.ui.setupUi(self)
         self.ui.setupUi(self)
         self.afficherPanneauxPlateau(False)
         self.afficherPanneauxPlateau(False)
-        self.connect(self.ui.cbt_sauver, SIGNAL("clicked()"), self.sauverPlateau)   
+        self.connect(self.ui.cbt_sauver, SIGNAL("clicked()"), self.enregistrerPlateau)   
         self.connect(self.ui.cbt_fermer, SIGNAL("clicked()"), self.fermerPlateau)
         self.connect(self.ui.cbt_fermer, SIGNAL("clicked()"), self.fermerPlateau)
         self.connect(self.ui.grp_nouveauPj, SIGNAL("clicked()"), self.nouveauPj)
         self.connect(self.ui.grp_nouveauPj, SIGNAL("clicked()"), self.nouveauPj)
         self.ui.cbt_vue.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
         self.ui.cbt_vue.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
@@ -61,6 +65,7 @@ class DMonde(QMainWindow):
         self.chargerListePj()
         self.chargerListePj()
 
 
     ########## onglet plateau
     ########## onglet plateau
+    
     def creerEcranFondPlateau(self):
     def creerEcranFondPlateau(self):
         ecranFondPlateau = EcranFondPlateau(self)
         ecranFondPlateau = EcranFondPlateau(self)
         self.ui.cbt_vue.resetTransform()
         self.ui.cbt_vue.resetTransform()
@@ -71,56 +76,35 @@ class DMonde(QMainWindow):
         if self.plateau != None:
         if self.plateau != None:
             if self.plateau.estCree() == True:
             if self.plateau.estCree() == True:
                 return 
                 return 
-        
         self.creationPlateau = EcranCreerPlateau()
         self.creationPlateau = EcranCreerPlateau()
-        idPlateau = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
         plateau = Plateau(self)
         plateau = Plateau(self)
-        plateau.id = idPlateau
         self.creationPlateau.afficher(plateau)
         self.creationPlateau.afficher(plateau)
         r = self.creationPlateau.exec_()
         r = self.creationPlateau.exec_()
         if r == 1:
         if r == 1:
-            QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
             self.plateau = self.creationPlateau.resultat()
             self.plateau = self.creationPlateau.resultat()
             self.plateau.creer()
             self.plateau.creer()
-            QApplication.restoreOverrideCursor()
-        
         
         
-#     def creerPlateau(self, nom, chapitre, formeCases, largeur, hauteur, couleur, description, presentation):
-#         """cree le plateau entre en parametre"""
-#         nouvelId = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
-#         QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
-#         self.plateau = Plateau(self)
-#         self.plateau.creer(nouvelId, nom, chapitre, formeCases, largeur, hauteur, couleur, description, presentation)
-#         QApplication.restoreOverrideCursor()
-#         del self.creationPlateau
-
     def afficherEcranChargerPlateau(self):
     def afficherEcranChargerPlateau(self):
         """ouvre la fenetre de chargement de plateau"""
         """ouvre la fenetre de chargement de plateau"""
-        valide = True
-        if self.plateau != None:
-            if self.plateau.estCree() == True:
-                valide = False
-        if valide:
-            self.chargementPlateau = EcranChargerPlateau(self)
-            self.chargementPlateau.setWindowModality(Qt.ApplicationModal)
-            self.chargementPlateau.show()
-            self.chargementPlateau.raise_()
-
-    def chargerPlateau(self, nomFichierSvg):
         if self.plateau != None:
         if self.plateau != None:
-            if self.plateau.estCree() == True:
-                self.fermerPlateau()
-        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
-        self.plateau = chargerUnique("parties\\{}\\svg\\{}.p".format(self.partie, nomFichierSvg))
-        if self.plateau:
-            self.plateau.recreer(self)
-        else:
-            self.plateau = Plateau(self)
-        QApplication.restoreOverrideCursor()    
+            if self.plateau.estCree(): return
+        fen = EcranChargerPlateau(self)
+        fen.show()
+        r = fen.exec_()
+        if r == 1:
+            idM = fen.resultat()
+            del fen
+            self.chargerPlateau(idM)
+        
+    def chargerPlateau(self, idM):
+        if self.plateau: 
+            if self.plateau.estCree(): self.fermerPlateau()
+        self.plateau = chargerMat(idM, "cbt")
+        self.plateau.recreer(self)  
 
 
     def chargerDernierPlateau(self):
     def chargerDernierPlateau(self):
         """charge le dernier plateau sauvegarde"""
         """charge le dernier plateau sauvegarde"""
-        infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
+        infosSvg = afficheSvg(os.path.join(rep("cbt"), "infos_sauvegarde"))
         dernier = None
         dernier = None
         for id_svg in infosSvg:
         for id_svg in infosSvg:
             if not dernier or infosSvg[id_svg]["dateSvg"] > infosSvg[dernier]["dateSvg"]:
             if not dernier or infosSvg[id_svg]["dateSvg"] > infosSvg[dernier]["dateSvg"]:
@@ -128,18 +112,11 @@ class DMonde(QMainWindow):
         if dernier:
         if dernier:
             self.chargerPlateau(dernier)
             self.chargerPlateau(dernier)
                                    
                                    
-    def sauverPlateau(self):
-        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
-        if self.plateau.id in afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie)):
-            idPlateau = self.plateau.id
-        else:   
-            idPlateau = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
-
-        enregistrerUnique(self.plateau, "parties\\{}\\svg\\{}.p".format(self.partie, idPlateau))
-        infos = {"nom": self.plateau.nom, "chapitre": self.plateau.chapitre, "dateCreation":self.plateau.dateCreation, "dateSvg":self.plateau.dateSvg, \
+    def enregistrerPlateau(self):
+        self.plateau.enregistrer("cbt")
+        infos = {"nom": self.plateau.nom(), "chapitre": self.plateau.chapitre, "dateCreation":self.plateau.dateCreation, "dateSvg":self.plateau.dateSvg, \
                  "public": self.plateau.public, "enCours": self.plateau.enCours}
                  "public": self.plateau.public, "enCours": self.plateau.enCours}
-        enregistrer(str(idPlateau), infos, "parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
-        QApplication.restoreOverrideCursor()
+        enregistrer(self.plateau.idM(), infos, os.path.join(rep("cbt"), "infos_sauvegarde"))
     
     
     def fermerPlateau(self):
     def fermerPlateau(self):
         self.plateau.fermer()
         self.plateau.fermer()
@@ -153,29 +130,30 @@ class DMonde(QMainWindow):
         #on parcourt les fichiers de sauvegarde
         #on parcourt les fichiers de sauvegarde
         f = []
         f = []
         lstFichiersSvg = []
         lstFichiersSvg = []
-        for (dirpath, dirnames, filenames) in os.walk("parties\\{}\\svg\\".format(self.partie)):
+        for (dirpath, dirnames, filenames) in os.walk(rep("cbt")):
             f.extend(filenames)
             f.extend(filenames)
             break
             break
         for fichier in f:
         for fichier in f:
             fileName, fileExtension = os.path.splitext(fichier)
             fileName, fileExtension = os.path.splitext(fichier)
-            if fileExtension == ".p":
+            if fileExtension == ".dm":
                 lstFichiersSvg.append(fileName)
                 lstFichiersSvg.append(fileName)
       
       
         #on verifie leur presence dans le fichier 'infos_sauvegarde'
         #on verifie leur presence dans le fichier 'infos_sauvegarde'
-        infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
+        infosSvg = afficheSvg(os.path.join(rep("cbt"), "infos_sauvegarde"))
         index = len(infosSvg)
         index = len(infosSvg)
 
 
         #on ajoute les sauvegardes manquantes si besoin
         #on ajoute les sauvegardes manquantes si besoin
         for fichier in lstFichiersSvg:
         for fichier in lstFichiersSvg:
             if not fichier in infosSvg:
             if not fichier in infosSvg:
-                plateau = chargerUnique("parties\\{}\\svg\\{}.p".format(self.partie, fichier))
-                enregistrer(fichier, {"nom": plateau.nom, "chapitre": plateau.chapitre, "dateCreation":plateau.dateCreation, "dateSvg":plateau.dateSvg, \
+                plateau = chargerUnique(os.path.join(rep("cbt"), "{}.dm".format(fichier)))
+                enregistrer(fichier, {"nom": plateau.nom(), "chapitre": plateau.chapitre, "dateCreation":plateau.dateCreation, "dateSvg":plateau.dateSvg, \
                                       "public": plateau.public, "enCours": plateau.enCours}, "svg\\infos_sauvegarde")
                                       "public": plateau.public, "enCours": plateau.enCours}, "svg\\infos_sauvegarde")
-                index += 1       
+                index += 1     
+                  
         #on supprime ceux qui ne sont plus trouves
         #on supprime ceux qui ne sont plus trouves
         for fichier in infosSvg:
         for fichier in infosSvg:
             if not fichier in lstFichiersSvg:
             if not fichier in lstFichiersSvg:
-                supprSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie), fichier)
+                supprSvg(os.path.join(rep("cbt"), "infos_sauvegarde"), fichier)
 
 
 
 
     ########## apparence de l'onglet plateau
     ########## apparence de l'onglet plateau
@@ -215,47 +193,46 @@ class DMonde(QMainWindow):
 
 
     ########## onglet groupe
     ########## onglet groupe
     def chargerListePj(self):
     def chargerListePj(self):
-        listePj = chargerUnique("parties\\{}\\groupe".format(self.partie))
-        if not listePj: listePj = []
+        for attributsFichier in os.walk(rep("grp")):
+            for f in attributsFichier[2]:
+                pj = chargerMat(os.path.join(attributsFichier[0], f))
+                self.pjAjouterAListe(pj)
         self.ui.grp_deroulement_layout.setAlignment(Qt.AlignTop)
         self.ui.grp_deroulement_layout.setAlignment(Qt.AlignTop)
-        
-        for pj in listePj:
-            self.pjAjouterAListe(pj)
 
 
     def pjAjouterAListe(self, pj = None):
     def pjAjouterAListe(self, pj = None):
         colonne = (self._compteurPj % 3) * 2
         colonne = (self._compteurPj % 3) * 2
         ligne = int(self._compteurPj / 3)
         ligne = int(self._compteurPj / 3)
         self._compteurPj += 1
         self._compteurPj += 1
+        
         panneau = FramePj(self._compteurPj)
         panneau = FramePj(self._compteurPj)
         if pj:
         if pj:
             panneau.chargerPj(pj)
             panneau.chargerPj(pj)
         panneau.setObjectName(QString("pj_panneau_{}".format(self._compteurPj)))
         panneau.setObjectName(QString("pj_panneau_{}".format(self._compteurPj)))
         self.connect(panneau, SIGNAL("pjModifie(int)"), self.pjEnregistrer)
         self.connect(panneau, SIGNAL("pjModifie(int)"), self.pjEnregistrer)
         self.ui.grp_deroulement_layout.addWidget(panneau, ligne, colonne)
         self.ui.grp_deroulement_layout.addWidget(panneau, ligne, colonne)
+        
         ## pour l'espacement entre les panneaux
         ## pour l'espacement entre les panneaux
         w = QWidget()
         w = QWidget()
         self.ui.grp_deroulement_layout.addWidget(w, ligne, colonne + 1)
         self.ui.grp_deroulement_layout.addWidget(w, ligne, colonne + 1)
 
 
     def pjSupprimer(self, index):
     def pjSupprimer(self, index):
         panneau = self.findChild(QFrame, "pj_panneau_{}".format(index))
         panneau = self.findChild(QFrame, "pj_panneau_{}".format(index))
+        pj = panneau.pj()
+        supprimerMat(pj.idM(), "grp")
         self.ui.grp_deroulement_layout.removeWidget(panneau)
         self.ui.grp_deroulement_layout.removeWidget(panneau)
 
 
     def nouveauPj(self):
     def nouveauPj(self):
-        self.editionPj = EcranEditionCombattant()
-        self.editionPj.setAttribute(Qt.WA_DeleteOnClose)
-        self.editionPj.exec_()
-        pj = self.editionPj.combattant
+        fen = EcranEditionCombattant()
+        fen.exec_()
+        pj = fen.combattant()
+        del fen
+        pj.enregistrer("grp")
         self.pjAjouterAListe(pj)
         self.pjAjouterAListe(pj)
-        self.pjEnregistrer(self._compteurPj)
 
 
     def pjEnregistrer(self, idPj):
     def pjEnregistrer(self, idPj):
-        listePj = chargerUnique("parties\\{}\\groupe".format(self.partie))
-        if not listePj: listePj = []
         panneau = self.findChild(QFrame, "pj_panneau_{}".format(idPj))
         panneau = self.findChild(QFrame, "pj_panneau_{}".format(idPj))
         pj = panneau.pj()
         pj = panneau.pj()
-        listePj.append(pj)
-        enregistrerUnique(listePj, "parties\\{}\\groupe".format(self.partie))
-
+        pj.enregistrer("grp")
 
 
     def resizeEvent(self, event):
     def resizeEvent(self, event):
         val = (self.ui.dm_panneauCentre.width() - 20) / 3
         val = (self.ui.dm_panneauCentre.width() - 20) / 3
@@ -263,12 +240,16 @@ class DMonde(QMainWindow):
         
         
         
         
 if __name__ == "__main__":
 if __name__ == "__main__":
-    app = QApplication(argv)
+    s = Session()
+    arg = ["DMonde", s.idS()]
+    app = QApplication(arg)
     #settrace(trace_calls)
     #settrace(trace_calls)
     dm = DMonde()
     dm = DMonde()
     dm.show()
     dm.show()
     r = app.exec_()
     r = app.exec_()
+    s.fin()
     exit(r)
     exit(r)
+    
    
    
 
 
 
 

+ 2 - 2
lib/Actions.py

@@ -157,7 +157,7 @@ class Deplacement(Action):
                 super(Deplacement, self).valider()
                 super(Deplacement, self).valider()
 
 
     def estValide(self):
     def estValide(self):
-        return len(self._chemin)>0
+        return len(self._chemin) > 0
 
 
     def majCoordCible(self, coord):
     def majCoordCible(self, coord):
         if coord != self.coordActeur():
         if coord != self.coordActeur():
@@ -177,7 +177,7 @@ class Deplacement(Action):
             self._chercheurChemin.arreter()
             self._chercheurChemin.arreter()
             self._chercheurChemin = None
             self._chercheurChemin = None
             
             
-        if self.plateau.cases[self._coordCible].terrain.franchissable and self.plateau.cases[self._coordCible].occupant(None, Combattant) == None:
+        if self.plateau.cases[self._coordCible].terrain.franchissable and not self.plateau.cases[self._coordCible].occupeeParCombattant():
             self._chercheurChemin = AEtoile.Chemin(self.plateau, self.coordActeur(), self._coordCible, self.acteur().z, self._zCible)
             self._chercheurChemin = AEtoile.Chemin(self.plateau, self.coordActeur(), self._coordCible, self.acteur().z, self._zCible)
             self._chemin = self._chercheurChemin.liste()
             self._chemin = self._chercheurChemin.liste()
         self.afficherCibles(True)        
         self.afficherCibles(True)        

+ 20 - 9
lib/Cache.py

@@ -1,29 +1,38 @@
 #from __future__ import unicode_literals
 #from __future__ import unicode_literals
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
-from PyQt4.QtCore import QString, QPointF, Qt
+from PyQt4.QtCore import QString, Qt
 from PyQt4.QtGui import QGraphicsTextItem, QFont, QColor, QCursor
 from PyQt4.QtGui import QGraphicsTextItem, QFont, QColor, QCursor
-from commun import dmConfirmer
+from dialogues import dmConfirmer
 
 
 
 
-class Cache():
+class Cache(object):
     """cache place sur le plateau"""
     """cache place sur le plateau"""
-    def __init__(self, plateau, idCache, parent=None):
-        self.plateau = plateau
+    def __init__(self, idCache, parent=None):
         self._idCache = idCache
         self._idCache = idCache
         self._nom = ""
         self._nom = ""
         self.etiquette = None
         self.etiquette = None
         self._listeCases = []
         self._listeCases = []
 
 
+    def __getstate__(self):
+        state = {key:value for key, value in self.__dict__.items() if not key in ["plateau", "etiquette"]}
+        return (state)
+
+    def __setstate__(self, state):
+        self.__dict__ = state
+        
     def nom(self):
     def nom(self):
         return self._nom
         return self._nom
 
 
     def listeCases(self):
     def listeCases(self):
         return self._listeCases
         return self._listeCases
 
 
-    def creer(self, listeCases, nom):
+    def creer(self, plateau, listeCases, nom):
         self._nom = nom
         self._nom = nom
         self._listeCases = listeCases
         self._listeCases = listeCases
+        self.ajouter(plateau)
 
 
+    def ajouter(self, plateau):
+        self.plateau = plateau
         self.plateau.caches[self._idCache] = self
         self.plateau.caches[self._idCache] = self
         
         
         for coord in self._listeCases:
         for coord in self._listeCases:
@@ -32,10 +41,12 @@ class Cache():
         for idCombattant in self.plateau.combattants:
         for idCombattant in self.plateau.combattants:
             if self.plateau.combattants[idCombattant].position in self._listeCases:
             if self.plateau.combattants[idCombattant].position in self._listeCases:
                 self.plateau.combattants[idCombattant].cacher(self._idCache)
                 self.plateau.combattants[idCombattant].cacher(self._idCache)
-            
+        
+        self.creerEtiquette()            
+
+    def creerEtiquette(self):
         self.etiquette = EtiquetteCache(self)
         self.etiquette = EtiquetteCache(self)
-        self.etiquette.creer()
-                    
+        self.etiquette.creer()        
 
 
     def retirer(self):
     def retirer(self):
         """retire le cache du plateau apres confirmation"""
         """retire le cache du plateau apres confirmation"""

+ 8 - 3
lib/Case.py

@@ -4,7 +4,7 @@ from __future__ import division
 
 
 from PyQt4.QtCore import Qt, SIGNAL, QPointF, QString, QRectF
 from PyQt4.QtCore import Qt, SIGNAL, QPointF, QString, QRectF
 from PyQt4.QtGui import QGraphicsPolygonItem, QColor, QGraphicsItem, QPolygonF, \
 from PyQt4.QtGui import QGraphicsPolygonItem, QColor, QGraphicsItem, QPolygonF, \
-    QGraphicsSimpleTextItem, QBrush, QImage, QPen, QRadialGradient, QFont, qRed, \
+    QGraphicsSimpleTextItem, QBrush, QPen, QRadialGradient, QFont, qRed, \
     qGreen, qBlue, QGraphicsEllipseItem, QGraphicsTextItem, QTextBlockFormat, \
     qGreen, qBlue, QGraphicsEllipseItem, QGraphicsTextItem, QTextBlockFormat, \
     QTextCursor
     QTextCursor
 
 
@@ -15,8 +15,6 @@ from Combattant import Combattant
 from Terrain import Terrain
 from Terrain import Terrain
 
 
 
 
-# from Combattant import Combattant
-# from Decor import Decor
 class Case(QGraphicsPolygonItem):
 class Case(QGraphicsPolygonItem):
     """objet graphique representant une case du plateau"""
     """objet graphique representant une case du plateau"""
     def __init__(self, plateau, parent=None):
     def __init__(self, plateau, parent=None):
@@ -235,6 +233,12 @@ class Case(QGraphicsPolygonItem):
             if not isinstance(retour, classe): retour = None        
             if not isinstance(retour, classe): retour = None        
         return retour                          
         return retour                          
 
 
+    def occupeeParCombattant(self):
+        """la case est occupee par un combattant - on ne peut pas s'y deplacer"""
+        for idPion in self.occupation.values():
+            if idPion < 10000: return True
+        return False
+
     def estFranchissable(self, zAbs = None):
     def estFranchissable(self, zAbs = None):
         """a l'altitude absolue demandee, 
         """a l'altitude absolue demandee, 
         la case est-elle franchissable ** pour une ligne de mire **"""
         la case est-elle franchissable ** pour une ligne de mire **"""
@@ -314,6 +318,7 @@ class Case(QGraphicsPolygonItem):
 
 
             self.effetActif = effet
             self.effetActif = effet
         else:
         else:
+            self.effetActif = ""
             self.polygoneEffet.setVisible(False)              
             self.polygoneEffet.setVisible(False)              
 
 
     def majAffichageSpecial(self, affichage=""):
     def majAffichageSpecial(self, affichage=""):

+ 2 - 1
lib/Decor.py

@@ -12,8 +12,9 @@ class Decor(Pion, Materiel):
         self.numero = -1
         self.numero = -1
         self.escalade = False            #peut etre escalade
         self.escalade = False            #peut etre escalade
         self.brule = False               #peut prendre feu
         self.brule = False               #peut prendre feu
+        self.hauteurMax = False          #la hauteur doit etre calculee pour atteindre le plafond (s'il existe)
         self.inventaire = []
         self.inventaire = []
-        self.notes = ""
+        self.details = {}
 
 
     def ajouterAuPlateau(self, plateau):
     def ajouterAuPlateau(self, plateau):
         self.plateau = plateau
         self.plateau = plateau

+ 18 - 14
lib/EcranChargerPlateau.py

@@ -1,14 +1,15 @@
 #from __future__ import unicode_literals
 #from __future__ import unicode_literals
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
-from __future__ import division
-from time import strftime, localtime
 import os
 import os
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
+from time import strftime, localtime
 
 
+from PyQt4.QtCore import SIGNAL, QString
+from PyQt4.QtGui import QDialog, QMessageBox, QIcon, QTableWidgetItem
+from lib.commun import rep
+from lib.outilsSvg import supprSvg, afficheSvg
+from mat import supprimerMat
 from ui.ecran_chargerPlateau import Ui_chp_fenetre
 from ui.ecran_chargerPlateau import Ui_chp_fenetre
 
 
-from outilsSvg import *
 
 
 class EcranChargerPlateau(QDialog):
 class EcranChargerPlateau(QDialog):
     """interface de creation/chargement de plateau"""
     """interface de creation/chargement de plateau"""
@@ -16,6 +17,7 @@ class EcranChargerPlateau(QDialog):
         """initialisation de la fenetre"""
         """initialisation de la fenetre"""
         super (EcranChargerPlateau, self).__init__()
         super (EcranChargerPlateau, self).__init__()
         self.fenetre = fenetrePrincipale
         self.fenetre = fenetrePrincipale
+        self._resultat = None
         self.createWidgets()
         self.createWidgets()
         self.majAffichage()
         self.majAffichage()
         
         
@@ -26,29 +28,31 @@ class EcranChargerPlateau(QDialog):
         self.ui.setupUi(self)
         self.ui.setupUi(self)
         self.majListeChargement()
         self.majListeChargement()
         self.connect(self.ui.chp_supprimer, SIGNAL("clicked()"), self.supprimerPlateau)
         self.connect(self.ui.chp_supprimer, SIGNAL("clicked()"), self.supprimerPlateau)
-        self.connect(self.ui.chp_ok, SIGNAL("clicked()"), self.charger)
+        self.connect(self.ui.chp_ok, SIGNAL("clicked()"), self.ok)
         self.connect(self.ui.chp_chapitre, SIGNAL("valueChanged(int)"), self.majListeChargement)
         self.connect(self.ui.chp_chapitre, SIGNAL("valueChanged(int)"), self.majListeChargement)
         self.connect(self.ui.chp_toutAfficher, SIGNAL("stateChanged(int)"), self.majListeChargement)
         self.connect(self.ui.chp_toutAfficher, SIGNAL("stateChanged(int)"), self.majListeChargement)
         
         
         self.connect(self.ui.chp_liste, SIGNAL("cellClicked(int,int)"), self.focusBoutonCharger)
         self.connect(self.ui.chp_liste, SIGNAL("cellClicked(int,int)"), self.focusBoutonCharger)
         self.connect(self.ui.chp_liste, SIGNAL("cellClicked(int,int)"), self.majAffichage)
         self.connect(self.ui.chp_liste, SIGNAL("cellClicked(int,int)"), self.majAffichage)
-        self.connect(self.ui.chp_liste, SIGNAL("cellDoubleClicked(int,int)"), self.charger)
+        self.connect(self.ui.chp_liste, SIGNAL("cellDoubleClicked(int,int)"), self.ok)
 
 
-    def charger(self):
+    def ok(self):
         """charge le plateau selectionne"""
         """charge le plateau selectionne"""
-        index = self.ui.chp_liste.texte(self.ui.chp_liste.currentRow(), 0)
-        self.fenetre.chargerPlateau(index)
+        self._resultat = self.ui.chp_liste.texte(self.ui.chp_liste.currentRow(), 0)
         self.done(1)
         self.done(1)
             
             
+    def resultat(self):
+        return self._resultat
+            
     def supprimerPlateau(self):
     def supprimerPlateau(self):
         """supprime le plateau selectionne"""
         """supprime le plateau selectionne"""
         reponse = QMessageBox.question(self, 'Avertissement',
         reponse = QMessageBox.question(self, 'Avertissement',
                                            QString().fromUtf8("Etes-vous sûr de vouloir supprimer ce plateau?"), QMessageBox.Yes | 
                                            QString().fromUtf8("Etes-vous sûr de vouloir supprimer ce plateau?"), QMessageBox.Yes | 
                                            QMessageBox.No, QMessageBox.No)
                                            QMessageBox.No, QMessageBox.No)
         if reponse == QMessageBox.Yes:       
         if reponse == QMessageBox.Yes:       
-            index = self.ui.chp_liste.texte(self.ui.chp_liste.currentRow(), 0)
-            os.remove("parties\\{}\\svg\\{}.p".format(self.fenetre.partie, index))
-            supprSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.fenetre.partie), index)
+            idM = self.ui.chp_liste.texte(self.ui.chp_liste.currentRow(), 0)
+            supprimerMat(idM, "cbt")
+            supprSvg(os.path.join(rep("cbt"), "infos_sauvegarde"), idM)
             self.majListeChargement()
             self.majListeChargement()
 
 
     def majAffichage(self):
     def majAffichage(self):
@@ -69,7 +73,7 @@ class EcranChargerPlateau(QDialog):
 
 
         self.ui.chp_liste.vider()
         self.ui.chp_liste.vider()
         
         
-        infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.fenetre.partie))
+        infosSvg = afficheSvg(os.path.join(rep("cbt"), "infos_sauvegarde"))
         
         
         for id_svg in infosSvg:
         for id_svg in infosSvg:
             if infosSvg[id_svg]["chapitre"] == str(self.ui.chp_chapitre.value()) or bool(self.ui.chp_toutAfficher.checkState()) == True:
             if infosSvg[id_svg]["chapitre"] == str(self.ui.chp_chapitre.value()) or bool(self.ui.chp_toutAfficher.checkState()) == True:

+ 7 - 7
lib/EcranCreerPlateau.py

@@ -1,12 +1,12 @@
 #from __future__ import unicode_literals
 #from __future__ import unicode_literals
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
-from __future__ import division
 
 
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from outilsSvg import afficheSvg
+from PyQt4.QtCore import Qt, SIGNAL
+from PyQt4.QtGui import QDialog, QColor, QMessageBox, QColorDialog
+
 from ui.ecran_creerPlateau import Ui_crp_fenetre
 from ui.ecran_creerPlateau import Ui_crp_fenetre
 
 
+
 class EcranCreerPlateau(QDialog):
 class EcranCreerPlateau(QDialog):
     """interface de creation/chargement de plateau"""
     """interface de creation/chargement de plateau"""
     def __init__(self, parent=None):
     def __init__(self, parent=None):
@@ -36,7 +36,7 @@ class EcranCreerPlateau(QDialog):
 
 
     def afficher(self, plateau):
     def afficher(self, plateau):
         """affiche la fenetre avec le plateau en parametre, ou un nouveau plateau sinon"""
         """affiche la fenetre avec le plateau en parametre, ou un nouveau plateau sinon"""
-        self.ui.crp_nom.majTexte(plateau.nom)
+        self.ui.crp_nom.majTexte(plateau.nom())
         self.ui.crp_chapitre.setValue(int(plateau.chapitre))
         self.ui.crp_chapitre.setValue(int(plateau.chapitre))
         self.ui.crp_description.majTexte(plateau.description)
         self.ui.crp_description.majTexte(plateau.description)
         self.ui.crp_presentation.majTexte(plateau.presentation)
         self.ui.crp_presentation.majTexte(plateau.presentation)
@@ -56,10 +56,10 @@ class EcranCreerPlateau(QDialog):
 
 
     def resultat(self):
     def resultat(self):
         """renvoie le plateau ainsi parametre"""
         """renvoie le plateau ainsi parametre"""
-        self._retour.nom = self.ui.crp_nom.texte()
+        self._retour.majNom(self.ui.crp_nom.texte())
         self._retour.chapitre = str(self.ui.crp_chapitre.value())
         self._retour.chapitre = str(self.ui.crp_chapitre.value())
         self._retour.description = self.ui.crp_description.texte()
         self._retour.description = self.ui.crp_description.texte()
-        self._retour.presentation = self.ui.crp_nom.texte()
+        self._retour.presentation = self.ui.crp_presentation.texte()
         self._retour.couleurInit = self.couleur
         self._retour.couleurInit = self.couleur
         
         
         if self.ui.crp_formes.isEnabled():
         if self.ui.crp_formes.isEnabled():

+ 17 - 1
lib/EcranEditionCombattant.py

@@ -13,6 +13,7 @@ from Combattant import Combattant
 from EcranEditionObjet import EcranEditionObjet
 from EcranEditionObjet import EcranEditionObjet
 from Objet import Objet
 from Objet import Objet
 from VueEditionForme import VueEditionForme
 from VueEditionForme import VueEditionForme
+from dialogues import dmMessage
 from frameAttaque import FrameAttaque
 from frameAttaque import FrameAttaque
 import regles
 import regles
 from rsc import selectionImage, RImage
 from rsc import selectionImage, RImage
@@ -53,6 +54,7 @@ class EcranEditionCombattant(QDialog):
         
         
         self.connect(self.ui.edc_nom, SIGNAL("textEdited(QString)"), self.majActivationEnregistrer)
         self.connect(self.ui.edc_nom, SIGNAL("textEdited(QString)"), self.majActivationEnregistrer)
         self.connect(self.ui.edc_nom, SIGNAL("textEdited(QString)"), self.majEtiquetteVueForme)
         self.connect(self.ui.edc_nom, SIGNAL("textEdited(QString)"), self.majEtiquetteVueForme)
+        self.connect(self.ui.edc_aideForme, SIGNAL("clicked()"), self.afficherAideForme)
         self.connect(self.ui.edc_enregistrer, SIGNAL("clicked()"), self.enregistrer)
         self.connect(self.ui.edc_enregistrer, SIGNAL("clicked()"), self.enregistrer)
         self.connect(self.ui.edc_annuler, SIGNAL("clicked()"), self.annuler)
         self.connect(self.ui.edc_annuler, SIGNAL("clicked()"), self.annuler)
         self.connect(self.ui.edc_casesHexa, SIGNAL("clicked()"), self.majFormeCases)
         self.connect(self.ui.edc_casesHexa, SIGNAL("clicked()"), self.majFormeCases)
@@ -67,6 +69,9 @@ class EcranEditionCombattant(QDialog):
         self.connect(self.ui.edc_filtreTypeObjet, SIGNAL("currentChanged(int)"), self.filtrerInventaire)
         self.connect(self.ui.edc_filtreTypeObjet, SIGNAL("currentChanged(int)"), self.filtrerInventaire)
         self.ui.edc_filtreTypeObjet.stackUnder(self.ui.edc_listeInventaire)
         self.ui.edc_filtreTypeObjet.stackUnder(self.ui.edc_listeInventaire)
 
 
+    def mat(self):
+        """retourne le materiel de la fenetre"""
+        return self.combattant()
 
 
     def layoutAtt(self):
     def layoutAtt(self):
         """retourne le layout des attaques"""
         """retourne le layout des attaques"""
@@ -81,6 +86,7 @@ class EcranEditionCombattant(QDialog):
 
 
     def allerAPage(self, index):
     def allerAPage(self, index):
         self.ui.edc_menu.setCurrentCell(index, 0)
         self.ui.edc_menu.setCurrentCell(index, 0)
+        self.ui.edc_menu.setCurrentCell(index, 1)
         self.ui.edc_pages.setCurrentIndex(index)        
         self.ui.edc_pages.setCurrentIndex(index)        
 
 
     def ouverture(self):
     def ouverture(self):
@@ -170,6 +176,17 @@ class EcranEditionCombattant(QDialog):
             self._combattant.couleur = couleur
             self._combattant.couleur = couleur
             self.vueForme.majCouleur(couleur)
             self.vueForme.majCouleur(couleur)
 
 
+    def afficherAideForme(self):
+        msg = "Sur l'écran ci-contre, vous pouvez éditer la forme et l'apparence de votre pion. Vous pouvez: \n\n" \
+                 "Choisir la couleur du pion \n" \
+                 "Choisir une image (qui remplacera alors le logo sur le pion) \n" \
+                 "Deplacer l'etiquette et l'image sur le pion en cliquant dessus \n" \
+                 "Faire pivoter l'image avec [FLECHE HAUT] et [FLECHE BAS] \n" \
+                 "Modifier la taille de l'image avec [FLECHE GAUCHE] et [FLECHE DROITE] \n" \
+                 "Activer desactiver l'etiquette en gras avec [G] \n" \
+                 "Modifier la taille de la police avec [FLECHE HAUT] et [FLECHE BAS]"
+        dmMessage(msg)         
+
     #### page attributs
     #### page attributs
     def construireListeAttributs(self):
     def construireListeAttributs(self):
         """construit les champs d'attributs"""
         """construit les champs d'attributs"""
@@ -355,7 +372,6 @@ if __name__ == "__main__":
     ecran = EcranEditionCombattant()
     ecran = EcranEditionCombattant()
     ecran.show()
     ecran.show()
     r = app.exec_()
     r = app.exec_()
-    ecran.combattant().enregistrer()
     exit(r)      
     exit(r)      
 
 
 
 

+ 15 - 5
lib/EcranEditionDecor.py

@@ -23,7 +23,6 @@ class EcranEditionDecor(QDialog):
         self.createWidgets()
         self.createWidgets()
         
         
         self.decor = Decor() if not decor else decor
         self.decor = Decor() if not decor else decor
-        self.modeCreation = (decor == None)
         self.ouverture()
         self.ouverture()
         self.allerAPage(pageInitiale)
         self.allerAPage(pageInitiale)
 
 
@@ -54,6 +53,10 @@ class EcranEditionDecor(QDialog):
         self.connect(self.ui.edd_filtreTypeObjet, SIGNAL("currentChanged(int)"), self.filtrerInventaire)
         self.connect(self.ui.edd_filtreTypeObjet, SIGNAL("currentChanged(int)"), self.filtrerInventaire)
         self.ui.edd_filtreTypeObjet.stackUnder(self.ui.edd_listeInventaire)
         self.ui.edd_filtreTypeObjet.stackUnder(self.ui.edd_listeInventaire)
 
 
+    def mat(self):
+        """retourne le materiel de la fenetre"""
+        return self.decor
+
     def vueGraphique(self):
     def vueGraphique(self):
         return self.ui.edd_vueForme
         return self.ui.edd_vueForme
 
 
@@ -71,13 +74,14 @@ class EcranEditionDecor(QDialog):
             self.ui.edd_logo.majTexte("Choisissez \nun fichier\nimage")
             self.ui.edd_logo.majTexte("Choisissez \nun fichier\nimage")
 
 
         self.vueForme.creer(self.formeCases())
         self.vueForme.creer(self.formeCases())
-        self.vueForme.autoriserModifForme(self.modeCreation)
+        self.vueForme.autoriserModifForme(True)
         self.vueForme.majCouleur(self.decor.couleur)
         self.vueForme.majCouleur(self.decor.couleur)
         self.vueForme.chargerFormeDef(self.decor.formeDef[self.formeCases()])
         self.vueForme.chargerFormeDef(self.decor.formeDef[self.formeCases()])
         self.vueForme.chargerImageDef(self.decor.img)
         self.vueForme.chargerImageDef(self.decor.img)
 
 
         #page deplacements
         #page deplacements
         self.ui.edd_taille.setValue(self.decor.hauteur)
         self.ui.edd_taille.setValue(self.decor.hauteur)
+        self.ui.edd_hauteurPlafond.setChecked(self.decor.hauteurMax)
         self.ui.edd_escalade.setChecked(self.decor.escalade)
         self.ui.edd_escalade.setChecked(self.decor.escalade)
         self.ui.edd_brule.setChecked(self.decor.brule)
         self.ui.edd_brule.setChecked(self.decor.brule)
         
         
@@ -85,7 +89,9 @@ class EcranEditionDecor(QDialog):
         self.ui.edd_listeInventaire.charger(self.decor.inventaire)
         self.ui.edd_listeInventaire.charger(self.decor.inventaire)
 
 
         #page_notes
         #page_notes
-        self.ui.edd_notes.setText(QString.fromUtf8(self.decor.notes))
+        if "dim" in self.decor.details: self.ui.edd_detail_dim.majTexte(self.decor.details["dim"])
+        if "poids" in self.decor.details: self.ui.edd_detail_poids.majTexte(self.decor.details["poids"])
+        if "notes" in self.decor.details: self.ui.edd_notes.majTexte(self.decor.details["notes"])
 
 
         #autre
         #autre
         self.majActivationEnregistrer()
         self.majActivationEnregistrer()
@@ -180,7 +186,8 @@ class EcranEditionDecor(QDialog):
         """enregistre le terrain cree/edite"""
         """enregistre le terrain cree/edite"""
         #page nom
         #page nom
         self.decor.majNom(self.ui.edd_nom.texte())
         self.decor.majNom(self.ui.edd_nom.texte())
-        self.decor.logo = self.ui.edd_logo.image()
+        if self.ui.edd_logo.image():
+            self.decor.logo = self.ui.edd_logo.image()
         
         
         self.decor.formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef()
         self.decor.formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef()
         self.decor.img = self.vueForme.imageDef()
         self.decor.img = self.vueForme.imageDef()
@@ -188,6 +195,7 @@ class EcranEditionDecor(QDialog):
 
 
         #page dep
         #page dep
         self.decor.hauteur = self.ui.edd_taille.value()
         self.decor.hauteur = self.ui.edd_taille.value()
+        self.decor.hauteurMax = self.ui.edd_hauteurPlafond.isChecked()
         self.decor.escalade = self.ui.edd_escalade.isChecked()
         self.decor.escalade = self.ui.edd_escalade.isChecked()
         self.decor.brule = self.ui.edd_brule.isChecked()
         self.decor.brule = self.ui.edd_brule.isChecked()
 
 
@@ -195,7 +203,9 @@ class EcranEditionDecor(QDialog):
         self.decor.inventaire = self.ui.edd_listeInventaire.inventaire()
         self.decor.inventaire = self.ui.edd_listeInventaire.inventaire()
 
 
         #page notes
         #page notes
-        self.decor.notes = str(self.ui.edd_notes.toPlainText().toUtf8())
+        self.decor.details["dim"] = self.ui.edd_detail_dim.texte()
+        self.decor.details["poids"] = self.ui.edd_detail_poids.texte()
+        self.decor.details["notes"] = self.ui.edd_notes.texte()
 
 
         self.done(1)
         self.done(1)
 
 

+ 5 - 1
lib/EcranEditionTerrain.py

@@ -32,7 +32,11 @@ class EcranEditionTerrain(QDialog):
         self.connect(self.ui.et_nom, SIGNAL("textEdited(QString)"), self.majAffichage)
         self.connect(self.ui.et_nom, SIGNAL("textEdited(QString)"), self.majAffichage)
         self.connect(self.ui.et_selectionCouleur, SIGNAL("clicked()"), self.selectionCouleur)
         self.connect(self.ui.et_selectionCouleur, SIGNAL("clicked()"), self.selectionCouleur)
         self.connect(self.ui.et_selectionFichier, SIGNAL("clicked()"), self.selectionFichier)
         self.connect(self.ui.et_selectionFichier, SIGNAL("clicked()"), self.selectionFichier)
-        
+
+    def mat(self):
+        """retourne le materiel de la fenetre"""
+        return self.terrain
+  
     def accesEdition(self):
     def accesEdition(self):
         """ouverture en mode edition"""
         """ouverture en mode edition"""
         self.ui.et_nom.majTexte(self.terrain.nom())
         self.ui.et_nom.majTexte(self.terrain.nom())

+ 14 - 14
lib/Forme.py

@@ -16,35 +16,35 @@ class Forme():
         """renvoie la liste des cases situees a [distance] cases du centre, dans l'ordre des aiguilles d'une montre"""
         """renvoie la liste des cases situees a [distance] cases du centre, dans l'ordre des aiguilles d'une montre"""
         anneau = {}
         anneau = {}
         if self.formeCases == "H":
         if self.formeCases == "H":
-             anneau[1] = [(0,-1),(1,0),(1,1),(0,1),(-1,1),(-1,0)]
+            anneau[1] = [(0,-1),(1,0),(1,1),(0,1),(-1,1),(-1,0)]
              
              
-             anneau[2] = [(0,-2),(1,-1),(2,-1),(2,0),(2,1),(1,2),(0,2),(-1,2),(-2,1),(-2,0),(-2,-1),(-1,-1)]
+            anneau[2] = [(0,-2),(1,-1),(2,-1),(2,0),(2,1),(1,2),(0,2),(-1,2),(-2,1),(-2,0),(-2,-1),(-1,-1)]
              
              
-             anneau[3] = [(0,-3),(1,-2),(2,-2),(3,-1),(3,0),(3,1),(3,2),(2,2),(1,3), \
+            anneau[3] = [(0,-3),(1,-2),(2,-2),(3,-1),(3,0),(3,1),(3,2),(2,2),(1,3), \
                           (0,3),(-1,3),(-2,2),(-3,2),(-3,1),(-3,0),(-3,-1),(-2,-2),(-1,-2)]
                           (0,3),(-1,3),(-2,2),(-3,2),(-3,1),(-3,0),(-3,-1),(-2,-2),(-1,-2)]
              
              
-             anneau[4] = [(0,-4),(1,-3),(2,-3),(3,-2),(4,-2),(4,-1),(4,0),(4,1),(4,2),(3,3),(2,3),(1,4), \
+            anneau[4] = [(0,-4),(1,-3),(2,-3),(3,-2),(4,-2),(4,-1),(4,0),(4,1),(4,2),(3,3),(2,3),(1,4), \
                           (0,4),(-1,4),(-2,3),(-3,3),(-4,2),(-4,1),(-4,0),(-4,-1),(-4,-2),(-3,-2),(-2,-3),(-1,-3)]
                           (0,4),(-1,4),(-2,3),(-3,3),(-4,2),(-4,1),(-4,0),(-4,-1),(-4,-2),(-3,-2),(-2,-3),(-1,-3)]
              
              
-             anneau[5] = [(0,-5),(1,-4),(2,-4),(3,-3),(4,-3),(5,-2),(5,-1),(5,0),(5,1),(5,2),(5,3),(4,3),(3,4),(2,4),(1,5), \
+            anneau[5] = [(0,-5),(1,-4),(2,-4),(3,-3),(4,-3),(5,-2),(5,-1),(5,0),(5,1),(5,2),(5,3),(4,3),(3,4),(2,4),(1,5), \
                           (0,5),(-1,5),(-2,4),(-3,4),(-4,3),(-5,3),(-5,2),(-5,1),(-5,0),(-5,-1),(-5,-2),(-4,-3),(-3,-3),(-2,-4),(-1,-4)]
                           (0,5),(-1,5),(-2,4),(-3,4),(-4,3),(-5,3),(-5,2),(-5,1),(-5,0),(-5,-1),(-5,-2),(-4,-3),(-3,-3),(-2,-4),(-1,-4)]
              
              
         elif self.formeCases == "C":
         elif self.formeCases == "C":
-             anneau[1] = [(0,-1),(1,-1),(1,0),(1,1),\
+            anneau[1] = [(0,-1),(1,-1),(1,0),(1,1),\
                           (0,1),(-1,1),(-1,0),(-1,-1)]
                           (0,1),(-1,1),(-1,0),(-1,-1)]
-             anneau[2] = [(0,-2),(1,-2),(2,-2),(2,-1),(2,0),(2,1),(2,2),(1,2),\
+            anneau[2] = [(0,-2),(1,-2),(2,-2),(2,-1),(2,0),(2,1),(2,2),(1,2),\
                           (0,2),(-1,2),(-2,2),(-2,1),(-2,0),(-2,-1),(-2,-2),(-1,-2)]
                           (0,2),(-1,2),(-2,2),(-2,1),(-2,0),(-2,-1),(-2,-2),(-1,-2)]
-             anneau[3] = [(0,-3),(1,-3),(2,-3),(3,-3),(3,-2),(3,-1),(3,0),(3,1),(3,2),(3,3),(2,3),(1,3),\
+            anneau[3] = [(0,-3),(1,-3),(2,-3),(3,-3),(3,-2),(3,-1),(3,0),(3,1),(3,2),(3,3),(2,3),(1,3),\
                           (0,3),(-1,3),(-2,3),(-3,3),(-3,2),(-3,1),(-3,0),(-3,-1),(-3,-2),(-3,-3),(-2,-3),(-1,-3)]
                           (0,3),(-1,3),(-2,3),(-3,3),(-3,2),(-3,1),(-3,0),(-3,-1),(-3,-2),(-3,-3),(-2,-3),(-1,-3)]
-             anneau[4] = [(0,-4),(1,-4),(2,-4),(3,-4),(4,-4),(4,-3),(4,-2),(4,-1),(4,0),(4,1),(4,2),(4,3),(4,4),(3,4),(2,4),(1,4),\
+            anneau[4] = [(0,-4),(1,-4),(2,-4),(3,-4),(4,-4),(4,-3),(4,-2),(4,-1),(4,0),(4,1),(4,2),(4,3),(4,4),(3,4),(2,4),(1,4),\
                           (0,4),(-1,4),(-2,4),(-3,4),(-4,4),(-4,3),(-4,2),(-4,1),(-4,0),(-4,-1),(-4,-2),(-4,-3),(-4,-4),(-3,-4),(-2,-4),(-1,-4)]
                           (0,4),(-1,4),(-2,4),(-3,4),(-4,4),(-4,3),(-4,2),(-4,1),(-4,0),(-4,-1),(-4,-2),(-4,-3),(-4,-4),(-3,-4),(-2,-4),(-1,-4)]
-             anneau[5] = [(0,-5),(1,-5),(2,-5),(3,-5),(4,-5),(5,-5),(5,-4),(5,-3),(5,-2),(5,-1),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(4,5),(3,5),(2,5),(1,5),\
+            anneau[5] = [(0,-5),(1,-5),(2,-5),(3,-5),(4,-5),(5,-5),(5,-4),(5,-3),(5,-2),(5,-1),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(4,5),(3,5),(2,5),(1,5),\
                           (0,5),(-1,5),(-2,5),(-3,5),(-4,5),(-5,5),(-5,4),(-5,3),(-5,2),(-5,1),(-5,0),(-5,-1),(-5,-2),(-5,-3),(-5,-4),(-5,-5),(-4,-5),(-3,-5),(-2,-5),(-1,-5)]
                           (0,5),(-1,5),(-2,5),(-3,5),(-4,5),(-5,5),(-5,4),(-5,3),(-5,2),(-5,1),(-5,0),(-5,-1),(-5,-2),(-5,-3),(-5,-4),(-5,-5),(-4,-5),(-3,-5),(-2,-5),(-1,-5)]
              
              
         if distance > 0:
         if distance > 0:
-             retour = anneau[distance]
+            retour = anneau[distance]
         elif distance == 0:
         elif distance == 0:
-             retour = anneau
+            retour = anneau
              
              
         return retour
         return retour
         
         
@@ -60,8 +60,8 @@ class Forme():
         if not coordRelatives in self.formeDef:
         if not coordRelatives in self.formeDef:
             for distance in self.anneau(0):
             for distance in self.anneau(0):
                 if coordRelatives in self.anneau(distance):
                 if coordRelatives in self.anneau(distance):
-                     self.formeDef.append(coordRelatives)
-                     ajoutee = True
+                    self.formeDef.append(coordRelatives)
+                    ajoutee = True
         if not ajoutee:
         if not ajoutee:
             print("case non prise en charge (trop eloignee du centre)")
             print("case non prise en charge (trop eloignee du centre)")
     
     

+ 17 - 15
lib/Modes.py

@@ -5,18 +5,21 @@ entre l'interface (l'utilisateur) et le plateau de combat.
 Un seul mode ne peut etre actif a la fois
 Un seul mode ne peut etre actif a la fois
 Cette classe doit permettre de recevoir les commandes de l'utilisateur
 Cette classe doit permettre de recevoir les commandes de l'utilisateur
 de maniere a produire un resultat unique (cases peintes, pion deplace...)"""
 de maniere a produire un resultat unique (cases peintes, pion deplace...)"""
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from EntreeSortie import EntreeSortie
+
+from PyQt4.QtCore import Qt
+from PyQt4.QtGui import QPixmap, QCursor
+
 import Actions
 import Actions
-import regles
-from Pion import Pion
+from Cache import Cache
 from Combattant import Combattant
 from Combattant import Combattant
 from Decor import Decor
 from Decor import Decor
+from EntreeSortie import EntreeSortie
+from Pion import Pion
+from dialogues import dmSaisie
 import dmK
 import dmK
 from lib.EcranAltitude import EcranAltitude
 from lib.EcranAltitude import EcranAltitude
-from Cache import Cache
-from commun import dmSaisie
+import regles
+
 
 
 class ModeBase(object):
 class ModeBase(object):
     """mode de base: tous les modes heritent de cette classe"""
     """mode de base: tous les modes heritent de cette classe"""
@@ -214,7 +217,7 @@ class MajCases(ModeBaseCp):
 
 
     def desactiver(self):
     def desactiver(self):
         """desactive le mode"""
         """desactive le mode"""
-        self.plateau.pinceau.reinit()
+        if self.plateau.pinceau: self.plateau.pinceau.reinit()
         super(MajCases, self).desactiver()
         super(MajCases, self).desactiver()
 
 
     def majParam(self, param):
     def majParam(self, param):
@@ -300,12 +303,9 @@ class ZonePlacement(ModeBaseCp):
     """mode de definition de la/les zones de placement des joueurs"""
     """mode de definition de la/les zones de placement des joueurs"""
     def __init__(self, plateau):
     def __init__(self, plateau):
         super(ZonePlacement, self).__init__(plateau)
         super(ZonePlacement, self).__init__(plateau)
-        self._sourceCurseur = ":/interface/16/ressource/pinceau.png"
+        self._sourceCurseur = ":/interface/16/ressource/pinceau_16.png"
         self._focus = True
         self._focus = True
 
 
-    def activerCurseur(self):
-        super(ZonePlacement, self).activerCurseur()
-
     def activer(self, param = None):
     def activer(self, param = None):
         self.plateau.pinceau.majForme("rectP")
         self.plateau.pinceau.majForme("rectP")
         self.plateau.pinceau.verrouillerForme(True)
         self.plateau.pinceau.verrouillerForme(True)
@@ -328,6 +328,7 @@ class ZonePlacement(ModeBaseCp):
         if self.plateau.pinceau.estActif():
         if self.plateau.pinceau.estActif():
             if len(self.plateau.pinceau.selection()) > 0:
             if len(self.plateau.pinceau.selection()) > 0:
                 self.plateau.majZonePlacement(self.plateau.pinceau.selection())
                 self.plateau.majZonePlacement(self.plateau.pinceau.selection())
+                self.plateau.activerMode(StandardCp)
         return True        
         return True        
 
 
 class PlacerCaches(ModeBaseCp):
 class PlacerCaches(ModeBaseCp):
@@ -354,11 +355,11 @@ class PlacerCaches(ModeBaseCp):
         if len(self.plateau.caches) > 0:
         if len(self.plateau.caches) > 0:
             idCache = max(self.plateau.caches) + 1
             idCache = max(self.plateau.caches) + 1
         #nom par defaut si besoin
         #nom par defaut si besoin
-        if not len(nom) >0:
+        if not len(nom) > 0:
             nom = "Cache {}".format(idCache + 1)
             nom = "Cache {}".format(idCache + 1)
         #creation du cache    
         #creation du cache    
-        cache = Cache(self.plateau, idCache)
-        cache.creer(listeCases, nom)
+        cache = Cache(idCache)
+        cache.creer(self.plateau, listeCases, nom)
 
 
     def clic_case(self, coord):
     def clic_case(self, coord):
         #on peint la liste des cases qui sera cachee
         #on peint la liste des cases qui sera cachee
@@ -627,6 +628,7 @@ class DeplacementPion(ModeBaseCp):
     
     
     def clic_case(self, coord):
     def clic_case(self, coord):
         accepte = False
         accepte = False
+        if self.plateau.cases[coord].occupeeParCombattant(): return
         if self._num > 0:
         if self._num > 0:
             if self.deplace:
             if self.deplace:
                 if self._num < 10000:
                 if self._num < 10000:

+ 9 - 0
lib/Pinceau.py

@@ -140,6 +140,15 @@ class Pinceau():
 #                 else:
 #                 else:
 #                     select = [coord]
 #                     select = [coord]
                 select = self.selectionLigne(self._coordOrigine, coord)
                 select = self.selectionLigne(self._coordOrigine, coord)
+                #on prend l'epaisseur en compte
+                selectPlus = []
+                for coord in select:
+                    zone = self.plateau.zone(coord, self._epaisseur - 1)
+                    for ajout in zone:
+                        if not ajout in select and not ajout in selectPlus:
+                            selectPlus.append(ajout)
+                select += selectPlus
+
                 for coord in self._selection:
                 for coord in self._selection:
                     if not coord in select:
                     if not coord in select:
                         enMoins.append(coord)
                         enMoins.append(coord)

+ 4 - 4
lib/Pion.py

@@ -16,7 +16,7 @@ class Pion(QGraphicsObject):
         super(Pion, self).__init__()
         super(Pion, self).__init__()
         #caracteristiques du pion
         #caracteristiques du pion
         self.numero = -1
         self.numero = -1
-        self.couleur = QColor()
+        self.couleur = QColor(200, 200, 200)
         self.logo = RImage()
         self.logo = RImage()
         self.img = ImgPion()
         self.img = ImgPion()
         self.etiquette = EtiquettePion()
         self.etiquette = EtiquettePion()
@@ -49,7 +49,7 @@ class Pion(QGraphicsObject):
         self.__dict__ = state
         self.__dict__ = state
         self.pixGraphique = None
         self.pixGraphique = None
         self.etiquetteGraphique = None
         self.etiquetteGraphique = None
-#         super(Pion, self).__init__()
+        super(Pion, self).__init__()
 
 
     def paint(self, painter, option, widget = None):
     def paint(self, painter, option, widget = None):
         """reimplemente de QGraphicsItem: on ne peint pas cet item, seulement ses items enfants"""
         """reimplemente de QGraphicsItem: on ne peint pas cet item, seulement ses items enfants"""
@@ -207,8 +207,8 @@ class Pion(QGraphicsObject):
 ##                deltaY = self.img.dy + 0.5*(self.plateau.hCase - self._h0)
 ##                deltaY = self.img.dy + 0.5*(self.plateau.hCase - self._h0)
                 deltaX = self.img.dx + 0.5*(self.plateau.hCase*1.1544 - self.pixGraphique.pixmap().width())
                 deltaX = self.img.dx + 0.5*(self.plateau.hCase*1.1544 - self.pixGraphique.pixmap().width())
                 deltaY = self.img.dy + 0.5*(self.plateau.hCase - self.pixGraphique.pixmap().height())
                 deltaY = self.img.dy + 0.5*(self.plateau.hCase - self.pixGraphique.pixmap().height())
-                    
-                if self.img.rimage.nom() == self.logo.nom():
+
+                if self.img.rimage.idR() == self.logo.idR():
                     #si l'image est le logo, elle ne doit pas pivoter
                     #si l'image est le logo, elle ne doit pas pivoter
                     self.pixGraphique.setParentItem(self)
                     self.pixGraphique.setParentItem(self)
                 else:
                 else:

+ 104 - 172
lib/Plateau.py

@@ -3,6 +3,7 @@
 from __future__ import division
 from __future__ import division
 
 
 from math import sqrt
 from math import sqrt
+import os
 from time import time
 from time import time
 
 
 from PyQt4.QtCore import Qt, SIGNAL, QPointF, QString, QSize, QLineF
 from PyQt4.QtCore import Qt, SIGNAL, QPointF, QString, QSize, QLineF
@@ -27,26 +28,26 @@ from Pinceau import Pinceau
 from ProjectionDep import ProjectionDep
 from ProjectionDep import ProjectionDep
 from Terrain import Terrain
 from Terrain import Terrain
 import br
 import br
-from outilsSvg import enregistrer, charger, chargerUnique
+from lib.commun import rep, charger
+from lib.gM import GestionMateriel
+from lib.mat import Materiel, chargerMat
+from outilsSvg import chargerUnique
 import regles as regles
 import regles as regles
 
 
 
 
-##from ui.ecran_editionAttaques import Ui_editionAttaques
 m_couleursRapides = [(255,255,255), (200,200,200), (130,130,130), (90,90,90), (15,15,15), \
 m_couleursRapides = [(255,255,255), (200,200,200), (130,130,130), (90,90,90), (15,15,15), \
                    (0,85,0), (170,255,0), (170,255,127), (85,85,0), (85,0,0), (170,85,0), (100,50,0), \
                    (0,85,0), (170,255,0), (170,255,127), (85,85,0), (85,0,0), (170,85,0), (100,50,0), \
                    (255,255,127), (240,80,0), (85,170,255), (85,85,255), (85,0,255), (0,255,255)]
                    (255,255,127), (240,80,0), (85,170,255), (85,85,255), (85,0,255), (0,255,255)]
         
         
-class Plateau(QGraphicsScene):
+class Plateau(QGraphicsScene, Materiel):
     """plateau de jeu contenant les cases, decors et pions"""
     """plateau de jeu contenant les cases, decors et pions"""
     def __init__(self, fenetre, parent=None):
     def __init__(self, fenetre, parent=None):
         super(Plateau, self).__init__()
         super(Plateau, self).__init__()
         #parametres et variables
         #parametres et variables
-
+        self._type = "pl"
         self.fenetre = fenetre
         self.fenetre = fenetre
 
 
-        self.id = ""
         ##partie et infos plateau
         ##partie et infos plateau
-        self.nom = ""
         self.chapitre = 0
         self.chapitre = 0
         self.tour = 0
         self.tour = 0
         
         
@@ -63,9 +64,11 @@ class Plateau(QGraphicsScene):
         self.nbCasesY = 0
         self.nbCasesY = 0
         self.hCase = 0
         self.hCase = 0
         self.couleurInit = QColor(0, 255, 0, 80)
         self.couleurInit = QColor(0, 255, 0, 80)
+        self.plafond = None
 
 
         #objets
         #objets
         self.pinceau = Pinceau(self)
         self.pinceau = Pinceau(self)
+        self.gM = GestionMateriel()
         self.cases = {}   #dict des cases du plateau   (coordonnées: case)
         self.cases = {}   #dict des cases du plateau   (coordonnées: case)
         self.combattants = {}   #liste de combattants positionnes sur le plateau
         self.combattants = {}   #liste de combattants positionnes sur le plateau
         self.decors = {}  #liste des decors places sur le plateau
         self.decors = {}  #liste des decors places sur le plateau
@@ -93,8 +96,6 @@ class Plateau(QGraphicsScene):
     def vue(self):
     def vue(self):
         return self.fenetre.ui.cbt_vue
         return self.fenetre.ui.cbt_vue
 
 
-#     def creer(self, idPlateau, nom, chapitre, formeCases, nbCasesX, nbCasesY, \
-#               couleur = QColor(0, 255, 0, 80), description = "", presentation = ""):
     def creer(self):
     def creer(self):
         """cree le plateau"""
         """cree le plateau"""
         self.dateCreation = time()
         self.dateCreation = time()
@@ -126,7 +127,9 @@ class Plateau(QGraphicsScene):
             self.cases[coord].recreer(self)
             self.cases[coord].recreer(self)
 
 
         #recreation des caches
         #recreation des caches
-        self.initListeCaches()
+        for idCache in self.caches:
+            self.caches[idCache].ajouter(self)
+        self.majCaches()
 
 
         #recreation des pions
         #recreation des pions
         for numCombattant in self.combattants:
         for numCombattant in self.combattants:
@@ -145,8 +148,11 @@ class Plateau(QGraphicsScene):
         if len(self.listeCasesZonePlacement) > 0:
         if len(self.listeCasesZonePlacement) > 0:
             self.polygoneZonePlacement = None
             self.polygoneZonePlacement = None
             self.majZonePlacement(self.listeCasesZonePlacement)
             self.majZonePlacement(self.listeCasesZonePlacement)
-
-        self.plateauModeCombat()
+        
+        if self.public:
+            self.plateauModeCombat()
+        else:
+            self.plateauModeCreation()
 
 
     def fermer(self):
     def fermer(self):
         """ferme le plateau 'proprement'"""
         """ferme le plateau 'proprement'"""
@@ -185,7 +191,7 @@ class Plateau(QGraphicsScene):
         self.fenetre.connect(self.fenetre.ui.pi_listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.pi_listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee, Qt.UniqueConnection)
 
 
         self.fenetre.connect(self.fenetre.ui.cp_dialogueCouleurs, SIGNAL("clicked()"), self.modePeintureCase, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_dialogueCouleurs, SIGNAL("clicked()"), self.modePeintureCase, Qt.UniqueConnection)
-        self.fenetre.connect(self.fenetre.ui.cp_pipetteCouleur, SIGNAL("clicked()"), self.modeCopieTerrain, Qt.UniqueConnection)
+
         self.fenetre.connect(self.fenetre.ui.cp_afficherNotes, SIGNAL("clicked()"), self.agrandirNotesMjPlateau, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_afficherNotes, SIGNAL("clicked()"), self.agrandirNotesMjPlateau, Qt.UniqueConnection)
         
         
         #listes
         #listes
@@ -195,18 +201,20 @@ class Plateau(QGraphicsScene):
         self.fenetre.connect(self.fenetre.ui.cp_listeCreatures, SIGNAL("cellClicked(int,int)"), self.modeCreationCombattant, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_listeCreatures, SIGNAL("cellClicked(int,int)"), self.modeCreationCombattant, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_listeDecors, SIGNAL("cellClicked(int,int)"), self.modeCreationDecor, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_listeDecors, SIGNAL("cellClicked(int,int)"), self.modeCreationDecor, Qt.UniqueConnection)
         
         
-        self.fenetre.connect(self.fenetre.ui.cp_editerTerrain, SIGNAL("clicked()"), self.terrainEdit, Qt.UniqueConnection)
-        self.fenetre.connect(self.fenetre.ui.cp_nouveauTerrain, SIGNAL("clicked()"), self.terrainNouveau, Qt.UniqueConnection)
-        self.fenetre.connect(self.fenetre.ui.cp_editerCombattant, SIGNAL("clicked()"), self.creatureEdit, Qt.UniqueConnection)
-        self.fenetre.connect(self.fenetre.ui.cp_nouveauCombattant, SIGNAL("clicked()"), self.creatureNouveau, Qt.UniqueConnection)
-        self.fenetre.connect(self.fenetre.ui.cp_gommeCombattant, SIGNAL("clicked()"), self.majModeSupprimerCombattant, Qt.UniqueConnection)
-        self.fenetre.connect(self.fenetre.ui.cp_editerDecor, SIGNAL("clicked()"), self.decorEdit, Qt.UniqueConnection)
-        self.fenetre.connect(self.fenetre.ui.cp_nouveauDecor, SIGNAL("clicked()"), self.decorNouveau, Qt.UniqueConnection)
-        self.fenetre.connect(self.fenetre.ui.cp_gommeDecor, SIGNAL("clicked()"), self.majModeSupprimerDecor, Qt.UniqueConnection)
+#         self.fenetre.connect(self.fenetre.ui.cp_editerTerrain, SIGNAL("clicked()"), self.terrainEdit, Qt.UniqueConnection)
+#         self.fenetre.connect(self.fenetre.ui.cp_nouveauTerrain, SIGNAL("clicked()"), self.terrainNouveau, Qt.UniqueConnection)
+#         self.fenetre.connect(self.fenetre.ui.cp_editerCombattant, SIGNAL("clicked()"), self.creatureEdit, Qt.UniqueConnection)
+#         self.fenetre.connect(self.fenetre.ui.cp_nouveauCombattant, SIGNAL("clicked()"), self.creatureNouveau, Qt.UniqueConnection)
+#         self.fenetre.connect(self.fenetre.ui.cp_gommeCombattant, SIGNAL("clicked()"), self.majModeSupprimerCombattant, Qt.UniqueConnection)
+#         self.fenetre.connect(self.fenetre.ui.cp_editerDecor, SIGNAL("clicked()"), self.decorEdit, Qt.UniqueConnection)
+#         self.fenetre.connect(self.fenetre.ui.cp_nouveauDecor, SIGNAL("clicked()"), self.decorNouveau, Qt.UniqueConnection)
+#         self.fenetre.connect(self.fenetre.ui.cp_gommeDecor, SIGNAL("clicked()"), self.majModeSupprimerDecor, Qt.UniqueConnection)
 
 
         #creation
         #creation
         self.fenetre.connect(self.fenetre.ui.cp_epaisseurPinceau, SIGNAL("valueChanged(int)"), self.majEpaisseurPinceau, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_epaisseurPinceau, SIGNAL("valueChanged(int)"), self.majEpaisseurPinceau, Qt.UniqueConnection)
-
+        self.fenetre.connect(self.fenetre.ui.cp_pipetteCouleur, SIGNAL("clicked()"), self.modeCopieTerrain, Qt.UniqueConnection)
+        self.fenetre.connect(self.fenetre.ui.cp_effets, SIGNAL("activated(int)"), self.modeCaseEffet, Qt.UniqueConnection)
+        
         #autres:
         #autres:
         self.fenetre.connect(self.fenetre.ui.cp_placerEntree, SIGNAL("clicked()"), self.majModeDefinirEntree, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_placerEntree, SIGNAL("clicked()"), self.majModeDefinirEntree, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_placerCache, SIGNAL("clicked()"), self.majModePlacerCache, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_placerCache, SIGNAL("clicked()"), self.majModePlacerCache, Qt.UniqueConnection)
@@ -258,10 +266,7 @@ class Plateau(QGraphicsScene):
         self.fenetre.afficherPanneauxPlateau(True)
         self.fenetre.afficherPanneauxPlateau(True)
         self.majNomPlateau()
         self.majNomPlateau()
         self.majBoutonsCouleursPerso()
         self.majBoutonsCouleursPerso()
-        self.majListeTerrains()
-        self.majListeCreatures()
-        self.majListeDecors()
-        self.majCaches()
+        self.gM.initialiser(self.fenetre)
         
         
         self.initListeOrdreJeu()
         self.initListeOrdreJeu()
         self.initListeAttaques()
         self.initListeAttaques()
@@ -287,7 +292,7 @@ class Plateau(QGraphicsScene):
         r = ecran.exec_()
         r = ecran.exec_()
         if r == 1:
         if r == 1:
             res = ecran.resultat()
             res = ecran.resultat()
-            self.nom = res.nom
+            self.majNom(res.nom())
             self.chapitre = res.chapitre
             self.chapitre = res.chapitre
             self.description = res.description
             self.description = res.description
             self.presentation = res.presentation
             self.presentation = res.presentation
@@ -295,9 +300,8 @@ class Plateau(QGraphicsScene):
 
 
     def majNomPlateau(self):
     def majNomPlateau(self):
         """met a jour l'affichage du nom du plateau"""
         """met a jour l'affichage du nom du plateau"""
-        txt = self.nom
-        if not self.public:
-            txt += "  [Non Publié]"
+        txt = self.nom()
+        if not self.public: txt += "  [Non Publié]"
         self.fenetre.ui.cbt_nom.setText(QString().fromUtf8("    {}    ".format(txt)))
         self.fenetre.ui.cbt_nom.setText(QString().fromUtf8("    {}    ".format(txt)))
         
         
     def majBoutonEtape(self):
     def majBoutonEtape(self):
@@ -407,93 +411,10 @@ class Plateau(QGraphicsScene):
     def agrandirNotesMjPlateau(self):
     def agrandirNotesMjPlateau(self):
         """affiche les notes du plateau dans une QDialog, puis recupere les donnees qui y sont saisies"""
         """affiche les notes du plateau dans une QDialog, puis recupere les donnees qui y sont saisies"""
         affichageTexte = EcranAffichageTexte(self.notes)
         affichageTexte = EcranAffichageTexte(self.notes)
-        affichageTexte.setAttribute(Qt.WA_DeleteOnClose)
         affichageTexte.exec_()
         affichageTexte.exec_()
         self.notes = affichageTexte.recupererTexte()
         self.notes = affichageTexte.recupererTexte()
-        
-    ##### affichage de la liste des terrains enregistres, et fonctions d'acces aux donnees""""     
-    def terrainEdit(self):
-        """ouvre la fenetre 'terrains' en mode edition"""
-        self.afficheEcranEditionTerrains(self.fenetre.ui.cp_listeTerrains.selection())
-        self.activerMode(Modes.StandardCp)
-        
-    def terrainNouveau(self):
-        """ouvre la fenetre 'terrains' en mode edition"""
-        self.afficheEcranEditionTerrains()
-        self.activerMode(Modes.StandardCp)
-        
-    def afficheEcranEditionTerrains(self, terrain = None):
-        """affiche l'ecran d'edition/creation de terrains"""
-        fen = EcranEditionTerrain(terrain)     
-        r = fen.exec_()
-        if r == 1:
-            terrain = fen.terrain
-            if terrain: terrain.enregistrer()
-            self.majListeTerrains()
-            self.activerMode(Modes.StandardCp)
+        del affichageTexte
  
  
-    def majListeTerrains(self):
-        """mise a jour de la liste des terrains depuis la sauvegarde"""
-        self.fenetre.ui.cp_listeTerrains.vider()
-        self.fenetre.ui.cp_listeTerrains.charger("tr")
-    ###############
-
-    ##### affichage de la liste des creatures enregistrees, et fonctions d'acces aux donnees""""     
-    def creatureEdit(self):
-        """ouvre la fenetre 'creatures' en mode edition"""
-        self.afficheEcranEditionCombattants(self.fenetre.ui.cp_listeCreatures.selection())
-        self.activerMode(Modes.StandardCp)
-        
-    def creatureNouveau(self):
-        """ouvre la fenetre 'creatures' en mode edition"""
-        self.afficheEcranEditionCombattants()
-        self.activerMode(Modes.StandardCp)
-        
-    def afficheEcranEditionCombattants(self, combattant = None):
-        """affiche l'ecran d'edition/creation de creatures"""
-        fen = EcranEditionCombattant(combattant, 0, self.formeCases)
-        r = fen.exec_()
-        if r == 1:
-            combattant = fen.combattant()
-            if combattant: combattant.enregistrer()
-            self.majListeCreatures()
-            self.activerMode(Modes.StandardCp)
-        del fen
-        
-    def majListeCreatures(self):
-        """mise a jour de la liste des creatures depuis la sauvegarde"""
-        self.fenetre.ui.cp_listeCreatures.vider()
-        self.fenetre.ui.cp_listeCreatures.charger("cb")
-        
-    ###############
-
-    ##### affichage de la liste des decors enregistrees, et fonctions d'acces aux donnees""""     
-    def decorEdit(self):
-        """ouvre la fenetre 'decors' en mode edition"""
-        self.afficheEcranEditionDecors(self.fenetre.ui.cp_listeDecors.selection())
-        self.activerMode(Modes.StandardCp)
-        
-    def decorNouveau(self):
-        """ouvre la fenetre 'decors' en mode edition"""
-        self.afficheEcranEditionDecors()
-        self.activerMode(Modes.StandardCp)
-        
-    def afficheEcranEditionDecors(self, decor = None):
-        """affiche l'ecran d'edition/creation de decors"""
-        fen = EcranEditionDecor(decor, 0, self.formeCases)
-        r = fen.exec_()
-        if r == 1:
-            decor = fen.decor
-            if decor: decor.enregistrer()
-            self.majListeDecors()
-            self.activerMode(Modes.StandardCp)
-        del fen
-            
-    def majListeDecors(self):
-        """mise a jour de la liste des decors depuis la sauvegarde"""
-        self.fenetre.ui.cp_listeDecors.vider()
-        self.fenetre.ui.cp_listeDecors.charger("dc")
-    ###############
     
     
     ############### affichage des caches enregistres
     ############### affichage des caches enregistres
     
     
@@ -608,6 +529,7 @@ class Plateau(QGraphicsScene):
         self.majInfosAttaqueEC()
         self.majInfosAttaqueEC()
 
 
     ##### activation des differents modes d'interaction avec le plateau et mises a jour des principaux parametres  #######
     ##### activation des differents modes d'interaction avec le plateau et mises a jour des principaux parametres  #######
+    
     def plateauModeCreation(self):
     def plateauModeCreation(self):
         self.activerMode(Modes.StandardCp)
         self.activerMode(Modes.StandardCp)
 
 
@@ -685,17 +607,17 @@ class Plateau(QGraphicsScene):
     
     
     def modeCreationDecor(self, ligne, col):
     def modeCreationDecor(self, ligne, col):
         """enclenche le mode de creation de decors depuis la liste des decors"""
         """enclenche le mode de creation de decors depuis la liste des decors"""
-        decor = self.fenetre.ui.cp_listeDecors.selection()
+        decor = chargerMat(self.fenetre.ui.cp_listeDecors.selection())
         self.activerMode(Modes.CreationPion, decor)
         self.activerMode(Modes.CreationPion, decor)
         
         
     def modeCreationCombattant(self, ligne, col):
     def modeCreationCombattant(self, ligne, col):
         """enclenche le mode de creation de pions depuis la liste des creatures"""
         """enclenche le mode de creation de pions depuis la liste des creatures"""
-        creature = self.fenetre.ui.cp_listeCreatures.selection()
+        creature = chargerMat(self.fenetre.ui.cp_listeCreatures.selection())
         self.activerMode(Modes.CreationPion, creature)
         self.activerMode(Modes.CreationPion, creature)
 
 
     def modeMajTerrainCase(self, ligne, col):
     def modeMajTerrainCase(self, ligne, col):
         """enclenche le mode permettant la mise a jour du terrain des cases"""
         """enclenche le mode permettant la mise a jour du terrain des cases"""
-        terrain = self.fenetre.ui.cp_listeTerrains.selection()
+        terrain = chargerMat(self.fenetre.ui.cp_listeTerrains.selection())
         if terrain:
         if terrain:
             self.activerMode(Modes.MajCases, terrain)
             self.activerMode(Modes.MajCases, terrain)
         else:
         else:
@@ -879,6 +801,7 @@ class Plateau(QGraphicsScene):
 
 
     def listeAttributCelluleModifiee(self, ligne, colonne):
     def listeAttributCelluleModifiee(self, ligne, colonne):
         """une cellule de la liste des attributs a ete modifiee"""
         """une cellule de la liste des attributs a ete modifiee"""
+        return
         if colonne != 1:
         if colonne != 1:
             print("valeur non modifiable")
             print("valeur non modifiable")
         else:
         else:
@@ -1121,59 +1044,66 @@ class Plateau(QGraphicsScene):
 
 
     def cone3d(self, coord1, coord2, z1 = 0, z2 = 0):
     def cone3d(self, coord1, coord2, z1 = 0, z2 = 0):
         return self.cone(coord1, coord2)
         return self.cone(coord1, coord2)
+   
 
 
+    def blocAdjacent(self, listeCases):
+        """renvoie un bloc de cases adjacentes a partir de la liste en parametre"""
+        retour = []
+        tmp1 = [listeCases[0]]; tmp2 = [listeCases[0]]
+        while len(tmp2) > 0:
+            tmp2 = []
+            #on liste les cases voisines qui sont dans la liste et pas encore verifiees
+            for coord in tmp1:
+                for voisine in self.cases[coord].voisins:
+                    if voisine in listeCases and not voisine in tmp1 and not voisine in tmp2:
+                        tmp2.append(voisine)
+            #chacune de ces cases prend le statut de verifiee
+            for coord in tmp1:
+                listeCases.remove(coord)
+                retour.append(coord)
+            tmp1 = tmp2
+        return retour 
+    
     def polygoneAgglo(self, listeCases):
     def polygoneAgglo(self, listeCases):
         """renvoie un polygone contruit par agglomeration des polygones des cases de la liste
         """renvoie un polygone contruit par agglomeration des polygones des cases de la liste
            les cases doivent etre adjacentes (cases hexagonales ou carrees)"""
            les cases doivent etre adjacentes (cases hexagonales ou carrees)"""
-        pointsPolygone = []
         segments = []
         segments = []
         case = Case(self)
         case = Case(self)
-        
-        #on verifie que toutes les cases sont adjacentes les unes aux autres
-        valide = True
-        if len(listeCases) > 1:
-            for coord in listeCases:
-                if not len(set(listeCases).intersection(self.lstCoordAdjacentes(coord[0], coord[1]))) > 0: valide = False
-        if not len(listeCases) > 0:
-            valide = False
-        
-        if valide:
-            #on parcourt les faces des polygones des cases, et on ne garde que ceux qui n'ont pas de case 'en face'
-            for coord in listeCases:
-                polygone = case.polygone(coord[0], coord[1])
-                voisins = self.lstCoordAdjacentes(coord[0], coord[1])
-                
-                for i in range(0, len(voisins)):
-                    if not voisins[i] in listeCases:
-                        j = i+1
-                        if j > len(voisins) - 1:
-                            j = 0
-                        segments.append(QLineF(polygone[i], polygone[j]))
-
-            #on 'accroche' les segments les uns aux autres, dans l'ordre
-            segments2 = [segments[0]]
-            for segment2 in segments2:
-                for segment in segments:
-                    if not QLineF(segment.p1(), segment.p2()) in segments2 and not QLineF(segment.p2(), segment.p1()) in segments2:
-                        if sqrt((segment.p1().x()-segment2.p2().x())**2+(segment.p1().y()-segment2.p2().y())**2) < 1:
-                            segments2.append(QLineF(segment.p1(), segment.p2()))
-                        elif sqrt((segment.p2().x()-segment2.p2().x())**2+(segment.p2().y()-segment2.p2().y())**2) < 1:   
-                            segments2.append(QLineF(segment.p2(), segment.p1()))
-
-            pointsPolygone = []
-            premierPoint = segments2[0].p1()
-            pointsPolygone.append(premierPoint)
-            for segment in segments2:
-                pointSuivant = segment.p2()
-                if pointSuivant != premierPoint:
-                    pointsPolygone.append(pointSuivant)
-
-            #creation du polygone
-            polygone = QPolygonF()
-            for point in pointsPolygone:   
-                polygone.append(point)   
-        else:
-            polygone = None
+        #on parcourt les faces des polygones des cases, et on ne garde que ceux qui n'ont pas de case 'en face'
+        for coord in listeCases:
+            polygone = case.polygone(coord[0], coord[1])
+            voisins = self.lstCoordAdjacentes(coord[0], coord[1])
+            
+            for i in range(0, len(voisins)):
+                if not voisins[i] in listeCases:
+                    j = i+1
+                    if j > len(voisins) - 1:
+                        j = 0
+                    segments.append(QLineF(polygone[i], polygone[j]))
+
+        #on 'accroche' les segments les uns aux autres, dans l'ordre
+        if not len(segments) > 0: return None
+        segments2 = [segments[0]]
+        for segment2 in segments2:
+            for segment in segments:
+                if not QLineF(segment.p1(), segment.p2()) in segments2 and not QLineF(segment.p2(), segment.p1()) in segments2:
+                    if sqrt((segment.p1().x()-segment2.p2().x())**2+(segment.p1().y()-segment2.p2().y())**2) < 1:
+                        segments2.append(QLineF(segment.p1(), segment.p2()))
+                    elif sqrt((segment.p2().x()-segment2.p2().x())**2+(segment.p2().y()-segment2.p2().y())**2) < 1:   
+                        segments2.append(QLineF(segment.p2(), segment.p1()))
+
+        pointsPolygone = []
+        premierPoint = segments2[0].p1()
+        pointsPolygone.append(premierPoint)
+        for segment in segments2:
+            pointSuivant = segment.p2()
+            if pointSuivant != premierPoint:
+                pointsPolygone.append(pointSuivant)
+
+        #creation du polygone
+        polygone = QPolygonF()
+        for point in pointsPolygone:   
+            polygone.append(point)   
 
 
         return polygone  
         return polygone  
 
 
@@ -1376,10 +1306,15 @@ class Plateau(QGraphicsScene):
                 self.polygoneZonePlacement.setAcceptHoverEvents(False)
                 self.polygoneZonePlacement.setAcceptHoverEvents(False)
                 self.addItem(self.polygoneZonePlacement)
                 self.addItem(self.polygoneZonePlacement)
             listeCases2 = []    
             listeCases2 = []    
+            
             for coord in listeCases:
             for coord in listeCases:
-                if self.cases[coord].estFranchissable():
+                if self.cases[coord].terrain.franchissable:
                     listeCases2.append(coord)
                     listeCases2.append(coord)
-            self.polygoneZonePlacement.setPolygon(self.polygoneAgglo(listeCases2))
+            listeCases3 = self.blocAdjacent(listeCases2)
+
+            polygone = self.polygoneAgglo(listeCases3)
+            if not polygone: return
+            self.polygoneZonePlacement.setPolygon(polygone)
             self.listeCasesZonePlacement = listeCases
             self.listeCasesZonePlacement = listeCases
 
 
     def materialiserPions(self,actif):
     def materialiserPions(self,actif):
@@ -1485,7 +1420,7 @@ class Plateau(QGraphicsScene):
                 if len(self.combattants) > 0:
                 if len(self.combattants) > 0:
                     numero = max(self.combattants) + 1
                     numero = max(self.combattants) + 1
                 pion.numero = numero    
                 pion.numero = numero    
-                pion.numComplementaire = self.numeroterNom(pion.nom)    
+                pion.numComplementaire = self.numeroterNom(pion.nom())    
                 self.combattants[numero] = pion
                 self.combattants[numero] = pion
                 self.pionDeplacerDansOrdreJeu(numero, len(self.ordreJeu) + 2)
                 self.pionDeplacerDansOrdreJeu(numero, len(self.ordreJeu) + 2)
                 
                 
@@ -1507,12 +1442,8 @@ class Plateau(QGraphicsScene):
         """renvoie le nom du pion avec un numero complementaire si necessaire """
         """renvoie le nom du pion avec un numero complementaire si necessaire """
         i = 1
         i = 1
         for numCombattant in self.combattants:
         for numCombattant in self.combattants:
-            if self.combattants[numCombattant].nom == nom:
-                i += 1     
-        if i == 1:
-            retour = ""
-        else:
-            retour = str(i)
+            if self.combattants[numCombattant].nom() == nom: i += 1     
+        retour = str(i) if i > 1 else ""
         return retour
         return retour
         
         
     def pionDeposer(self, coordCase):
     def pionDeposer(self, coordCase):
@@ -1575,6 +1506,7 @@ class Plateau(QGraphicsScene):
     ###############"
     ###############"
         
         
     ######### gestion des evenements souris et clavier ###############
     ######### gestion des evenements souris et clavier ###############
+    
     def mouseMoveEvent(self, event):
     def mouseMoveEvent(self, event):
         super(Plateau, self).mouseMoveEvent(event)
         super(Plateau, self).mouseMoveEvent(event)
         if event.buttons() == Qt.LeftButton and self.vue().dragMode() != QGraphicsView.ScrollHandDrag:
         if event.buttons() == Qt.LeftButton and self.vue().dragMode() != QGraphicsView.ScrollHandDrag:

+ 1 - 0
lib/Terrain.py

@@ -22,6 +22,7 @@ class Terrain(Materiel):
     
     
     def __setstate__(self, state):
     def __setstate__(self, state):
         self.__dict__ = state
         self.__dict__ = state
+        super(Terrain, self).__init__()
 
 
     def icone(self):
     def icone(self):
         """renvoie l'image a afficher dans les listes"""
         """renvoie l'image a afficher dans les listes"""

+ 26 - 26
lib/VueEditionForme.py

@@ -109,37 +109,37 @@ class VueEditionForme(QGraphicsScene):
                     self._cases[coord].setBrush(self._couleur)
                     self._cases[coord].setBrush(self._couleur)
 
 
     def majSelection(self, coord):
     def majSelection(self, coord):
-         """met a jour l'affichage des cases selectionnees pour l'affichage de la forme"""
-         if self._autoriseModifForme:
-             if self._cases[coord].estSelectionnee():
-                 valide = True
-                 for coordVerif in self._cases:
-                     #on parcourt les autres cases selectionnees
-                     if coordVerif != (0,0) and coordVerif != coord and self._cases[coordVerif].estSelectionnee():
-                         #on liste les cases connectees a cette case, de proche en proche
-                         connectees = [coordVerif]
-                         for coordVerif2 in connectees:
-                             for coordVoisin in self._cases[coordVerif2].voisins():
-                                 if coordVoisin in self._cases and not coordVoisin in connectees:
-                                     if self._cases[coordVoisin].estSelectionnee():
-                                         connectees.append(coordVoisin)
-                         if not (0,0) in connectees:
-                             valide = False
-                             break
-                 if valide:
-                     self._cases[coord].selectionner(False)
-             else:
-                 #on s'assure que la case est bien adjacente a une case selectionnee
-                 valide = False
-                 for coordVerif in self._cases[coord].voisins():
+        """met a jour l'affichage des cases selectionnees pour l'affichage de la forme"""
+        if self._autoriseModifForme:
+            if self._cases[coord].estSelectionnee():
+                valide = True
+                for coordVerif in self._cases:
+                    #on parcourt les autres cases selectionnees
+                    if coordVerif != (0,0) and coordVerif != coord and self._cases[coordVerif].estSelectionnee():
+                        #on liste les cases connectees a cette case, de proche en proche
+                        connectees = [coordVerif]
+                        for coordVerif2 in connectees:
+                            for coordVoisin in self._cases[coordVerif2].voisins():
+                                if coordVoisin in self._cases and not coordVoisin in connectees:
+                                    if self._cases[coordVoisin].estSelectionnee():
+                                        connectees.append(coordVoisin)
+                        if not (0,0) in connectees:
+                            valide = False
+                            break
+                if valide:
+                    self._cases[coord].selectionner(False)
+            else:
+                #on s'assure que la case est bien adjacente a une case selectionnee
+                valide = False
+                for coordVerif in self._cases[coord].voisins():
                     if coordVerif in self._cases:
                     if coordVerif in self._cases:
                         if self._cases[coordVerif].estSelectionnee():
                         if self._cases[coordVerif].estSelectionnee():
                             valide = True
                             valide = True
                             break
                             break
-                 if valide:
-                     self._cases[coord].selectionner(True)
+                if valide:
+                    self._cases[coord].selectionner(True)
                      
                      
-             self._majCouleurGraphique()
+            self._majCouleurGraphique()
 
 
 
 
     def afficherMsg(self, msg):
     def afficherMsg(self, msg):

+ 12 - 21
lib/frameAttaque.py

@@ -3,12 +3,13 @@
 """Panneau de creation/edition d'une attaque
 """Panneau de creation/edition d'une attaque
 """
 """
 import sys
 import sys
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from ui.ecran_panneauAttaques import Ui_att_frame
+
 from Actions import *
 from Actions import *
+from lib.br import ligne
+from lib.ui.dm import DmLabel, DmLineEdit
 import regles
 import regles
-from ui.dm import *
+from ui.ecran_panneauAttaques import Ui_att_frame
+
 
 
 class FrameAttaque(QFrame):
 class FrameAttaque(QFrame):
     """Panneau de creation/edition d'une attaque
     """Panneau de creation/edition d'une attaque
@@ -147,11 +148,10 @@ class FrameAttaque(QFrame):
             lay.addWidget(etiquette)
             lay.addWidget(etiquette)
             
             
             champ = DmLineEdit()
             champ = DmLineEdit()
-            champ.setMinimumSize(QSize(60, 20))
-            champ.setMaximumSize(QSize(60, 20))
+            champ.setMinimumSize(QSize(80, 20))
+            champ.setMaximumSize(QSize(80, 20))
             champ.majTexte(regles.listeAttributsAttaques()[nomAttribut])
             champ.majTexte(regles.listeAttributsAttaques()[nomAttribut])
             champ.setObjectName("{}_champ".format(nomAttribut))
             champ.setObjectName("{}_champ".format(nomAttribut))
-            self.connect(champ, SIGNAL("textChanged()"), self.controlerAttribut)
             lay.addWidget(champ)
             lay.addWidget(champ)
 
 
             largeur = 85
             largeur = 85
@@ -191,23 +191,14 @@ class FrameAttaque(QFrame):
                     attributs[attr] = widget.texte()
                     attributs[attr] = widget.texte()
         return attributs
         return attributs
 
 
-    def controlerAttribut(self):
-        emetteur = self.sender().objectName()
-        index = colonne - 10
-        attribut = regles.ordreAttributsAttaques()[index]
-        valeurAttribut = regles.listeControleAttaques()[attribut].controler(str(self.data(ligne, colonne).toString()))
-        if valeurAttribut != None:
-            attaque.attributs[attribut] = valeurAttribut
-        else:
-            self.majData(ligne, colonne, attaque.attributs[attribut])
 
 
 
 
 if __name__ == "__main__":
 if __name__ == "__main__":
-   app = QApplication(sys.argv)
-   ecran = FrameAttaque(0)
-   ecran.show()
-   r = app.exec_()
-   exit(r)  
+    app = QApplication(sys.argv)
+    ecran = FrameAttaque(0)
+    ecran.show()
+    r = app.exec_()
+    exit(r)  
 
 
 
 
 
 

+ 13 - 10
lib/framePj.py

@@ -3,11 +3,12 @@
 """Panneau d'affichage des PJ dans l'onglet groupe
 """Panneau d'affichage des PJ dans l'onglet groupe
 """
 """
 import sys
 import sys
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from ui.ecran_panneauPj import Ui_pj_panneau
-from ui.dm import *
+
+from PyQt4.QtCore import SIGNAL, Qt
+from PyQt4.QtGui import QFrame, QPushButton, QApplication
+
 from EcranEditionCombattant import EcranEditionCombattant
 from EcranEditionCombattant import EcranEditionCombattant
+from ui.ecran_panneauPj import Ui_pj_panneau
 
 
 
 
 class FramePj(QFrame):
 class FramePj(QFrame):
@@ -43,7 +44,7 @@ class FramePj(QFrame):
         """met a jour le contenu avec les donnees du pj en param"""
         """met a jour le contenu avec les donnees du pj en param"""
         if pj != None:
         if pj != None:
             self.ui.pj_image.chargerImage(pj.logo)
             self.ui.pj_image.chargerImage(pj.logo)
-            self.ui.pj_nom.majTexte(pj.nom)
+            self.ui.pj_nom.majTexte(pj.nom())
             for i in range(0, 6):
             for i in range(0, 6):
                 bouton = self.findChild(QPushButton, "pj_afficher_{}".format(i))
                 bouton = self.findChild(QPushButton, "pj_afficher_{}".format(i))
                 bouton.setEnabled(True)
                 bouton.setEnabled(True)
@@ -61,12 +62,13 @@ class FramePj(QFrame):
         """affiche la fiche de perso a la page demandee"""
         """affiche la fiche de perso a la page demandee"""
         emetteur = self.sender().objectName()
         emetteur = self.sender().objectName()
         page = int(str(emetteur)[-1:])
         page = int(str(emetteur)[-1:])
-        self.editionPj = EcranEditionCombattant(self._pj, page)
-        self.editionPj.setAttribute(Qt.WA_DeleteOnClose)
-        self.editionPj.exec_()
-        self._pj = self.editionPj.combattant
+        fen = EcranEditionCombattant(self._pj, page)
+        fen.exec_()
+        self._pj = fen.combattant()
+        del fen
         self.ui.pj_image.chargerImage(self._pj.logo)
         self.ui.pj_image.chargerImage(self._pj.logo)
-        self.ui.pj_nom.majTexte(self._pj.nom)    
+        self.ui.pj_nom.majTexte(self._pj.nom())    
+        self.majApparence()
         self.signalerModif()
         self.signalerModif()
 
 
     def majApparence(self):
     def majApparence(self):
@@ -76,6 +78,7 @@ class FramePj(QFrame):
                            "border: 2px solid " + self._pj.couleur.lighter(110).name() + ";" \
                            "border: 2px solid " + self._pj.couleur.lighter(110).name() + ";" \
                            "border-radius: 5px;}" \
                            "border-radius: 5px;}" \
                            "QLabel {border-width: 0px;}")
                            "QLabel {border-width: 0px;}")
+        
     def enterEvent(self, event):
     def enterEvent(self, event):
         self.setEnabled(True)
         self.setEnabled(True)
 
 

+ 2 - 1
lib/rsc.py

@@ -9,7 +9,8 @@ from PyQt4.QtCore import Qt, SIGNAL, QString
 from PyQt4.QtGui import QPixmap, QDialog, QFrame, QColor, QPalette, QApplication, \
 from PyQt4.QtGui import QPixmap, QDialog, QFrame, QColor, QPalette, QApplication, \
     QFileDialog
     QFileDialog
 
 
-from commun import rep, uid, enregistrerSous, charger, dmConfirmer
+from commun import rep, uid, enregistrerSous, charger
+from dialogues import dmConfirmer
 from ui.ecran_editerImage import Ui_edi_fenetre
 from ui.ecran_editerImage import Ui_edi_fenetre
 from ui.ecran_explorateur import Ui_exr_fenetre
 from ui.ecran_explorateur import Ui_exr_fenetre
 from ui.panneauImage import Ui_exi_panneau
 from ui.panneauImage import Ui_exi_panneau

+ 3 - 0
lib/ui/chargerPlateau.ui

@@ -2,6 +2,9 @@
 <ui version="4.0">
 <ui version="4.0">
  <class>chp_fenetre</class>
  <class>chp_fenetre</class>
  <widget class="QDialog" name="chp_fenetre">
  <widget class="QDialog" name="chp_fenetre">
+  <property name="windowModality">
+   <enum>Qt::ApplicationModal</enum>
+  </property>
   <property name="geometry">
   <property name="geometry">
    <rect>
    <rect>
     <x>0</x>
     <x>0</x>

+ 65 - 80
lib/ui/dm.py

@@ -9,18 +9,8 @@ from PyQt4.QtGui import QLabel, QPixmap, QTextEdit, QLineEdit, QGraphicsView, \
     QComboBox, QSpinBox, QTabWidget, QTableWidget, QTableWidgetItem, \
     QComboBox, QSpinBox, QTabWidget, QTableWidget, QTableWidgetItem, \
     QItemSelectionModel, QIcon, QColor, QBrush, QGroupBox, QFrame
     QItemSelectionModel, QIcon, QColor, QBrush, QGroupBox, QFrame
 
 
-from lib.mat import chargerMat
 from lib.outilsSvg import afficheSvg
 from lib.outilsSvg import afficheSvg
 
 
-
-try:
-    from lib.commun import rep, charger
-except:
-    try:
-        from commun import rep, charger
-    except:
-        print "dm: impossible de charger commun"
-
 try:        
 try:        
     import lib.regles as regles
     import lib.regles as regles
 except:
 except:
@@ -288,26 +278,26 @@ class DmTableMat(DmTableWidget):
         terrains, decors, creatures"""
         terrains, decors, creatures"""
     def __init__(self, parent = None):
     def __init__(self, parent = None):
         super(DmTableMat, self).__init__(parent)
         super(DmTableMat, self).__init__(parent)
+        self._init = False
         
         
-    def charger(self, filtre = ""):
+    def charger(self, listeMat):
         """remplit la table avec les donnees contenues dans les fichiers de materiel
         """remplit la table avec les donnees contenues dans les fichiers de materiel
            (filtre selon le prefixe)"""
            (filtre selon le prefixe)"""
-        self.setIconSize(QSize(30,20))   
-        self.horizontalHeader().setStretchLastSection(True)
-        self.masquerColonneId()           
+        if not self._init:
+            self.setIconSize(QSize(30,20))   
+            self.horizontalHeader().setStretchLastSection(True)
+            self.masquerColonneId()    
+            self._init = True       
            
            
         self.majEnCours = True
         self.majEnCours = True
         self.setSortingEnabled(False)
         self.setSortingEnabled(False)
         
         
-        for attributsFichier in os.walk(rep("jeu")):
-            for f in attributsFichier[2]:
-                if f[:2] == filtre or len(filtre) == 0:
-                    ligne = self.nouvelleLigneFin()
-                    mat = charger(os.path.join(attributsFichier[0], f))
-                    self.majTexte(ligne, 0, mat.idM())
-                    icon = QIcon() if not mat.icone() else QIcon(mat.icone().fichier())
-                    item = QTableWidgetItem(icon, QString.fromUtf8(mat.nom()))
-                    self.setItem(ligne, 1, item)
+        for mat in listeMat:
+            ligne = self.nouvelleLigneFin()
+            self.majTexte(ligne, 0, mat.idM())
+            icon = QIcon() if not mat.icone() else QIcon(mat.icone().fichier())
+            item = QTableWidgetItem(icon, QString.fromUtf8(mat.nom()))
+            self.setItem(ligne, 1, item)
           
           
         self.sizeHintForColumn(1)
         self.sizeHintForColumn(1)
         self.sortItems(1)
         self.sortItems(1)
@@ -320,62 +310,55 @@ class DmTableMat(DmTableWidget):
         self.remplir()
         self.remplir()
 
 
     def selection(self):
     def selection(self):
-        """renvoie l'objet actuellement selectionne"""
-        mat = chargerMat(self.texte(self.currentRow(), 0))
-        return mat
+        """renvoie l'idM du materiel actuellement selectionne"""
+        return self.texte(self.currentRow(), 0)
     
     
 
 
-class DmTableAttributsPi(DmTableWidget):
-    """table utilisee pour afficher les attributs d'un pion dans le panneau Pi"""
-    def __init__(self, parent = None):
-        super(DmTableMat, self).__init__(parent)
-        self.fichier = ""
-        self.masquerColonneId()
-
-    def defFichier(self, fichier):
-        """definit le fichier de sauvegarde qui la source des donnees de la table"""
-        self.fichier = fichier
-
-    def initAffichage(self):
-        """fait les differents reglages relatifs a l'apparence"""
-        self.setColumnWidth(0, 0)
-        self.setIconSize(QSize(30,20))   
-        self.horizontalHeader().setStretchLastSection(True)
-        
-    def remplir(self):
-        """remplit la table avec les donnees contenues dans le dictionnaire de la savuvegarde"""
-        dico = afficheSvg(self.fichier)
-        self.majEnCours = True
-        self.setSortingEnabled(False)
-        index = 0
-        for elt in dico:
-            objet = dico[elt]
-            self.insertRow(int(index))
-            
-            #code de l'objet
-            self.setItem(int(index),0,QTableWidgetItem(QString.fromUtf8(elt)))
-            #icone et nom
-            icon = QIcon("img\\"+objet.icone())
-            item = QTableWidgetItem(icon,QString.fromUtf8(objet.nom))
-            self.setItem(int(index),1,item)
-            
-            index += 1        
-        self.sizeHintForColumn(1)
-        self.setSortingEnabled(True)
-        self.sortItems(1)
-        self.majEnCours = False
-
-    def maj(self):
-        self.vider()
-        self.remplir()
-
-    def actuel(self):
-        """renvoie l'objet actuellement selectionne"""
-        objet = None
-        index = self.item(self.currentRow(), 0)
-        if index > 0:
-            objet = charger(self.fichier, str(index.text().toUtf8()))
-        return objet
+# class DmTableAttributsPi(DmTableWidget):
+#     """table utilisee pour afficher les attributs d'un pion dans le panneau Pi"""
+#     def __init__(self, parent = None):
+#         super(DmTableMat, self).__init__(parent)
+#         self.masquerColonneId()
+# 
+#     def initAffichage(self):
+#         """fait les differents reglages relatifs a l'apparence"""
+#         self.setColumnWidth(0, 0)
+#         self.setIconSize(QSize(30,20))   
+#         self.horizontalHeader().setStretchLastSection(True)
+#         
+#     def remplir(self, attributs):
+#         """remplit la table avec les donnees du pion"""
+#         self.majEnCours = True
+#         self.setSortingEnabled(False)
+#         index = 0
+#         for elt in dico:
+#             objet = dico[elt]
+#             self.insertRow(int(index))
+#             
+#             #code de l'objet
+#             self.setItem(int(index),0,QTableWidgetItem(QString.fromUtf8(elt)))
+#             #icone et nom
+#             icon = QIcon("img\\"+objet.icone())
+#             item = QTableWidgetItem(icon,QString.fromUtf8(objet.nom))
+#             self.setItem(int(index),1,item)
+#             
+#             index += 1        
+#         self.sizeHintForColumn(1)
+#         self.setSortingEnabled(True)
+#         self.sortItems(1)
+#         self.majEnCours = False
+# 
+#     def maj(self):
+#         self.vider()
+#         self.remplir()
+
+#     def actuel(self):
+#         """renvoie l'objet actuellement selectionne"""
+#         objet = None
+#         index = self.item(self.currentRow(), 0)
+#         if index > 0:
+#             objet = charger(self.fichier, str(index.text().toUtf8()))
+#         return objet
 
 
 
 
 class DmTableInventaire(DmTableWidget):
 class DmTableInventaire(DmTableWidget):
@@ -537,10 +520,12 @@ class DmFrameInf_Case(QGroupBox):
             self.findChild(DmLabel, "inf_caseTerrain").majTexte("Case")
             self.findChild(DmLabel, "inf_caseTerrain").majTexte("Case")
             
             
         self.findChild(DmLabel, "inf_caseCoord").majTexte("X: {}  Y: {}".format(case.x, case.y))
         self.findChild(DmLabel, "inf_caseCoord").majTexte("X: {}  Y: {}".format(case.x, case.y))
-        self.findChild(DmLabel, "inf_caseAltitude").majTexte("Alt.: {}".format(case.altitude))
+        self.findChild(DmLabel, "inf_caseAltitude").majTexte("Altitude: {}".format(case.altitude))
         
         
-        if case.effetActif != "":
-            self.findChild(DmLabel, "inf_caseEffet").chargerImage("img\\"+case.imgEffet[case.effetActif])          
+        if case.effetActif not in ["", "aucun"]:
+            imgEffet = {"brule": "feu_16.png", "eau": "eau_16.png","glace": "glace_16.png","poison": "poison_16.png"}
+            pix = QPixmap(":/interface/16/ressource/{}".format(imgEffet[case.effetActif]))
+            self.findChild(DmLabel, "inf_caseEffet").setPixmap(pix)          
         else:
         else:
             self.findChild(DmLabel, "inf_caseEffet").clear()      
             self.findChild(DmLabel, "inf_caseEffet").clear()      
 
 

+ 6 - 6
lib/ui/ecran_editionCombattant.py

@@ -2,7 +2,7 @@
 
 
 # Form implementation generated from reading ui file 'editionCombattant.ui'
 # Form implementation generated from reading ui file 'editionCombattant.ui'
 #
 #
-# Created: Fri Jul 17 11:19:27 2015
+# Created: Wed Sep 09 17:48:20 2015
 #      by: PyQt4 UI code generator 4.10.4
 #      by: PyQt4 UI code generator 4.10.4
 #
 #
 # WARNING! All changes made in this file will be lost!
 # WARNING! All changes made in this file will be lost!
@@ -27,9 +27,9 @@ class Ui_edc_fenetre(object):
     def setupUi(self, edc_fenetre):
     def setupUi(self, edc_fenetre):
         edc_fenetre.setObjectName(_fromUtf8("edc_fenetre"))
         edc_fenetre.setObjectName(_fromUtf8("edc_fenetre"))
         edc_fenetre.setWindowModality(QtCore.Qt.ApplicationModal)
         edc_fenetre.setWindowModality(QtCore.Qt.ApplicationModal)
-        edc_fenetre.resize(679, 484)
-        edc_fenetre.setMinimumSize(QtCore.QSize(0, 484))
-        edc_fenetre.setMaximumSize(QtCore.QSize(16777215, 10000))
+        edc_fenetre.resize(679, 486)
+        edc_fenetre.setMinimumSize(QtCore.QSize(679, 484))
+        edc_fenetre.setMaximumSize(QtCore.QSize(679, 486))
         self.horizontalLayout_2 = QtGui.QHBoxLayout(edc_fenetre)
         self.horizontalLayout_2 = QtGui.QHBoxLayout(edc_fenetre)
         self.horizontalLayout_2.setContentsMargins(0, 0, -1, 0)
         self.horizontalLayout_2.setContentsMargins(0, 0, -1, 0)
         self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
         self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
@@ -1043,8 +1043,8 @@ class Ui_edc_fenetre(object):
         self.horizontalLayout_2.addLayout(self.horizontalLayout)
         self.horizontalLayout_2.addLayout(self.horizontalLayout)
 
 
         self.retranslateUi(edc_fenetre)
         self.retranslateUi(edc_fenetre)
-        self.edc_pages.setCurrentIndex(1)
-        self.edc_filtreTypeObjet.setCurrentIndex(4)
+        self.edc_pages.setCurrentIndex(4)
+        self.edc_filtreTypeObjet.setCurrentIndex(0)
         QtCore.QObject.connect(self.edc_menu, QtCore.SIGNAL(_fromUtf8("cellClicked(int,int)")), self.edc_pages.setCurrentIndex)
         QtCore.QObject.connect(self.edc_menu, QtCore.SIGNAL(_fromUtf8("cellClicked(int,int)")), self.edc_pages.setCurrentIndex)
         QtCore.QMetaObject.connectSlotsByName(edc_fenetre)
         QtCore.QMetaObject.connectSlotsByName(edc_fenetre)
 
 

+ 4 - 4
lib/ui/ecran_editionDecor.py

@@ -2,7 +2,7 @@
 
 
 # Form implementation generated from reading ui file 'editionDecor.ui'
 # Form implementation generated from reading ui file 'editionDecor.ui'
 #
 #
-# Created: Mon Jun 29 16:27:29 2015
+# Created: Wed Sep 09 14:00:08 2015
 #      by: PyQt4 UI code generator 4.10.4
 #      by: PyQt4 UI code generator 4.10.4
 #
 #
 # WARNING! All changes made in this file will be lost!
 # WARNING! All changes made in this file will be lost!
@@ -524,7 +524,7 @@ class Ui_edd_fenetre(object):
         font.setFamily(_fromUtf8("Verdana"))
         font.setFamily(_fromUtf8("Verdana"))
         self.label_23.setFont(font)
         self.label_23.setFont(font)
         self.label_23.setObjectName(_fromUtf8("label_23"))
         self.label_23.setObjectName(_fromUtf8("label_23"))
-        self.edd_notes = QtGui.QTextEdit(self.page_notes)
+        self.edd_notes = DmTextEdit(self.page_notes)
         self.edd_notes.setGeometry(QtCore.QRect(30, 150, 441, 171))
         self.edd_notes.setGeometry(QtCore.QRect(30, 150, 441, 171))
         palette = QtGui.QPalette()
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
@@ -620,7 +620,7 @@ class Ui_edd_fenetre(object):
         self.horizontalLayout_2.addLayout(self.horizontalLayout)
         self.horizontalLayout_2.addLayout(self.horizontalLayout)
 
 
         self.retranslateUi(edd_fenetre)
         self.retranslateUi(edd_fenetre)
-        self.edd_pages.setCurrentIndex(0)
+        self.edd_pages.setCurrentIndex(3)
         self.edd_filtreTypeObjet.setCurrentIndex(3)
         self.edd_filtreTypeObjet.setCurrentIndex(3)
         QtCore.QObject.connect(self.edd_menu, QtCore.SIGNAL(_fromUtf8("cellClicked(int,int)")), self.edd_pages.setCurrentIndex)
         QtCore.QObject.connect(self.edd_menu, QtCore.SIGNAL(_fromUtf8("cellClicked(int,int)")), self.edd_pages.setCurrentIndex)
         QtCore.QMetaObject.connectSlotsByName(edd_fenetre)
         QtCore.QMetaObject.connectSlotsByName(edd_fenetre)
@@ -692,7 +692,7 @@ class Ui_edd_fenetre(object):
         self.edd_enregistrer.setText(_translate("edd_fenetre", "Enregistrer", None))
         self.edd_enregistrer.setText(_translate("edd_fenetre", "Enregistrer", None))
         self.edd_annuler.setText(_translate("edd_fenetre", "Annuler", None))
         self.edd_annuler.setText(_translate("edd_fenetre", "Annuler", None))
 
 
-from dm import DmTabInventaire, DmTableInventaire, DmTableMenu, DmLabel, DmLineEdit
+from dm import DmTabInventaire, DmLineEdit, DmLabel, DmTableMenu, DmTextEdit, DmTableInventaire
 import ressource_rc
 import ressource_rc
 
 
 if __name__ == "__main__":
 if __name__ == "__main__":

+ 105 - 40
lib/ui/ecran_principal.py

@@ -2,7 +2,7 @@
 
 
 # Form implementation generated from reading ui file 'principal.ui'
 # Form implementation generated from reading ui file 'principal.ui'
 #
 #
-# Created: Mon Sep 07 21:37:46 2015
+# Created: Thu Sep 10 11:41:36 2015
 #      by: PyQt4 UI code generator 4.10.4
 #      by: PyQt4 UI code generator 4.10.4
 #
 #
 # WARNING! All changes made in this file will be lost!
 # WARNING! All changes made in this file will be lost!
@@ -44,13 +44,37 @@ class Ui_principal(object):
         self.dm_panneauCentre.setFont(font)
         self.dm_panneauCentre.setFont(font)
         self.dm_panneauCentre.setAcceptDrops(False)
         self.dm_panneauCentre.setAcceptDrops(False)
         self.dm_panneauCentre.setObjectName(_fromUtf8("dm_panneauCentre"))
         self.dm_panneauCentre.setObjectName(_fromUtf8("dm_panneauCentre"))
+        self.tab = QtGui.QWidget()
+        self.tab.setObjectName(_fromUtf8("tab"))
+        self.label_5 = QtGui.QLabel(self.tab)
+        self.label_5.setGeometry(QtCore.QRect(40, 30, 171, 41))
+        self.label_5.setObjectName(_fromUtf8("label_5"))
+        self.label_6 = QtGui.QLabel(self.tab)
+        self.label_6.setGeometry(QtCore.QRect(40, 90, 171, 41))
+        self.label_6.setObjectName(_fromUtf8("label_6"))
+        self.label_7 = QtGui.QLabel(self.tab)
+        self.label_7.setGeometry(QtCore.QRect(40, 150, 171, 41))
+        self.label_7.setObjectName(_fromUtf8("label_7"))
+        self.dm_panneauCentre.addTab(self.tab, _fromUtf8(""))
         self.Combats_tab = QtGui.QWidget()
         self.Combats_tab = QtGui.QWidget()
         self.Combats_tab.setObjectName(_fromUtf8("Combats_tab"))
         self.Combats_tab.setObjectName(_fromUtf8("Combats_tab"))
         self.horizontalLayout_3 = QtGui.QHBoxLayout(self.Combats_tab)
         self.horizontalLayout_3 = QtGui.QHBoxLayout(self.Combats_tab)
         self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3"))
         self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3"))
+        self.combatPanneau = QtGui.QStackedWidget(self.Combats_tab)
+        self.combatPanneau.setMinimumSize(QtCore.QSize(50, 0))
+        self.combatPanneau.setObjectName(_fromUtf8("combatPanneau"))
+        self.menu = QtGui.QWidget()
+        self.menu.setObjectName(_fromUtf8("menu"))
+        self.combatPanneau.addWidget(self.menu)
+        self.combat = QtGui.QWidget()
+        self.combat.setObjectName(_fromUtf8("combat"))
+        self.horizontalLayout_9 = QtGui.QHBoxLayout(self.combat)
+        self.horizontalLayout_9.setSpacing(1)
+        self.horizontalLayout_9.setMargin(1)
+        self.horizontalLayout_9.setObjectName(_fromUtf8("horizontalLayout_9"))
         self.layoutCombat = QtGui.QVBoxLayout()
         self.layoutCombat = QtGui.QVBoxLayout()
         self.layoutCombat.setObjectName(_fromUtf8("layoutCombat"))
         self.layoutCombat.setObjectName(_fromUtf8("layoutCombat"))
-        self.cbt_panneauHaut = QtGui.QStackedWidget(self.Combats_tab)
+        self.cbt_panneauHaut = QtGui.QStackedWidget(self.combat)
         self.cbt_panneauHaut.setMinimumSize(QtCore.QSize(0, 32))
         self.cbt_panneauHaut.setMinimumSize(QtCore.QSize(0, 32))
         self.cbt_panneauHaut.setMaximumSize(QtCore.QSize(16777215, 32))
         self.cbt_panneauHaut.setMaximumSize(QtCore.QSize(16777215, 32))
         self.cbt_panneauHaut.setObjectName(_fromUtf8("cbt_panneauHaut"))
         self.cbt_panneauHaut.setObjectName(_fromUtf8("cbt_panneauHaut"))
@@ -125,7 +149,7 @@ class Ui_principal(object):
         self.plateauLayoutH = QtGui.QHBoxLayout()
         self.plateauLayoutH = QtGui.QHBoxLayout()
         self.plateauLayoutH.setSpacing(3)
         self.plateauLayoutH.setSpacing(3)
         self.plateauLayoutH.setObjectName(_fromUtf8("plateauLayoutH"))
         self.plateauLayoutH.setObjectName(_fromUtf8("plateauLayoutH"))
-        self.cbt_panneauGauche = QtGui.QStackedWidget(self.Combats_tab)
+        self.cbt_panneauGauche = QtGui.QStackedWidget(self.combat)
         self.cbt_panneauGauche.setMinimumSize(QtCore.QSize(90, 0))
         self.cbt_panneauGauche.setMinimumSize(QtCore.QSize(90, 0))
         self.cbt_panneauGauche.setMaximumSize(QtCore.QSize(128, 16777215))
         self.cbt_panneauGauche.setMaximumSize(QtCore.QSize(128, 16777215))
         self.cbt_panneauGauche.setObjectName(_fromUtf8("cbt_panneauGauche"))
         self.cbt_panneauGauche.setObjectName(_fromUtf8("cbt_panneauGauche"))
@@ -193,7 +217,14 @@ class Ui_principal(object):
         self.cbt_afficherGestion.setIconSize(QtCore.QSize(24, 24))
         self.cbt_afficherGestion.setIconSize(QtCore.QSize(24, 24))
         self.cbt_afficherGestion.setObjectName(_fromUtf8("cbt_afficherGestion"))
         self.cbt_afficherGestion.setObjectName(_fromUtf8("cbt_afficherGestion"))
         self.panneauInfosPlateau.addWidget(self.cbt_afficherGestion)
         self.panneauInfosPlateau.addWidget(self.cbt_afficherGestion)
-        self.inf_boitePion = DmFrameInf_Combattant(self.inf_panneau)
+        self.inf_bas = QtGui.QFrame(self.inf_panneau)
+        self.inf_bas.setMinimumSize(QtCore.QSize(90, 200))
+        self.inf_bas.setMaximumSize(QtCore.QSize(120, 200))
+        self.inf_bas.setFrameShape(QtGui.QFrame.StyledPanel)
+        self.inf_bas.setFrameShadow(QtGui.QFrame.Raised)
+        self.inf_bas.setObjectName(_fromUtf8("inf_bas"))
+        self.inf_boitePion = DmFrameInf_Combattant(self.inf_bas)
+        self.inf_boitePion.setGeometry(QtCore.QRect(0, 0, 110, 65))
         self.inf_boitePion.setMinimumSize(QtCore.QSize(80, 65))
         self.inf_boitePion.setMinimumSize(QtCore.QSize(80, 65))
         self.inf_boitePion.setMaximumSize(QtCore.QSize(110, 16777215))
         self.inf_boitePion.setMaximumSize(QtCore.QSize(110, 16777215))
         self.inf_boitePion.setTitle(_fromUtf8(""))
         self.inf_boitePion.setTitle(_fromUtf8(""))
@@ -211,7 +242,7 @@ class Ui_principal(object):
         self.inf_pionEffet = DmLabel(self.inf_boitePion)
         self.inf_pionEffet = DmLabel(self.inf_boitePion)
         self.inf_pionEffet.setGeometry(QtCore.QRect(50, 40, 21, 20))
         self.inf_pionEffet.setGeometry(QtCore.QRect(50, 40, 21, 20))
         self.inf_pionEffet.setText(_fromUtf8(""))
         self.inf_pionEffet.setText(_fromUtf8(""))
-        self.inf_pionEffet.setPixmap(QtGui.QPixmap(_fromUtf8("../../../../Users/olivier.massot/.designer/backup/img/etatEtourdi.png")))
+        self.inf_pionEffet.setPixmap(QtGui.QPixmap(_fromUtf8("../../../../../Users/olivier.massot/.designer/backup/img/etatEtourdi.png")))
         self.inf_pionEffet.setScaledContents(False)
         self.inf_pionEffet.setScaledContents(False)
         self.inf_pionEffet.setObjectName(_fromUtf8("inf_pionEffet"))
         self.inf_pionEffet.setObjectName(_fromUtf8("inf_pionEffet"))
         self.inf_pionNom = DmLabel(self.inf_boitePion)
         self.inf_pionNom = DmLabel(self.inf_boitePion)
@@ -219,15 +250,15 @@ class Ui_principal(object):
         self.inf_pionNom.setMargin(1)
         self.inf_pionNom.setMargin(1)
         self.inf_pionNom.setIndent(-1)
         self.inf_pionNom.setIndent(-1)
         self.inf_pionNom.setObjectName(_fromUtf8("inf_pionNom"))
         self.inf_pionNom.setObjectName(_fromUtf8("inf_pionNom"))
-        self.panneauInfosPlateau.addWidget(self.inf_boitePion)
-        self.inf_boiteDecor = DmFrameInf_Decor(self.inf_panneau)
+        self.inf_boiteDecor = DmFrameInf_Decor(self.inf_bas)
         self.inf_boiteDecor.setEnabled(True)
         self.inf_boiteDecor.setEnabled(True)
+        self.inf_boiteDecor.setGeometry(QtCore.QRect(0, 70, 110, 61))
         self.inf_boiteDecor.setMinimumSize(QtCore.QSize(80, 61))
         self.inf_boiteDecor.setMinimumSize(QtCore.QSize(80, 61))
         self.inf_boiteDecor.setMaximumSize(QtCore.QSize(110, 16777215))
         self.inf_boiteDecor.setMaximumSize(QtCore.QSize(110, 16777215))
         self.inf_boiteDecor.setTitle(_fromUtf8(""))
         self.inf_boiteDecor.setTitle(_fromUtf8(""))
         self.inf_boiteDecor.setObjectName(_fromUtf8("inf_boiteDecor"))
         self.inf_boiteDecor.setObjectName(_fromUtf8("inf_boiteDecor"))
         self.inf_decorNom = DmLabel(self.inf_boiteDecor)
         self.inf_decorNom = DmLabel(self.inf_boiteDecor)
-        self.inf_decorNom.setGeometry(QtCore.QRect(10, 0, 61, 21))
+        self.inf_decorNom.setGeometry(QtCore.QRect(10, 0, 91, 21))
         self.inf_decorNom.setObjectName(_fromUtf8("inf_decorNom"))
         self.inf_decorNom.setObjectName(_fromUtf8("inf_decorNom"))
         self.inf_decorImage = DmLabel(self.inf_boiteDecor)
         self.inf_decorImage = DmLabel(self.inf_boiteDecor)
         self.inf_decorImage.setGeometry(QtCore.QRect(10, 20, 31, 31))
         self.inf_decorImage.setGeometry(QtCore.QRect(10, 20, 31, 31))
@@ -236,15 +267,21 @@ class Ui_principal(object):
         self.inf_decorImage.setObjectName(_fromUtf8("inf_decorImage"))
         self.inf_decorImage.setObjectName(_fromUtf8("inf_decorImage"))
         self.inf_decorEffet = DmLabel(self.inf_boiteDecor)
         self.inf_decorEffet = DmLabel(self.inf_boiteDecor)
         self.inf_decorEffet.setGeometry(QtCore.QRect(50, 20, 21, 21))
         self.inf_decorEffet.setGeometry(QtCore.QRect(50, 20, 21, 21))
+        self.inf_decorEffet.setText(_fromUtf8(""))
+        self.inf_decorEffet.setPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/feu_16.png")))
         self.inf_decorEffet.setObjectName(_fromUtf8("inf_decorEffet"))
         self.inf_decorEffet.setObjectName(_fromUtf8("inf_decorEffet"))
         self.inf_decorDetruit = DmLabel(self.inf_boiteDecor)
         self.inf_decorDetruit = DmLabel(self.inf_boiteDecor)
         self.inf_decorDetruit.setGeometry(QtCore.QRect(50, 40, 21, 21))
         self.inf_decorDetruit.setGeometry(QtCore.QRect(50, 40, 21, 21))
+        self.inf_decorDetruit.setText(_fromUtf8(""))
+        self.inf_decorDetruit.setPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/brise_16.png")))
         self.inf_decorDetruit.setObjectName(_fromUtf8("inf_decorDetruit"))
         self.inf_decorDetruit.setObjectName(_fromUtf8("inf_decorDetruit"))
         self.inf_decorVerrouille = DmLabel(self.inf_boiteDecor)
         self.inf_decorVerrouille = DmLabel(self.inf_boiteDecor)
-        self.inf_decorVerrouille.setGeometry(QtCore.QRect(50, 0, 21, 21))
+        self.inf_decorVerrouille.setGeometry(QtCore.QRect(70, 20, 21, 21))
+        self.inf_decorVerrouille.setText(_fromUtf8(""))
+        self.inf_decorVerrouille.setPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/verrou_ferme_16.png")))
         self.inf_decorVerrouille.setObjectName(_fromUtf8("inf_decorVerrouille"))
         self.inf_decorVerrouille.setObjectName(_fromUtf8("inf_decorVerrouille"))
-        self.panneauInfosPlateau.addWidget(self.inf_boiteDecor)
-        self.inf_boiteCase = DmFrameInf_Case(self.inf_panneau)
+        self.inf_boiteCase = DmFrameInf_Case(self.inf_bas)
+        self.inf_boiteCase.setGeometry(QtCore.QRect(0, 136, 110, 61))
         self.inf_boiteCase.setMinimumSize(QtCore.QSize(80, 61))
         self.inf_boiteCase.setMinimumSize(QtCore.QSize(80, 61))
         self.inf_boiteCase.setMaximumSize(QtCore.QSize(110, 16777215))
         self.inf_boiteCase.setMaximumSize(QtCore.QSize(110, 16777215))
         self.inf_boiteCase.setTitle(_fromUtf8(""))
         self.inf_boiteCase.setTitle(_fromUtf8(""))
@@ -282,36 +319,42 @@ class Ui_principal(object):
         self.infoPionEnCours_vol_2.setGeometry(QtCore.QRect(60, 160, 21, 21))
         self.infoPionEnCours_vol_2.setGeometry(QtCore.QRect(60, 160, 21, 21))
         self.infoPionEnCours_vol_2.setObjectName(_fromUtf8("infoPionEnCours_vol_2"))
         self.infoPionEnCours_vol_2.setObjectName(_fromUtf8("infoPionEnCours_vol_2"))
         self.inf_caseTerrain = DmLabel(self.inf_boiteCase)
         self.inf_caseTerrain = DmLabel(self.inf_boiteCase)
-        self.inf_caseTerrain.setGeometry(QtCore.QRect(10, 0, 61, 21))
+        self.inf_caseTerrain.setGeometry(QtCore.QRect(10, 0, 71, 21))
         self.inf_caseTerrain.setMargin(1)
         self.inf_caseTerrain.setMargin(1)
         self.inf_caseTerrain.setIndent(-1)
         self.inf_caseTerrain.setIndent(-1)
         self.inf_caseTerrain.setObjectName(_fromUtf8("inf_caseTerrain"))
         self.inf_caseTerrain.setObjectName(_fromUtf8("inf_caseTerrain"))
         self.inf_caseCoord = DmLabel(self.inf_boiteCase)
         self.inf_caseCoord = DmLabel(self.inf_boiteCase)
-        self.inf_caseCoord.setGeometry(QtCore.QRect(10, 20, 61, 21))
+        self.inf_caseCoord.setGeometry(QtCore.QRect(10, 20, 91, 21))
         self.inf_caseCoord.setMargin(1)
         self.inf_caseCoord.setMargin(1)
         self.inf_caseCoord.setIndent(-1)
         self.inf_caseCoord.setIndent(-1)
         self.inf_caseCoord.setObjectName(_fromUtf8("inf_caseCoord"))
         self.inf_caseCoord.setObjectName(_fromUtf8("inf_caseCoord"))
         self.inf_caseEffet = DmLabel(self.inf_boiteCase)
         self.inf_caseEffet = DmLabel(self.inf_boiteCase)
         self.inf_caseEffet.setGeometry(QtCore.QRect(60, 0, 21, 21))
         self.inf_caseEffet.setGeometry(QtCore.QRect(60, 0, 21, 21))
         self.inf_caseEffet.setText(_fromUtf8(""))
         self.inf_caseEffet.setText(_fromUtf8(""))
-        self.inf_caseEffet.setPixmap(QtGui.QPixmap(_fromUtf8("../../../../Users/olivier.massot/.designer/backup/img/etatFeu.png")))
+        self.inf_caseEffet.setPixmap(QtGui.QPixmap(_fromUtf8("../../../../../Users/olivier.massot/.designer/backup/img/etatFeu.png")))
         self.inf_caseEffet.setScaledContents(True)
         self.inf_caseEffet.setScaledContents(True)
         self.inf_caseEffet.setMargin(1)
         self.inf_caseEffet.setMargin(1)
         self.inf_caseEffet.setIndent(-1)
         self.inf_caseEffet.setIndent(-1)
         self.inf_caseEffet.setObjectName(_fromUtf8("inf_caseEffet"))
         self.inf_caseEffet.setObjectName(_fromUtf8("inf_caseEffet"))
         self.inf_caseAltitude = DmLabel(self.inf_boiteCase)
         self.inf_caseAltitude = DmLabel(self.inf_boiteCase)
-        self.inf_caseAltitude.setGeometry(QtCore.QRect(10, 40, 31, 21))
+        self.inf_caseAltitude.setGeometry(QtCore.QRect(10, 40, 91, 21))
         self.inf_caseAltitude.setMargin(1)
         self.inf_caseAltitude.setMargin(1)
         self.inf_caseAltitude.setIndent(-1)
         self.inf_caseAltitude.setIndent(-1)
         self.inf_caseAltitude.setObjectName(_fromUtf8("inf_caseAltitude"))
         self.inf_caseAltitude.setObjectName(_fromUtf8("inf_caseAltitude"))
-        self.panneauInfosPlateau.addWidget(self.inf_boiteCase)
+        self.inf_caseEffet_2 = DmLabel(self.inf_boiteCase)
+        self.inf_caseEffet_2.setGeometry(QtCore.QRect(90, 0, 21, 21))
+        self.inf_caseEffet_2.setText(_fromUtf8(""))
+        self.inf_caseEffet_2.setMargin(1)
+        self.inf_caseEffet_2.setIndent(-1)
+        self.inf_caseEffet_2.setObjectName(_fromUtf8("inf_caseEffet_2"))
+        self.panneauInfosPlateau.addWidget(self.inf_bas)
         self.horizontalLayout_6.addWidget(self.inf_panneau)
         self.horizontalLayout_6.addWidget(self.inf_panneau)
         self.cbt_panneauGauche.addWidget(self.page_5)
         self.cbt_panneauGauche.addWidget(self.page_5)
         self.plateauLayoutH.addWidget(self.cbt_panneauGauche)
         self.plateauLayoutH.addWidget(self.cbt_panneauGauche)
         self.layoutCombatCentre = QtGui.QVBoxLayout()
         self.layoutCombatCentre = QtGui.QVBoxLayout()
         self.layoutCombatCentre.setSpacing(0)
         self.layoutCombatCentre.setSpacing(0)
         self.layoutCombatCentre.setObjectName(_fromUtf8("layoutCombatCentre"))
         self.layoutCombatCentre.setObjectName(_fromUtf8("layoutCombatCentre"))
-        self.cbt_vue = DmGraphicsView(self.Combats_tab)
+        self.cbt_vue = DmGraphicsView(self.combat)
         self.cbt_vue.setMinimumSize(QtCore.QSize(100, 0))
         self.cbt_vue.setMinimumSize(QtCore.QSize(100, 0))
         self.cbt_vue.setAcceptDrops(True)
         self.cbt_vue.setAcceptDrops(True)
         self.cbt_vue.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
         self.cbt_vue.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
@@ -323,7 +366,7 @@ class Ui_principal(object):
         self.cbt_vue.setViewportUpdateMode(QtGui.QGraphicsView.MinimalViewportUpdate)
         self.cbt_vue.setViewportUpdateMode(QtGui.QGraphicsView.MinimalViewportUpdate)
         self.cbt_vue.setObjectName(_fromUtf8("cbt_vue"))
         self.cbt_vue.setObjectName(_fromUtf8("cbt_vue"))
         self.layoutCombatCentre.addWidget(self.cbt_vue)
         self.layoutCombatCentre.addWidget(self.cbt_vue)
-        self.cbt_panneauBas = QtGui.QStackedWidget(self.Combats_tab)
+        self.cbt_panneauBas = QtGui.QStackedWidget(self.combat)
         self.cbt_panneauBas.setMinimumSize(QtCore.QSize(0, 75))
         self.cbt_panneauBas.setMinimumSize(QtCore.QSize(0, 75))
         self.cbt_panneauBas.setMaximumSize(QtCore.QSize(16777215, 75))
         self.cbt_panneauBas.setMaximumSize(QtCore.QSize(16777215, 75))
         self.cbt_panneauBas.setObjectName(_fromUtf8("cbt_panneauBas"))
         self.cbt_panneauBas.setObjectName(_fromUtf8("cbt_panneauBas"))
@@ -390,7 +433,7 @@ class Ui_principal(object):
         self.layoutV_droite.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint)
         self.layoutV_droite.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint)
         self.layoutV_droite.setContentsMargins(3, -1, 3, -1)
         self.layoutV_droite.setContentsMargins(3, -1, 3, -1)
         self.layoutV_droite.setObjectName(_fromUtf8("layoutV_droite"))
         self.layoutV_droite.setObjectName(_fromUtf8("layoutV_droite"))
-        self.cbt_panneauDroite = QtGui.QStackedWidget(self.Combats_tab)
+        self.cbt_panneauDroite = QtGui.QStackedWidget(self.combat)
         self.cbt_panneauDroite.setMinimumSize(QtCore.QSize(170, 0))
         self.cbt_panneauDroite.setMinimumSize(QtCore.QSize(170, 0))
         self.cbt_panneauDroite.setMaximumSize(QtCore.QSize(170, 16777215))
         self.cbt_panneauDroite.setMaximumSize(QtCore.QSize(170, 16777215))
         self.cbt_panneauDroite.setObjectName(_fromUtf8("cbt_panneauDroite"))
         self.cbt_panneauDroite.setObjectName(_fromUtf8("cbt_panneauDroite"))
@@ -634,6 +677,9 @@ class Ui_principal(object):
         self.horizontalLayout_4 = QtGui.QHBoxLayout()
         self.horizontalLayout_4 = QtGui.QHBoxLayout()
         self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
         self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
+        self.cp_importTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
+        self.cp_importTerrain.setObjectName(_fromUtf8("cp_importTerrain"))
+        self.horizontalLayout_4.addWidget(self.cp_importTerrain)
         spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         self.horizontalLayout_4.addItem(spacerItem2)
         self.horizontalLayout_4.addItem(spacerItem2)
         self.cp_nouveauTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_nouveauTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
@@ -650,6 +696,9 @@ class Ui_principal(object):
         self.cp_editerTerrain.setIcon(icon15)
         self.cp_editerTerrain.setIcon(icon15)
         self.cp_editerTerrain.setObjectName(_fromUtf8("cp_editerTerrain"))
         self.cp_editerTerrain.setObjectName(_fromUtf8("cp_editerTerrain"))
         self.horizontalLayout_4.addWidget(self.cp_editerTerrain)
         self.horizontalLayout_4.addWidget(self.cp_editerTerrain)
+        self.cp_retirerTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
+        self.cp_retirerTerrain.setObjectName(_fromUtf8("cp_retirerTerrain"))
+        self.horizontalLayout_4.addWidget(self.cp_retirerTerrain)
         self.verticalLayout_4.addLayout(self.horizontalLayout_4)
         self.verticalLayout_4.addLayout(self.horizontalLayout_4)
         icon16 = QtGui.QIcon()
         icon16 = QtGui.QIcon()
         icon16.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/montagne_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         icon16.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/montagne_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -679,13 +728,9 @@ class Ui_principal(object):
         self.horizontalLayout_7 = QtGui.QHBoxLayout()
         self.horizontalLayout_7 = QtGui.QHBoxLayout()
         self.horizontalLayout_7.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_7.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7"))
         self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7"))
-        self.cp_gommeDecor = QtGui.QToolButton(self.cp_afficherDecors)
-        self.cp_gommeDecor.setText(_fromUtf8(""))
-        icon17 = QtGui.QIcon()
-        icon17.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/gomme_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_gommeDecor.setIcon(icon17)
-        self.cp_gommeDecor.setObjectName(_fromUtf8("cp_gommeDecor"))
-        self.horizontalLayout_7.addWidget(self.cp_gommeDecor)
+        self.cp_importDecor = QtGui.QToolButton(self.cp_afficherDecors)
+        self.cp_importDecor.setObjectName(_fromUtf8("cp_importDecor"))
+        self.horizontalLayout_7.addWidget(self.cp_importDecor)
         spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         self.horizontalLayout_7.addItem(spacerItem3)
         self.horizontalLayout_7.addItem(spacerItem3)
         self.cp_nouveauDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_nouveauDecor = QtGui.QToolButton(self.cp_afficherDecors)
@@ -698,6 +743,13 @@ class Ui_principal(object):
         self.cp_editerDecor.setIcon(icon15)
         self.cp_editerDecor.setIcon(icon15)
         self.cp_editerDecor.setObjectName(_fromUtf8("cp_editerDecor"))
         self.cp_editerDecor.setObjectName(_fromUtf8("cp_editerDecor"))
         self.horizontalLayout_7.addWidget(self.cp_editerDecor)
         self.horizontalLayout_7.addWidget(self.cp_editerDecor)
+        self.cp_retirerDecor = QtGui.QToolButton(self.cp_afficherDecors)
+        self.cp_retirerDecor.setText(_fromUtf8(""))
+        icon17 = QtGui.QIcon()
+        icon17.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/gomme_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_retirerDecor.setIcon(icon17)
+        self.cp_retirerDecor.setObjectName(_fromUtf8("cp_retirerDecor"))
+        self.horizontalLayout_7.addWidget(self.cp_retirerDecor)
         self.verticalLayout_7.addLayout(self.horizontalLayout_7)
         self.verticalLayout_7.addLayout(self.horizontalLayout_7)
         icon18 = QtGui.QIcon()
         icon18 = QtGui.QIcon()
         icon18.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/decor_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         icon18.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/decor_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -727,11 +779,11 @@ class Ui_principal(object):
         self.horizontalLayout_8 = QtGui.QHBoxLayout()
         self.horizontalLayout_8 = QtGui.QHBoxLayout()
         self.horizontalLayout_8.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_8.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_8.setObjectName(_fromUtf8("horizontalLayout_8"))
         self.horizontalLayout_8.setObjectName(_fromUtf8("horizontalLayout_8"))
-        self.cp_gommeCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
-        self.cp_gommeCombattant.setText(_fromUtf8(""))
-        self.cp_gommeCombattant.setIcon(icon17)
-        self.cp_gommeCombattant.setObjectName(_fromUtf8("cp_gommeCombattant"))
-        self.horizontalLayout_8.addWidget(self.cp_gommeCombattant)
+        self.cp_importCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
+        self.cp_importCombattant.setMinimumSize(QtCore.QSize(23, 22))
+        self.cp_importCombattant.setMaximumSize(QtCore.QSize(23, 22))
+        self.cp_importCombattant.setObjectName(_fromUtf8("cp_importCombattant"))
+        self.horizontalLayout_8.addWidget(self.cp_importCombattant)
         spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         self.horizontalLayout_8.addItem(spacerItem4)
         self.horizontalLayout_8.addItem(spacerItem4)
         self.cp_nouveauCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_nouveauCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
@@ -744,6 +796,11 @@ class Ui_principal(object):
         self.cp_editerCombattant.setIcon(icon15)
         self.cp_editerCombattant.setIcon(icon15)
         self.cp_editerCombattant.setObjectName(_fromUtf8("cp_editerCombattant"))
         self.cp_editerCombattant.setObjectName(_fromUtf8("cp_editerCombattant"))
         self.horizontalLayout_8.addWidget(self.cp_editerCombattant)
         self.horizontalLayout_8.addWidget(self.cp_editerCombattant)
+        self.cp_retirerCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
+        self.cp_retirerCombattant.setText(_fromUtf8(""))
+        self.cp_retirerCombattant.setIcon(icon17)
+        self.cp_retirerCombattant.setObjectName(_fromUtf8("cp_retirerCombattant"))
+        self.horizontalLayout_8.addWidget(self.cp_retirerCombattant)
         self.verticalLayout_6.addLayout(self.horizontalLayout_8)
         self.verticalLayout_6.addLayout(self.horizontalLayout_8)
         icon19 = QtGui.QIcon()
         icon19 = QtGui.QIcon()
         icon19.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/creature_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         icon19.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/creature_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -756,8 +813,8 @@ class Ui_principal(object):
         self.creationPlateau_sousPanneauBas.setFrameShadow(QtGui.QFrame.Raised)
         self.creationPlateau_sousPanneauBas.setFrameShadow(QtGui.QFrame.Raised)
         self.creationPlateau_sousPanneauBas.setObjectName(_fromUtf8("creationPlateau_sousPanneauBas"))
         self.creationPlateau_sousPanneauBas.setObjectName(_fromUtf8("creationPlateau_sousPanneauBas"))
         self.gridLayout_3 = QtGui.QGridLayout(self.creationPlateau_sousPanneauBas)
         self.gridLayout_3 = QtGui.QGridLayout(self.creationPlateau_sousPanneauBas)
-        self.gridLayout_3.setMargin(3)
         self.gridLayout_3.setSpacing(3)
         self.gridLayout_3.setSpacing(3)
+        self.gridLayout_3.setMargin(3)
         self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
         self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
         self.cp_placerEntree = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
         self.cp_placerEntree = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
         self.cp_placerEntree.setMinimumSize(QtCore.QSize(41, 31))
         self.cp_placerEntree.setMinimumSize(QtCore.QSize(41, 31))
@@ -1145,7 +1202,7 @@ class Ui_principal(object):
         self.label_4.setObjectName(_fromUtf8("label_4"))
         self.label_4.setObjectName(_fromUtf8("label_4"))
         self.cbt_panneauDroite.addWidget(self.cbt_panneauDroite3)
         self.cbt_panneauDroite.addWidget(self.cbt_panneauDroite3)
         self.layoutV_droite.addWidget(self.cbt_panneauDroite)
         self.layoutV_droite.addWidget(self.cbt_panneauDroite)
-        self.cbt_etapeSuivante = QtGui.QPushButton(self.Combats_tab)
+        self.cbt_etapeSuivante = QtGui.QPushButton(self.combat)
         self.cbt_etapeSuivante.setMinimumSize(QtCore.QSize(0, 50))
         self.cbt_etapeSuivante.setMinimumSize(QtCore.QSize(0, 50))
         self.cbt_etapeSuivante.setMaximumSize(QtCore.QSize(1000, 50))
         self.cbt_etapeSuivante.setMaximumSize(QtCore.QSize(1000, 50))
         font = QtGui.QFont()
         font = QtGui.QFont()
@@ -1157,7 +1214,9 @@ class Ui_principal(object):
         self.plateauLayoutH.addLayout(self.layoutV_droite)
         self.plateauLayoutH.addLayout(self.layoutV_droite)
         self.plateauLayoutH.setStretch(1, 1)
         self.plateauLayoutH.setStretch(1, 1)
         self.layoutCombat.addLayout(self.plateauLayoutH)
         self.layoutCombat.addLayout(self.plateauLayoutH)
-        self.horizontalLayout_3.addLayout(self.layoutCombat)
+        self.horizontalLayout_9.addLayout(self.layoutCombat)
+        self.combatPanneau.addWidget(self.combat)
+        self.horizontalLayout_3.addWidget(self.combatPanneau)
         self.dm_panneauCentre.addTab(self.Combats_tab, _fromUtf8(""))
         self.dm_panneauCentre.addTab(self.Combats_tab, _fromUtf8(""))
         self.Monde_tab = QtGui.QWidget()
         self.Monde_tab = QtGui.QWidget()
         self.Monde_tab.setObjectName(_fromUtf8("Monde_tab"))
         self.Monde_tab.setObjectName(_fromUtf8("Monde_tab"))
@@ -1543,18 +1602,23 @@ class Ui_principal(object):
         self.menubar.addAction(self.menuAide.menuAction())
         self.menubar.addAction(self.menuAide.menuAction())
 
 
         self.retranslateUi(principal)
         self.retranslateUi(principal)
-        self.dm_panneauCentre.setCurrentIndex(0)
+        self.dm_panneauCentre.setCurrentIndex(1)
+        self.combatPanneau.setCurrentIndex(1)
         self.cbt_panneauHaut.setCurrentIndex(1)
         self.cbt_panneauHaut.setCurrentIndex(1)
         self.cbt_panneauGauche.setCurrentIndex(1)
         self.cbt_panneauGauche.setCurrentIndex(1)
         self.cbt_panneauBas.setCurrentIndex(1)
         self.cbt_panneauBas.setCurrentIndex(1)
         self.cbt_panneauDroite.setCurrentIndex(1)
         self.cbt_panneauDroite.setCurrentIndex(1)
-        self.cp_ongletsListes.setCurrentIndex(2)
-        self.pi_ongletsListes.setCurrentIndex(2)
+        self.cp_ongletsListes.setCurrentIndex(0)
+        self.pi_ongletsListes.setCurrentIndex(0)
         self.tabStatutAppli.setCurrentIndex(2)
         self.tabStatutAppli.setCurrentIndex(2)
         QtCore.QMetaObject.connectSlotsByName(principal)
         QtCore.QMetaObject.connectSlotsByName(principal)
 
 
     def retranslateUi(self, principal):
     def retranslateUi(self, principal):
         principal.setWindowTitle(_translate("principal", "Bienvenue sur le Dé-Monde", None))
         principal.setWindowTitle(_translate("principal", "Bienvenue sur le Dé-Monde", None))
+        self.label_5.setText(_translate("principal", "Partie 1 / Chapitre 1", None))
+        self.label_6.setText(_translate("principal", "Règles utilisées", None))
+        self.label_7.setText(_translate("principal", "Participants: ", None))
+        self.dm_panneauCentre.setTabText(self.dm_panneauCentre.indexOf(self.tab), _translate("principal", "Partie", None))
         self.cbt_sauver.setToolTip(_translate("principal", "Enregistrer le combat", None))
         self.cbt_sauver.setToolTip(_translate("principal", "Enregistrer le combat", None))
         self.cbt_nom.setText(_translate("principal", "    La tour sombre [Non Publié]    ", None))
         self.cbt_nom.setText(_translate("principal", "    La tour sombre [Non Publié]    ", None))
         self.cbt_fermer.setToolTip(_translate("principal", "Fermer le combat", None))
         self.cbt_fermer.setToolTip(_translate("principal", "Fermer le combat", None))
@@ -1574,9 +1638,6 @@ class Ui_principal(object):
         self.inf_pionEffet.setToolTip(_translate("principal", "Evanoui", None))
         self.inf_pionEffet.setToolTip(_translate("principal", "Evanoui", None))
         self.inf_pionNom.setText(_translate("principal", "nom", None))
         self.inf_pionNom.setText(_translate("principal", "nom", None))
         self.inf_decorNom.setText(_translate("principal", "nom", None))
         self.inf_decorNom.setText(_translate("principal", "nom", None))
-        self.inf_decorEffet.setText(_translate("principal", "TextLabel", None))
-        self.inf_decorDetruit.setText(_translate("principal", "TextLabel", None))
-        self.inf_decorVerrouille.setText(_translate("principal", "TextLabel", None))
         self.infoPionEnCours_depRestant_2.setText(_translate("principal", "Dep.: 0 ", None))
         self.infoPionEnCours_depRestant_2.setText(_translate("principal", "Dep.: 0 ", None))
         self.infoPionEnCours_aJoue_2.setText(_translate("principal", "A joué: Non", None))
         self.infoPionEnCours_aJoue_2.setText(_translate("principal", "A joué: Non", None))
         self.infoPionEnCours_endormi_2.setToolTip(_translate("principal", "Endormi", None))
         self.infoPionEnCours_endormi_2.setToolTip(_translate("principal", "Endormi", None))
@@ -1629,16 +1690,20 @@ class Ui_principal(object):
         item.setText(_translate("principal", "code", None))
         item.setText(_translate("principal", "code", None))
         item = self.cp_listeTerrains.horizontalHeaderItem(1)
         item = self.cp_listeTerrains.horizontalHeaderItem(1)
         item.setText(_translate("principal", "Terrain", None))
         item.setText(_translate("principal", "Terrain", None))
+        self.cp_importTerrain.setText(_translate("principal", "...", None))
+        self.cp_retirerTerrain.setText(_translate("principal", "...", None))
         self.cp_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherTerrains), _translate("principal", "Afficher la liste des terrains", None))
         self.cp_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherTerrains), _translate("principal", "Afficher la liste des terrains", None))
         item = self.cp_listeDecors.horizontalHeaderItem(0)
         item = self.cp_listeDecors.horizontalHeaderItem(0)
         item.setText(_translate("principal", "code", None))
         item.setText(_translate("principal", "code", None))
         item = self.cp_listeDecors.horizontalHeaderItem(1)
         item = self.cp_listeDecors.horizontalHeaderItem(1)
         item.setText(_translate("principal", "Decor", None))
         item.setText(_translate("principal", "Decor", None))
+        self.cp_importDecor.setText(_translate("principal", "...", None))
         self.cp_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherDecors), _translate("principal", "Afficher la liste des décors", None))
         self.cp_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherDecors), _translate("principal", "Afficher la liste des décors", None))
         item = self.cp_listeCreatures.horizontalHeaderItem(0)
         item = self.cp_listeCreatures.horizontalHeaderItem(0)
         item.setText(_translate("principal", "code", None))
         item.setText(_translate("principal", "code", None))
         item = self.cp_listeCreatures.horizontalHeaderItem(1)
         item = self.cp_listeCreatures.horizontalHeaderItem(1)
         item.setText(_translate("principal", "Creature", None))
         item.setText(_translate("principal", "Creature", None))
+        self.cp_importCombattant.setText(_translate("principal", "...", None))
         self.cp_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherCreatures), _translate("principal", "Afficher la liste des créatures", None))
         self.cp_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherCreatures), _translate("principal", "Afficher la liste des créatures", None))
         self.cp_placerEntree.setToolTip(_translate("principal", "Placer la/les entrée(s)", None))
         self.cp_placerEntree.setToolTip(_translate("principal", "Placer la/les entrée(s)", None))
         self.cp_placerEntree.setText(_translate("principal", "...", None))
         self.cp_placerEntree.setText(_translate("principal", "...", None))

+ 10 - 10
lib/ui/editionCombattant.ui

@@ -10,19 +10,19 @@
     <x>0</x>
     <x>0</x>
     <y>0</y>
     <y>0</y>
     <width>679</width>
     <width>679</width>
-    <height>484</height>
+    <height>486</height>
    </rect>
    </rect>
   </property>
   </property>
   <property name="minimumSize">
   <property name="minimumSize">
    <size>
    <size>
-    <width>0</width>
+    <width>679</width>
     <height>484</height>
     <height>484</height>
    </size>
    </size>
   </property>
   </property>
   <property name="maximumSize">
   <property name="maximumSize">
    <size>
    <size>
-    <width>16777215</width>
-    <height>10000</height>
+    <width>679</width>
+    <height>486</height>
    </size>
    </size>
   </property>
   </property>
   <property name="windowTitle">
   <property name="windowTitle">
@@ -508,7 +508,7 @@
           </font>
           </font>
          </property>
          </property>
          <property name="currentIndex">
          <property name="currentIndex">
-          <number>1</number>
+          <number>4</number>
          </property>
          </property>
          <widget class="QWidget" name="page_nom">
          <widget class="QWidget" name="page_nom">
           <widget class="DmLineEdit" name="edc_nom">
           <widget class="DmLineEdit" name="edc_nom">
@@ -1823,7 +1823,7 @@ image</string>
             <enum>QTabWidget::Rounded</enum>
             <enum>QTabWidget::Rounded</enum>
            </property>
            </property>
            <property name="currentIndex">
            <property name="currentIndex">
-            <number>4</number>
+            <number>0</number>
            </property>
            </property>
            <property name="iconSize">
            <property name="iconSize">
             <size>
             <size>
@@ -2845,13 +2845,13 @@ parlées : </string>
  </widget>
  </widget>
  <customwidgets>
  <customwidgets>
   <customwidget>
   <customwidget>
-   <class>DmTableMenu</class>
-   <extends>QTableWidget</extends>
+   <class>DmLineEdit</class>
+   <extends>QLineEdit</extends>
    <header location="global">dm.h</header>
    <header location="global">dm.h</header>
   </customwidget>
   </customwidget>
   <customwidget>
   <customwidget>
-   <class>DmLineEdit</class>
-   <extends>QLineEdit</extends>
+   <class>DmTableMenu</class>
+   <extends>QTableWidget</extends>
    <header location="global">dm.h</header>
    <header location="global">dm.h</header>
   </customwidget>
   </customwidget>
   <customwidget>
   <customwidget>

+ 9 - 4
lib/ui/editionDecor.ui

@@ -417,7 +417,7 @@
           </font>
           </font>
          </property>
          </property>
          <property name="currentIndex">
          <property name="currentIndex">
-          <number>0</number>
+          <number>1</number>
          </property>
          </property>
          <widget class="QWidget" name="page_nom">
          <widget class="QWidget" name="page_nom">
           <widget class="DmLineEdit" name="edd_nom">
           <widget class="DmLineEdit" name="edd_nom">
@@ -1339,7 +1339,7 @@ image</string>
             <string>Notes :</string>
             <string>Notes :</string>
            </property>
            </property>
           </widget>
           </widget>
-          <widget class="QTextEdit" name="edd_notes">
+          <widget class="DmTextEdit" name="edd_notes">
            <property name="geometry">
            <property name="geometry">
             <rect>
             <rect>
              <x>30</x>
              <x>30</x>
@@ -1613,8 +1613,8 @@ image</string>
  </widget>
  </widget>
  <customwidgets>
  <customwidgets>
   <customwidget>
   <customwidget>
-   <class>DmTableMenu</class>
-   <extends>QTableWidget</extends>
+   <class>DmTextEdit</class>
+   <extends>QTextEdit</extends>
    <header location="global">dm.h</header>
    <header location="global">dm.h</header>
   </customwidget>
   </customwidget>
   <customwidget>
   <customwidget>
@@ -1622,6 +1622,11 @@ image</string>
    <extends>QLineEdit</extends>
    <extends>QLineEdit</extends>
    <header location="global">dm.h</header>
    <header location="global">dm.h</header>
   </customwidget>
   </customwidget>
+  <customwidget>
+   <class>DmTableMenu</class>
+   <extends>QTableWidget</extends>
+   <header location="global">dm.h</header>
+  </customwidget>
   <customwidget>
   <customwidget>
    <class>DmLabel</class>
    <class>DmLabel</class>
    <extends>QLabel</extends>
    <extends>QLabel</extends>

+ 5 - 0
lib/ui/ressource.qrc

@@ -52,6 +52,11 @@
         <file>ressource/depart_16.png</file>
         <file>ressource/depart_16.png</file>
         <file>ressource/rafraichir_16.png</file>
         <file>ressource/rafraichir_16.png</file>
         <file>ressource/potPeinture_16.png</file>
         <file>ressource/potPeinture_16.png</file>
+        <file>ressource/verrou_ferme_16.png</file>
+        <file>ressource/verrou_ouvert_16.png</file>
+		<file>ressource/brise_16.png</file>
+		<file>ressource/import_16.png</file>
+		<file>ressource/moins_16.png</file>
     </qresource>
     </qresource>
     <qresource prefix="/interface/24" lang="fr">
     <qresource prefix="/interface/24" lang="fr">
         <file>ressource/poids_24.png</file>
         <file>ressource/poids_24.png</file>

+ 108 - 33
lib/ui/ressource_rc.py

@@ -2,7 +2,7 @@
 
 
 # Resource object code
 # Resource object code
 #
 #
-# Created: lun. 7. sept. 11:59:04 2015
+# Created: mer. 9. sept. 14:29:51 2015
 #      by: The Resource Compiler for PyQt (Qt v4.8.5)
 #      by: The Resource Compiler for PyQt (Qt v4.8.5)
 #
 #
 # WARNING! All changes made in this file will be lost!
 # WARNING! All changes made in this file will be lost!
@@ -2418,6 +2418,24 @@ qt_resource_data = "\
 \xe8\xc6\x26\x77\x73\xe4\x16\xc4\x2b\x03\xb9\x95\xa8\xba\xab\xa3\
 \xe8\xc6\x26\x77\x73\xe4\x16\xc4\x2b\x03\xb9\x95\xa8\xba\xab\xa3\
 \x99\x84\x86\x87\xa5\xa4\x96\x9d\x2a\xbd\x01\xfd\xab\x14\x9a\x23\
 \x99\x84\x86\x87\xa5\xa4\x96\x9d\x2a\xbd\x01\xfd\xab\x14\x9a\x23\
 \x98\x71\xb2\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \x98\x71\xb2\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xfc\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x00\xc3\x49\x44\x41\x54\x38\x8d\xa5\x92\x31\x0e\x01\x51\
+\x14\x45\x4f\x08\x0b\xa0\x98\xd0\x1b\x9d\xb0\x08\x91\x88\xbd\xb0\
+\x05\x89\x06\xb1\x00\xad\x15\x08\xb1\x00\xb1\x0d\x91\xd0\x51\xa9\
+\xa6\x99\x91\x51\xb8\xc5\x64\xfc\xff\x27\xbe\x97\xdc\xe6\x9f\xfb\
+\x4e\xf1\xf2\xc1\x3c\x23\xe0\x04\x3c\x95\x23\x30\xb4\x74\xbf\x66\
+\x06\xa4\x96\x4c\x8b\x96\x07\x2a\x26\xc0\x1c\x68\x2b\x4b\xbd\xa5\
+\x40\xdf\x25\x38\xa8\xb4\x30\xb0\x95\xd8\xde\x25\x78\xa8\xd4\x31\
+\xb0\xae\xd8\xdd\x25\x88\x54\x0a\x0c\x2c\x10\x8b\x6c\xcb\x13\x20\
+\x56\x69\x03\xac\x73\xd9\x88\xc5\xc0\x38\xbf\xdc\xc4\x7e\x79\x5b\
+\x1a\x59\x41\x68\x29\xbd\x14\x13\x0b\x8b\x04\x67\xa0\x06\xd4\x81\
+\x8b\x8f\x60\x9b\xe1\x3b\x1f\x41\x0c\x94\x94\xc4\x47\x90\x02\x65\
+\xc5\xeb\x06\x29\x9f\xcf\xd3\xfb\x47\xe0\x4a\x2b\x2b\xa8\x02\xb7\
+\x1f\x96\xaf\x40\x05\xe0\x0d\x2d\x66\x89\x76\xea\xd1\x1e\xe5\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \x00\x00\x00\x88\
 \x00\x00\x00\x88\
 \x89\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -2690,6 +2708,23 @@ qt_resource_data = "\
 \xf1\x14\x7a\xc3\x7d\x78\x73\x45\x80\x7e\xdc\xf8\xff\x2b\x67\xba\
 \xf1\x14\x7a\xc3\x7d\x78\x73\x45\x80\x7e\xdc\xf8\xff\x2b\x67\xba\
 \x46\x5f\xfe\xc2\x2f\x49\xaf\x6c\x66\x2d\xab\xa2\x88\x00\x00\x00\
 \x46\x5f\xfe\xc2\x2f\x49\xaf\x6c\x66\x2d\xab\xa2\x88\x00\x00\x00\
 \x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xf0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x00\xb7\x49\x44\x41\x54\x38\x8d\x9d\x92\x31\x0a\xc2\x40\
+\x10\x45\x5f\x2f\x82\x60\xad\xde\x45\x82\xb5\x60\x2f\xde\x22\x10\
+\x44\xd0\x4e\x8f\x20\x88\x56\xde\xc3\x15\xef\x23\x5a\x68\x61\xb2\
+\x16\x99\x80\x6c\xd6\xc9\x66\x07\x5e\xf5\x67\xde\xc2\xec\x80\xbf\
+\x12\xc0\x00\x77\xe1\x02\x8c\xff\xf4\xd6\x6a\x01\xe4\x80\x75\xf8\
+\x00\xf3\xa6\xe1\x11\xf0\x16\x41\x0a\xf4\x84\x0c\x28\x80\x17\x30\
+\xd0\x04\x99\xbc\xb6\xf7\x64\x07\xc9\x52\x4d\x70\x94\xa6\xa9\x27\
+\x9b\x49\x76\xd2\x04\x89\x48\xba\x9e\x6c\x22\x82\xb3\x26\xd0\xaa\
+\x51\xb0\xa2\x5c\x94\xbb\x7d\x97\x02\x58\xfa\x04\x26\x60\xb8\xc2\
+\x84\x08\x72\x60\x0d\x6c\xa8\xdf\x45\x90\xe0\xfa\x93\xdd\x62\x04\
+\x0f\xa0\x23\x3c\x63\x04\x16\xe8\x0b\x51\x3b\xb0\xc0\x90\xf2\xbc\
+\xa3\x05\xad\x7e\x61\xd7\x42\xb0\xad\x86\xbe\x7f\xac\x79\xe0\x12\
+\x55\x6b\x16\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \x00\x00\x01\xd3\
 \x00\x00\x01\xd3\
 \x89\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -2722,6 +2757,29 @@ qt_resource_data = "\
 \xc0\xd7\x35\x30\xa6\xb7\xb1\xdf\x38\xff\xae\x81\xe1\x16\x64\x3b\
 \xc0\xd7\x35\x30\xa6\xb7\xb1\xdf\x38\xff\xae\x81\xe1\x16\x64\x3b\
 \x6c\xeb\x19\x9b\xf5\x20\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
 \x6c\xeb\x19\x9b\xf5\x20\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
 \x60\x82\
 \x60\x82\
+\x00\x00\x01\x45\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x01\x0c\x49\x44\x41\x54\x38\x8d\xb5\xd1\x4d\x2b\xc4\x51\
+\x18\x05\xf0\xdf\x68\xe2\x9f\x85\x61\xb2\xd0\x94\x97\xa2\x58\xce\
+\x42\x59\xc8\xc6\xc2\x46\x49\x16\x6c\x95\x12\x86\xbc\x24\xb6\xb3\
+\xd1\x28\xd9\xce\xd2\xbb\x10\x93\x8d\xa5\x05\x2b\x0b\xc9\x17\xf0\
+\x61\x2c\xdc\x99\xa6\xbf\x31\x6a\xe4\xd4\x53\xb7\x73\x9e\x73\xee\
+\xf3\xdc\x4b\x7d\x24\xd0\xfc\x4b\x4f\x5d\xec\xe1\x11\x43\x8d\x98\
+\x53\xb8\x44\x1a\x37\x98\x41\x37\x76\xb0\x1d\xf8\x6f\x68\xc2\x2e\
+\xc6\x11\xe1\x03\xf3\x81\xcf\xe3\x1d\xb3\x58\xc3\x54\xdc\xdc\x89\
+\x0b\x4c\xe0\x18\x59\xe4\x82\xb1\x80\x36\x4c\xa2\x84\xa5\x78\xc0\
+\x08\xee\xc2\x88\x29\x9c\x60\x0b\x73\x58\x44\x3b\x0e\x30\x8c\x7e\
+\xbc\x61\xa1\x6c\xce\xe1\x1a\x2d\x98\xc6\x21\x5e\x30\x18\x26\x4a\
+\x84\xbe\x44\xb8\x79\x05\xad\xb8\xc7\x32\x6c\xe2\x39\xac\x30\x8a\
+\x1e\x3c\x60\x1d\x63\x35\xde\x29\x8b\x3e\x3c\x61\xa3\x4c\x16\x90\
+\x89\xad\xf4\x1a\xc6\xae\x85\x4c\xf0\x54\x10\x0f\x80\x2e\xac\xfe\
+\x25\x60\x00\x67\x38\x42\x6f\x23\x01\x57\xbe\xbe\x2e\x8d\xf3\x46\
+\x02\x4e\x7f\x38\xff\x4f\x40\x1e\x45\xec\x57\xd5\x6d\x95\x5e\x8a\
+\x69\xc5\xe0\xa9\x20\x89\x8e\x58\x45\x55\x7a\x54\x43\x4f\xc2\x27\
+\x05\xd0\x33\x07\x2e\x4d\x6a\x17\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
 \x00\x00\x01\x17\
 \x00\x00\x01\x17\
 \x89\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -4656,6 +4714,11 @@ qt_resource_name = "\
 \x02\x44\x46\x67\
 \x02\x44\x46\x67\
 \x00\x61\
 \x00\x61\
 \x00\x72\x00\x63\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x72\x00\x63\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x13\
+\x0a\xf6\x29\x07\
+\x00\x76\
+\x00\x65\x00\x72\x00\x72\x00\x6f\x00\x75\x00\x5f\x00\x66\x00\x65\x00\x72\x00\x6d\x00\x65\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\
+\x00\x6e\x00\x67\
 \x00\x0d\
 \x00\x0d\
 \x06\x9a\x09\xc7\
 \x06\x9a\x09\xc7\
 \x00\x73\
 \x00\x73\
@@ -4710,10 +4773,19 @@ qt_resource_name = "\
 \x03\x23\xa8\x07\
 \x03\x23\xa8\x07\
 \x00\x63\
 \x00\x63\
 \x00\x6f\x00\x72\x00\x62\x00\x65\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x6f\x00\x72\x00\x62\x00\x65\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x14\
+\x0d\xb5\x56\x67\
+\x00\x76\
+\x00\x65\x00\x72\x00\x72\x00\x6f\x00\x75\x00\x5f\x00\x6f\x00\x75\x00\x76\x00\x65\x00\x72\x00\x74\x00\x5f\x00\x31\x00\x36\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
 \x00\x0d\
 \x00\x0d\
 \x05\x0c\x56\xe7\
 \x05\x0c\x56\xe7\
 \x00\x65\
 \x00\x65\
 \x00\x63\x00\x6c\x00\x61\x00\x69\x00\x72\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x63\x00\x6c\x00\x61\x00\x69\x00\x72\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x0f\x7b\x44\x27\
+\x00\x62\
+\x00\x72\x00\x69\x00\x73\x00\x65\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x11\
 \x00\x11\
 \x0e\xc0\xe0\xe7\
 \x0e\xc0\xe0\xe7\
 \x00\x66\
 \x00\x66\
@@ -4795,9 +4867,9 @@ qt_resource_struct = "\
 \x00\x00\x00\x38\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0a\
 \x00\x00\x00\x38\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0a\
 \x00\x00\x00\x22\x00\x02\x00\x00\x00\x01\x00\x00\x00\x06\
 \x00\x00\x00\x22\x00\x02\x00\x00\x00\x01\x00\x00\x00\x06\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x03\x00\x00\x00\x07\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x03\x00\x00\x00\x07\
-\x00\x00\x0c\x58\x00\x00\x00\x4a\x00\x25\x00\x00\xec\x08\
-\x00\x00\x0c\x38\x00\x00\x00\x4a\x00\x25\x00\x00\xbb\xd4\
-\x00\x00\x0c\x14\x00\x00\x00\x4a\x00\x25\x00\x00\xa9\x00\
+\x00\x00\x0c\xd0\x00\x00\x00\x4a\x00\x25\x00\x00\xef\x45\
+\x00\x00\x0c\xb0\x00\x00\x00\x4a\x00\x25\x00\x00\xbf\x11\
+\x00\x00\x0c\x8c\x00\x00\x00\x4a\x00\x25\x00\x00\xac\x3d\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x24\x00\x00\x00\x0b\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x24\x00\x00\x00\x0b\
 \x00\x00\x01\xfe\x00\x00\x00\x4a\x00\x25\x00\x00\x20\xd7\
 \x00\x00\x01\xfe\x00\x00\x00\x4a\x00\x25\x00\x00\x20\xd7\
 \x00\x00\x00\x5a\x00\x00\x00\x4a\x00\x25\x00\x00\x00\x00\
 \x00\x00\x00\x5a\x00\x00\x00\x4a\x00\x25\x00\x00\x00\x00\
@@ -4836,13 +4908,13 @@ qt_resource_struct = "\
 \x00\x00\x00\xec\x00\x00\x00\x4a\x00\x25\x00\x00\x0a\xeb\
 \x00\x00\x00\xec\x00\x00\x00\x4a\x00\x25\x00\x00\x0a\xeb\
 \x00\x00\x01\x6a\x00\x00\x00\x4a\x00\x25\x00\x00\x14\xfe\
 \x00\x00\x01\x6a\x00\x00\x00\x4a\x00\x25\x00\x00\x14\xfe\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x06\x00\x00\x00\x30\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x06\x00\x00\x00\x30\
-\x00\x00\x0c\x76\x00\x00\x00\x4a\x00\x25\x00\x00\xf7\xdc\
-\x00\x00\x0d\x18\x00\x00\x00\x4a\x00\x25\x00\x01\x00\x75\
-\x00\x00\x0c\xfc\x00\x00\x00\x4a\x00\x25\x00\x00\xff\x20\
-\x00\x00\x0c\x9a\x00\x00\x00\x4a\x00\x25\x00\x00\xf9\xef\
-\x00\x00\x0c\xde\x00\x00\x00\x4a\x00\x25\x00\x00\xfd\xb0\
-\x00\x00\x0c\xc0\x00\x00\x00\x4a\x00\x25\x00\x00\xfc\x02\
-\x00\x00\x00\x42\x00\x02\x00\x00\x00\x34\x00\x00\x00\x37\
+\x00\x00\x0c\xee\x00\x00\x00\x4a\x00\x25\x00\x00\xfb\x19\
+\x00\x00\x0d\x90\x00\x00\x00\x4a\x00\x25\x00\x01\x03\xb2\
+\x00\x00\x0d\x74\x00\x00\x00\x4a\x00\x25\x00\x01\x02\x5d\
+\x00\x00\x0d\x12\x00\x00\x00\x4a\x00\x25\x00\x00\xfd\x2c\
+\x00\x00\x0d\x56\x00\x00\x00\x4a\x00\x25\x00\x01\x00\xed\
+\x00\x00\x0d\x38\x00\x00\x00\x4a\x00\x25\x00\x00\xff\x3f\
+\x00\x00\x00\x42\x00\x02\x00\x00\x00\x37\x00\x00\x00\x37\
 \x00\x00\x08\x20\x00\x00\x00\x4a\x00\x25\x00\x00\x82\xa3\
 \x00\x00\x08\x20\x00\x00\x00\x4a\x00\x25\x00\x00\x82\xa3\
 \x00\x00\x05\xea\x00\x00\x00\x4a\x00\x25\x00\x00\x6e\x83\
 \x00\x00\x05\xea\x00\x00\x00\x4a\x00\x25\x00\x00\x6e\x83\
 \x00\x00\x07\x3e\x00\x00\x00\x4a\x00\x25\x00\x00\x7a\xca\
 \x00\x00\x07\x3e\x00\x00\x00\x4a\x00\x25\x00\x00\x7a\xca\
@@ -4852,47 +4924,50 @@ qt_resource_struct = "\
 \x00\x00\x07\xdc\x00\x00\x00\x4a\x00\x25\x00\x00\x7f\xef\
 \x00\x00\x07\xdc\x00\x00\x00\x4a\x00\x25\x00\x00\x7f\xef\
 \x00\x00\x09\x06\x00\x00\x00\x4a\x00\x25\x00\x00\x8c\xce\
 \x00\x00\x09\x06\x00\x00\x00\x4a\x00\x25\x00\x00\x8c\xce\
 \x00\x00\x07\x24\x00\x00\x00\x4a\x00\x25\x00\x00\x79\xb9\
 \x00\x00\x07\x24\x00\x00\x00\x4a\x00\x25\x00\x00\x79\xb9\
-\x00\x00\x0b\x24\x00\x00\x00\x4a\x00\x25\x00\x00\x9f\xa3\
+\x00\x00\x0b\x9c\x00\x00\x00\x4a\x00\x25\x00\x00\xa2\xe0\
 \x00\x00\x05\x92\x00\x00\x00\x4a\x00\x25\x00\x00\x6a\xf2\
 \x00\x00\x05\x92\x00\x00\x00\x4a\x00\x25\x00\x00\x6a\xf2\
-\x00\x00\x09\x40\x00\x00\x00\x4a\x00\x25\x00\x00\x8e\x0e\
-\x00\x00\x0a\x34\x00\x00\x00\x4a\x00\x25\x00\x00\x97\x4a\
+\x00\x00\x09\x6c\x00\x00\x00\x4a\x00\x25\x00\x00\x8f\x0e\
+\x00\x00\x0a\x60\x00\x00\x00\x4a\x00\x25\x00\x00\x98\x4a\
 \x00\x00\x06\x58\x00\x00\x00\x4a\x00\x25\x00\x00\x71\x9a\
 \x00\x00\x06\x58\x00\x00\x00\x4a\x00\x25\x00\x00\x71\x9a\
-\x00\x00\x0b\x6c\x00\x00\x00\x4a\x00\x25\x00\x00\xa2\x30\
-\x00\x00\x09\x58\x00\x00\x00\x4a\x00\x25\x00\x00\x8f\x82\
-\x00\x00\x0a\x74\x00\x00\x00\x4a\x00\x25\x00\x00\x98\xf3\
-\x00\x00\x0a\xb6\x00\x00\x00\x4a\x00\x25\x00\x00\x9b\x63\
-\x00\x00\x09\xbc\x00\x00\x00\x4a\x00\x25\x00\x00\x93\x76\
-\x00\x00\x0b\x3e\x00\x00\x00\x4a\x00\x25\x00\x00\xa1\x0f\
+\x00\x00\x0b\xe4\x00\x00\x00\x4a\x00\x25\x00\x00\xa5\x6d\
+\x00\x00\x09\x84\x00\x00\x00\x4a\x00\x25\x00\x00\x90\x82\
+\x00\x00\x0a\xa0\x00\x00\x00\x4a\x00\x25\x00\x00\x99\xf3\
+\x00\x00\x0a\xe2\x00\x00\x00\x4a\x00\x25\x00\x00\x9c\x63\
+\x00\x00\x09\xe8\x00\x00\x00\x4a\x00\x25\x00\x00\x94\x76\
+\x00\x00\x0b\xb6\x00\x00\x00\x4a\x00\x25\x00\x00\xa4\x4c\
 \x00\x00\x05\xac\x00\x00\x00\x4a\x00\x25\x00\x00\x6c\x6f\
 \x00\x00\x05\xac\x00\x00\x00\x4a\x00\x25\x00\x00\x6c\x6f\
 \x00\x00\x08\x82\x00\x00\x00\x4a\x00\x25\x00\x00\x85\xe9\
 \x00\x00\x08\x82\x00\x00\x00\x4a\x00\x25\x00\x00\x85\xe9\
-\x00\x00\x0a\xdc\x00\x00\x00\x4a\x00\x25\x00\x00\x9c\xb1\
-\x00\x00\x09\x74\x00\x00\x00\x4a\x00\x25\x00\x00\x90\x67\
-\x00\x00\x0b\x88\x00\x00\x00\x4a\x00\x25\x00\x00\xa4\x0d\
+\x00\x00\x0b\x36\x00\x00\x00\x4a\x00\x25\x00\x00\x9e\xa5\
+\x00\x00\x09\xa0\x00\x00\x00\x4a\x00\x25\x00\x00\x91\x67\
+\x00\x00\x0c\x00\x00\x00\x00\x4a\x00\x25\x00\x00\xa7\x4a\
 \x00\x00\x08\xa4\x00\x00\x00\x4a\x00\x25\x00\x00\x87\x8b\
 \x00\x00\x08\xa4\x00\x00\x00\x4a\x00\x25\x00\x00\x87\x8b\
 \x00\x00\x07\x00\x00\x00\x00\x4a\x00\x25\x00\x00\x78\x41\
 \x00\x00\x07\x00\x00\x00\x00\x4a\x00\x25\x00\x00\x78\x41\
 \x00\x00\x08\xc4\x00\x00\x00\x4a\x00\x25\x00\x00\x89\xb7\
 \x00\x00\x08\xc4\x00\x00\x00\x4a\x00\x25\x00\x00\x89\xb7\
-\x00\x00\x09\x20\x00\x00\x00\x4a\x00\x25\x00\x00\x8d\x82\
+\x00\x00\x09\x4c\x00\x00\x00\x4a\x00\x25\x00\x00\x8e\x82\
 \x00\x00\x07\xf6\x00\x00\x00\x4a\x00\x25\x00\x00\x81\x42\
 \x00\x00\x07\xf6\x00\x00\x00\x4a\x00\x25\x00\x00\x81\x42\
-\x00\x00\x0a\x50\x00\x00\x00\x4a\x00\x25\x00\x00\x98\x99\
-\x00\x00\x0a\x96\x00\x00\x00\x4a\x00\x25\x00\x00\x9a\x37\
+\x00\x00\x0a\x7c\x00\x00\x00\x4a\x00\x25\x00\x00\x99\x99\
+\x00\x00\x0a\xc2\x00\x00\x00\x4a\x00\x25\x00\x00\x9b\x37\
 \x00\x00\x06\x2e\x00\x00\x00\x4a\x00\x25\x00\x00\x70\x5f\
 \x00\x00\x06\x2e\x00\x00\x00\x4a\x00\x25\x00\x00\x70\x5f\
-\x00\x00\x0b\xea\x00\x00\x00\x4a\x00\x25\x00\x00\xa7\xfc\
+\x00\x00\x0c\x62\x00\x00\x00\x4a\x00\x25\x00\x00\xab\x39\
 \x00\x00\x06\xd2\x00\x00\x00\x4a\x00\x25\x00\x00\x77\x3d\
 \x00\x00\x06\xd2\x00\x00\x00\x4a\x00\x25\x00\x00\x77\x3d\
+\x00\x00\x09\x20\x00\x00\x00\x4a\x00\x25\x00\x00\x8d\x82\
 \x00\x00\x08\x44\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x12\
 \x00\x00\x08\x44\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x12\
 \x00\x00\x05\x28\x00\x00\x00\x4a\x00\x25\x00\x00\x67\x1a\
 \x00\x00\x05\x28\x00\x00\x00\x4a\x00\x25\x00\x00\x67\x1a\
 \x00\x00\x06\xb2\x00\x00\x00\x4a\x00\x25\x00\x00\x76\x50\
 \x00\x00\x06\xb2\x00\x00\x00\x4a\x00\x25\x00\x00\x76\x50\
-\x00\x00\x09\x98\x00\x00\x00\x4a\x00\x25\x00\x00\x92\x00\
+\x00\x00\x09\xc4\x00\x00\x00\x4a\x00\x25\x00\x00\x93\x00\
 \x00\x00\x05\xcc\x00\x00\x00\x4a\x00\x25\x00\x00\x6d\xd0\
 \x00\x00\x05\xcc\x00\x00\x00\x4a\x00\x25\x00\x00\x6d\xd0\
-\x00\x00\x09\xe0\x00\x00\x00\x4a\x00\x25\x00\x00\x94\xf4\
+\x00\x00\x0a\x0c\x00\x00\x00\x4a\x00\x25\x00\x00\x95\xf4\
 \x00\x00\x06\x92\x00\x00\x00\x4a\x00\x25\x00\x00\x74\xaa\
 \x00\x00\x06\x92\x00\x00\x00\x4a\x00\x25\x00\x00\x74\xaa\
 \x00\x00\x06\x74\x00\x00\x00\x4a\x00\x25\x00\x00\x72\xe8\
 \x00\x00\x06\x74\x00\x00\x00\x4a\x00\x25\x00\x00\x72\xe8\
+\x00\x00\x0b\x08\x00\x00\x00\x4a\x00\x25\x00\x00\x9d\xb1\
 \x00\x00\x05\x4a\x00\x00\x00\x4a\x00\x25\x00\x00\x68\xa4\
 \x00\x00\x05\x4a\x00\x00\x00\x4a\x00\x25\x00\x00\x68\xa4\
-\x00\x00\x0a\x08\x00\x00\x00\x4a\x00\x25\x00\x00\x96\x3d\
-\x00\x00\x0a\xfc\x00\x00\x00\x4a\x00\x25\x00\x00\x9e\x88\
+\x00\x00\x0a\x34\x00\x00\x00\x4a\x00\x25\x00\x00\x97\x3d\
+\x00\x00\x0b\x74\x00\x00\x00\x4a\x00\x25\x00\x00\xa1\xc5\
 \x00\x00\x06\x10\x00\x00\x00\x4a\x00\x25\x00\x00\x6f\x58\
 \x00\x00\x06\x10\x00\x00\x00\x4a\x00\x25\x00\x00\x6f\x58\
-\x00\x00\x0b\xa8\x00\x00\x00\x4a\x00\x25\x00\x00\xa5\x54\
+\x00\x00\x0c\x20\x00\x00\x00\x4a\x00\x25\x00\x00\xa8\x91\
 \x00\x00\x05\x74\x00\x00\x00\x4a\x00\x25\x00\x00\x69\xf5\
 \x00\x00\x05\x74\x00\x00\x00\x4a\x00\x25\x00\x00\x69\xf5\
-\x00\x00\x0b\xcc\x00\x00\x00\x4a\x00\x25\x00\x00\xa5\xf5\
+\x00\x00\x0c\x44\x00\x00\x00\x4a\x00\x25\x00\x00\xa9\x32\
+\x00\x00\x0b\x56\x00\x00\x00\x4a\x00\x25\x00\x00\xa0\x7c\
 \x00\x00\x07\x6c\x00\x00\x00\x4a\x00\x25\x00\x00\x7b\xe8\
 \x00\x00\x07\x6c\x00\x00\x00\x4a\x00\x25\x00\x00\x7b\xe8\
 \x00\x00\x08\x64\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x9c\
 \x00\x00\x08\x64\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x9c\
 "
 "

+ 1 - 2
parties/Partie1/svg/infos_sauvegarde

@@ -1,2 +1 @@
-€}q(U1}q(UnomqULa chambre noireqUdateCreationqGAÕxwäÌÍUdateSvgqGAÕxÿ¿®UchapitreqU1UenCoursq‰Upublicq	‰uU0}q
-(UnomUtestUdateCreationGAÕxemãTUdateSvgGAÕxh:°!UchapitreU1UenCours‰Upublic‰uu.
+€}q.