Browse Source

Mode pot de peinture créé
Reconstruction du sytème de caches

unknown 10 years ago
parent
commit
d8037ad13c

+ 2 - 2
lib/Actions.py

@@ -288,7 +288,7 @@ class Distance(Attaque):
         self._pionCible = None
         self._sourceCurseur = ""
         self._nomBouton = "pi_attaqueDist"
-        self._icone = "img\\curseurArc.png"
+        self._icone = ":/interface/16/ressource/arc_16.png"
 
     def typeAtt(self):
         return "dist"
@@ -360,7 +360,7 @@ class Zone(Attaque):
         self._casesCibles = []
         self._sourceCurseur = ""
         self._nomBouton = "pi_attaqueZone"
-        self._icone = "img\\baguette.png"
+        self._icone = ":/interface/16/ressource/baguette_16.png"
 
     def typeAtt(self):
         return "zone"

+ 105 - 48
lib/Cache.py

@@ -1,62 +1,119 @@
 #from __future__ import unicode_literals
 # -*- coding: utf-8 -*-
 from __future__ import division
-
+import Modes
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
 class Cache(QGraphicsPolygonItem):
     """cache place sur le plateau"""
-    def __init__(self, plateau, numCache = 0, parent=None):
+    def __init__(self, plateau, numero, parent=None):
         """initialisation de la fenetre"""
+        super (Cache, self).__init__(parent)
+        self.plateau = plateau
+        self.numero = numero
+        self.nom = ""
+        self.listeCases = []
+        self._active = False
+        self._etiquette = None
+
+    def __getstate__(self):
+        """selectionne les attributs qui seront sauvegardes"""
+        self._active = False
+        state = {key:value for key, value in self.__dict__.items() if key in ["numero", "nom", "listeCases", "_active"]}
+        return (state)
+
+    def __setstate__(self, state):
+        """recupere les attributs sauvegardes"""
+        self.__dict__ = state
+
+    def recreer(self, plateau):
         super (Cache, self).__init__()
-        self.parent = plateau
+        self._etiquette = None        
         self.plateau = plateau
-        self.numCache = numCache
-        self.transparence = 130
-        self.setVisible(False)
-        self.plateau.addItem(self)
+        self.creer()
+        
+    def creer(self):
+        """cree le cache sur la liste de cases en parametre"""
         self.setFlag(QGraphicsItem.ItemIsFocusable)
         self.setAcceptHoverEvents(True)
+        self.setBrush(QColor(0,0,0,255))
+        pinceau = QPen(QColor("black"))
+        pinceau.setWidth(10)
+        self.setPen(pinceau)
+        self._etiquette = QGraphicsTextItem(QString.fromUtf8("{}- {}".format(self.numero, self.nom)))
+        self._etiquette.setPos(self.mapFromScene(self.plateau.cases[self.coordCentre()].centreGraphique))
+        police = QFont("Arial",30)
+        police.setBold(True)
+        self._etiquette.setFont(police)
+        self._etiquette.setDefaultTextColor(QColor(50,50,50,180))     
+        self._etiquette.setParentItem(self)
+        self.setPolygon(self.plateau.polygoneAgglo(self.listeCases))
+        self.setZValue(100)
+        self.plateau.addItem(self)
+        self._active = True
+
+    def majPolygone(self, listeCases):
+        self.listeCases = listeCases
+        self.setPolygon(self.plateau.polygoneAgglo(self.listeCases))
+        self._etiquette.setPos(self.mapFromScene(self.plateau.cases[self.coordCentre()].centreGraphique))
+
+    def majEtiquette(self):
+        self._etiquette.setPlainText(QString().fromUtf8(self.nom))
+
+    def modeChange(self, mode):
+        if self._active:
+            if issubclass(mode, Modes.ModeBaseCp):
+                transparence = 130
+            else:
+                transparence = 255
+            self.setBrush(QColor(0,0,0, transparence))
+
+    def activer(self, actif):
+        self._active = actif
+        self.majAffichage()
+
+    def actif(self):
+        return self._active
+
+    def majAffichage(self):
+        self.setVisible(self._active)
+
+    def coordCentre(self):
+        """renvoie les coordonnees de la case la plus centrale de la liste"""
+        xtot = 0
+        ytot = 0
+        for coord in self.listeCases:
+            xtot += coord[0]
+            ytot += coord[1]
+
+        ecartMin = None
+        coordRetenues = None
+        for coord in self.listeCases:
+            ecartX = abs(xtot - (coord[0] * len(self.listeCases)))
+            ecartY = abs(ytot - (coord[1] * len(self.listeCases)))
+            if not ecartMin or (ecartX + ecartY) < ecartMin:
+                coordRetenues = coord
+                ecartMin = ecartX + ecartY
+        return coordRetenues
+
+    def sceneEvent(self, event):
+        """filtre les evenements souris et clavier
+            si vrai: l'evenement est bloque"""
+        retour = (not self.actif() or issubclass(self.plateau.modeActif.__class__, Modes.ModeBaseCp))
+        if not retour:
+            event.accept()
+        else:
+            event.ignore()
+        return retour         
+
+
+
+
+
+
+
+
+
+
 
-    def afficher(self, actif, listeCases = []):
-        """affiche le cache sur la liste des cases en parametre"""
-        """met a jour l'affichage des cases selon les parametres enregistres pour le cache"""
-        if actif and len(listeCases) > 0:
-            if not self.isVisible():
-                self.setPolygon(self.plateau.polygoneAgglo(listeCases))
-                self.setBrush(QColor(0,0,0,130))
-                pinceau = QPen(QColor("black"))
-                pinceau.setWidth(10)
-                self.setPen(pinceau)
-                text = QGraphicsTextItem(QString.fromUtf8(str(self.numCache)))
-                pos = self.plateau.cases[self.plateau.coordCentreListeCases(listeCases)].centreGraphique
-                text.setPos(self.mapFromScene(pos))
-                police = QFont("Arial",30)
-                police.setBold(True)
-                text.setFont(police)
-                text.setDefaultTextColor(QColor(50,50,50,180))     
-                text.setParentItem(self)
-
-        self.setVisible(actif and len(listeCases) > 0)
-    
-    def mousePressEvent(self, event):
-        event.accept()
-
-    def mouseReleaseEvent(self, event):
-        event.accept()
-
-    def mouseMoveEvent(self, event):
-        event.accept()        
-
-    def mouseDoubleClickEvent(self, event):
-        event.accept()
-
-    def hoverEnterEvent(self, event):
-        event.accept()
-
-    def hoverLeaveEvent(self, event):
-        event.accept()
-
-    def hoverMoveEvent(self, event):
-        event.accept()

+ 14 - 30
lib/Case.py

@@ -20,7 +20,7 @@ class Case(QGraphicsPolygonItem):
         self.y = 0        
         self.altitude = 0                   
         self.terrain = Terrain()                       #terrain par defaut 
-        self.couleur = None                            #couleur du fond par defaut
+##        self.couleur = None                            #couleur du fond par defaut
         self.bordure = QColor(85, 85, 85, 85)          #couleur de la bordure par defaut
         self.centreGraphique = None
 
@@ -38,8 +38,7 @@ class Case(QGraphicsPolygonItem):
 
     def __getstate__(self):
         """selectionne les attributs qui seront sauvegardes"""
-        self.idTerrain = self.terrain.id
-        state = {key:value for key, value in self.__dict__.items() if key in ["x", "y", "altitude","idTerrain","bordure","couleur", \
+        state = {key:value for key, value in self.__dict__.items() if key in ["x", "y", "altitude","terrain","bordure","couleur", \
                                                                               "estCache", "ombre", "effetActif"]}
 
         return (state)
@@ -47,17 +46,13 @@ class Case(QGraphicsPolygonItem):
     def __setstate__(self, state):
         """recupere les attributs sauvegardes"""
         self.__dict__ = state
-        if self.idTerrain:
-            self.terrain = charger("lib\\biblio\\terrain", self.idTerrain)
-        else:
-            self.terrain = Terrain()
         
     ######## fonctions de base : geometrie, aspect graphique      ######
     def creer(self, x, y, couleur = QColor(0, 255, 0, 80)):
         """creation du polygone et enregistrement des donnees geometriques"""
         self.x = x
         self.y = y
-        self.couleur = couleur
+        self.terrain.couleur = couleur
         #creation de l'objet graphique sur le plateau
         self.creerGraphique()
         
@@ -93,7 +88,7 @@ class Case(QGraphicsPolygonItem):
 ##        #pour afficher les coordonnees des cases:        
 ##        text = QGraphicsSimpleTextItem("{}-{}".format(self.x,self.y), parent=self)
 ##        if self.plateau.formeCases == "H":
-##            text.setPos(QPointF(((self.x*0.866)+0.2886)*self.plateau.hCase,  self.y*self.plateau.hCase))
+##            text.setPos(QPointF(((self.x*0.866)+0.2886)*self.plateau.hCase,  (self.y+k+0.5)*self.plateau.hCase))
 ##        else:
 ##            text.setPos(QPointF(self.x*self.plateau.hCase,  self.y*self.plateau.hCase))
 
@@ -101,7 +96,7 @@ class Case(QGraphicsPolygonItem):
         self.logoDep.creer()
         
         #apparence initiale de la case
-        self.majCouleur(self.couleur)            
+        self.majTerrain(self.terrain)            
 
         #polygone utilise pour afficher la cible du curseur
         self.polygoneCible = QGraphicsPolygonItem(self.polygone(self.x, self.y), parent=self)
@@ -118,9 +113,7 @@ class Case(QGraphicsPolygonItem):
         self.etiquetteAltitude = None
         
         self.creerGraphique()
-        if self.terrain:
-            if len(self.terrain.nom) > 0 : 
-                self.majTerrain(self.terrain)   
+        self.majTerrain(self.terrain)   
         self.majAffichageSpecial("")
         self.majEffet(self.effetActif)
 
@@ -240,25 +233,17 @@ class Case(QGraphicsPolygonItem):
         return retour                
 
     ########## fonctions de maj ###########
-    def majCouleur(self, couleur):
-        self.couleur = couleur
-        self.setBrush(couleur)
+    def majTerrain(self, terrain = Terrain()):
+        self.terrain = terrain
+        if self.terrain.imgTexture.estValide():
+            self.setBrush(QBrush(QImage(self.terrain.imgTexture.chemin())))
+        else:
+            if self.terrain.couleur.isValid():
+                self.setBrush(QBrush(self.terrain.couleur))
         pinceau = QPen()
         pinceau.setColor(self.couleurBordure())
         pinceau.setWidth(1)
         self.setPen(pinceau)
-        
-    def majTerrain(self, terrain):
-        if terrain != None: 
-            self.terrain = terrain
-            if self.terrain.imgTexture.estValide():
-                self.setBrush(QBrush(QImage(self.terrain.imgTexture.chemin())))
-            else:
-                if self.terrain.couleur.isValid():
-                     self.setBrush(QBrush(self.terrain.couleur))
-                     self.couleur = self.terrain.couleur
-        else:
-            self.terrain = Terrain()
 
     def majAffichageDeplacement(self, cout, valide = True):
         """lorsque cette case est sur le chemin d'un pion,
@@ -442,12 +427,11 @@ class Case(QGraphicsPolygonItem):
     
     ########################
 
-
 class LogoDep(QGraphicsEllipseItem):
+    """logo utilise pour afficher le chemin que va suivre le pion lors d'un deplacement"""
     def __init__(self, parent = None):
         super(LogoDep, self).__init__()
         self.parent = parent
-        
         self.couleur = None
         self.txt = None
 

+ 0 - 20
lib/Decor_ancien.py

@@ -1,20 +0,0 @@
-#from __future__ import unicode_literals
-# -*- coding: utf-8 -*-
-from __future__ import division
-from PyQt4.QtGui import QColor
-
-class Decor():
-    """decor a placer sur le plateau"""
-    def __init__(self, parent=None):
-        self.id = "00"
-        self.nom = ""                   #libelle a afficher dans la liste 
-        self.couleur = QColor("grey")       #couleur si pas de texture
-        #self.img = ""                   #image source a afficher
-        self.logo = ""                #image source du logo
-        self.img = {"nom": "", "kx": 1, "ky": 1, "dx": 0, "dy": 0, "rotation": 0, "pivote": False, "masqueAuto": False}
-        self.escalade = False           #peut etre escalade
-        self.franchissablePied = False  #peut etre franchi a pied
-        self.franchissableVol = False   #peut etre franchi en volant
-        self.brule = False              #peut prendre feu
-        self.hauteur = 0                #hauteur (en cases)
-        self.formeDef = {"H":[], "C":[]} #definition de la forme du decor sur cases hexagonales (cf. classe Forme("H")) et sur cases carrees (cf. classe Forme("C"))        

+ 37 - 8
lib/Modes.py

@@ -134,7 +134,6 @@ class ModeBaseCp(ModeBase):
     def clicDroit(self, event):
         self.plateau.activerMode(StandardCp)
 
-
 class ModeBasePi(ModeBase):
     """mode servant de base a tous les modes lies aux actions des combattants"""
     def __init__(self, plateau):
@@ -158,6 +157,8 @@ class StandardCp(ModeBaseCp):
     def activer(self, param):
         """active le mode"""
         self.plateau.fenetre.ui.cbt_panneauDroite.setCurrentIndex(1)
+        for cache in self.plateau.caches:
+            cache.modeChange(self.__class__)
         super(StandardCp, self).activer()
 
     def clic_combattant(self, num):
@@ -233,12 +234,7 @@ class Pipette(ModeBaseCp):
         super(Pipette, self).activerCurseur()
         
     def clic_case(self, coord):
-        if len(self.plateau.cases[coord].terrain.nom) > 0:
-             param = self.plateau.cases[coord].terrain
-        else:
-             param = self.plateau.cases[coord].couleur
-        self.plateau.activerMode(MajCases, param)     
-             
+        self.plateau.activerMode(MajCases, self.plateau.cases[coord].terrain)
 
 class ZonePlacement(ModeBaseCp):
     """mode de definition de la/les zones de placement des joueurs"""
@@ -270,7 +266,38 @@ class ZonePlacement(ModeBaseCp):
         if self.plateau.pinceau.estActif():
             if len(self.plateau.pinceau.selection()) > 0:
                 self.plateau.majZonePlacement(self.plateau.pinceau.selection())
-                
+
+class EditerCaches(ModeBaseCp):
+    """mode de creation/ edition des caches"""
+    def __init__(self, plateau):
+        super(EditerCaches, self).__init__(plateau)
+        self._sourceCurseur = ":/interface/16/ressource/pinceau_16.png"
+        self._focus = True
+        self._numCache = None
+
+    def activer(self, param = None):
+        self._numCache = param
+        self.plateau.pinceau.majForme("rectP")
+        super(EditerCaches, self).activer()
+
+    def desactiver(self):
+        self.plateau.pinceau.reinit()
+        super(EditerCaches, self).desactiver()        
+
+    def clic_case(self, coord):
+        self.plateau.pinceau.demarrer(coord)
+        
+    def survolClic_case(self, coord):
+        self.plateau.pinceau.maj(coord)
+    
+    def finClicGauche(self, coord):
+        if self.plateau.pinceau.estActif():
+            if len(self.plateau.pinceau.selection()) > 0:
+                if self._numCache != None:
+                    self.plateau.editerFormeCache(self._numCache, self.plateau.pinceau.selection())
+                else:
+                    self.plateau.nouveauCache(self.plateau.pinceau.selection())
+                self.plateau.activerMode(StandardCp)
 
 class EntreesSorties(ModeBaseCp):
     """mode de definition deentrees et sorties du plateau"""
@@ -463,6 +490,8 @@ class StandardPi(ModeBasePi):
 
     def activer(self, num):
         self.plateau.fenetre.ui.cbt_panneauDroite.setCurrentIndex(3)
+        for cache in self.plateau.caches:
+            cache.modeChange(self.__class__)
         super(StandardPi, self).activer()
 
     def clic_combattant(self, num):

+ 46 - 5
lib/Pinceau.py

@@ -1,6 +1,7 @@
 """pinceau utilise pour la selection et la mise a jour des cases du plateau"""
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
+from Terrain import Terrain
 
 class Pinceau():
     def __init__(self, plateau):
@@ -26,8 +27,8 @@ class Pinceau():
                      "rectV", "rectP", "ellipseV", "ellipseP"] and not self._formeVerrouillee:
             self._forme = forme
 
-    def verrouillerForme(self, actif):
-        self._formeVerrouillee = True
+    def verrouillerForme(self, actif = True):
+        self._formeVerrouillee = actif
 
     def majEpaisseur(self, val):
         if val in range(1, 5):
@@ -51,6 +52,7 @@ class Pinceau():
             self._origine = self.plateau.cases[coord].centreGraphique
             self._point2 = self.plateau.cases[coord].centreGraphique
             self._actif = True
+            self.maj(coord)
 
     def maj(self, coord):
         """on met a jour la selection en fonction de la case qui vient d'etre ajoutee"""
@@ -58,13 +60,17 @@ class Pinceau():
             enPlus  = []  #cases a ajouter a la selection
             enMoins = []  #cases a retirer de la selection
             if self._origine == None: self._origine = self.plateau.cases[coord].centreGraphique
-
             if self._forme == "simple":
                 #pas de forme: on ajoute les cases survolees a la liste des cases
                 zone = self.plateau.zone(coord, self._epaisseur - 1)
                 for coord in zone:
                     if not coord in self._selection:
                         enPlus.append(coord)
+                        
+            elif self._forme == "pot":
+                #pot de peinture: on ne met a jour que si aucune projection n'est affichee
+                if not len(self._selection) > 0:
+                    enPlus = self.selectionPot(coord)
 
             elif self._forme == "frontiere":
                 #droite qui selectionne toutes les cases situees au dessus d'elle
@@ -132,7 +138,10 @@ class Pinceau():
                     self._objetGraphique.setRect(rect)
 
                 #on liste les cases intersectant la forme
-                select = self.plateau.casesSousForme(self._objetGraphique, (self._forme[-1:] == "P"), self._epaisseur - 1)
+                if self._objetGraphique:
+                    select = self.plateau.casesSousForme(self._objetGraphique, (self._forme[-1:] == "P"), self._epaisseur - 1)
+                else:
+                    select = [coord]
                 
                 for coord in self._selection:
                     if not coord in select:
@@ -140,10 +149,11 @@ class Pinceau():
                     else:    
                         select.remove(coord)
                 enPlus = select
-                
+
             for coord in enPlus:
                 self.afficherCase(coord, True)
                 self._selection.append(coord)
+
             for coord in enMoins:
                 self.afficherCase(coord, False)
                 self._selection.remove(coord)
@@ -200,6 +210,37 @@ class Pinceau():
         return listeCases
 
 
+    def selectionPot(self, coord0):
+        retour = [coord0]
+        aVerifier = [coord0]
+        while len(aVerifier) > 0:
+            coord = aVerifier[0]
+            for voisine in self.plateau.cases[coord].voisins:
+                if not voisine in retour:
+                    if self.ontTerrainsSimilaires(voisine, coord):
+                        retour.append(voisine)
+                        aVerifier.append(voisine)
+            aVerifier.remove(coord)
+        return retour    
+
+    def ontTerrainsSimilaires(self, coord1, coord2):
+        return (self.plateau.cases[coord1].terrain.nom == self.plateau.cases[coord2].terrain.nom and \
+                self.plateau.cases[coord1].terrain.couleur.rgb() == self.plateau.cases[coord2].terrain.couleur.rgb() and \
+                self.plateau.cases[coord1].terrain.imgTexture.definition() == self.plateau.cases[coord1].terrain.imgTexture.definition())
+
+
+
+
+
 
 
+
+
+
+
+
+
+
+        
+
     

+ 81 - 58
lib/Plateau.py

@@ -72,12 +72,7 @@ class Plateau(QGraphicsScene):
         self.cases = {}   #dict des cases du plateau   (coordonnées: case)
         self.combattants = {}   #liste de combattants positionnes sur le plateau
         self.decors = {}  #liste des decors places sur le plateau
-        self.cacheEnCours = 1
-        self.caches = {}
-        self.polygonesCaches = {}
-        for i in range(1,5):
-            self.caches[i] = {"actif":False,"listeCases":[]}
-            self.polygonesCaches[i] = None
+        self.caches = []
         self.listeCasesZonePlacement = []
         self.polygoneZonePlacement = None
         self.entreesSorties = []
@@ -92,9 +87,9 @@ class Plateau(QGraphicsScene):
         
     def __getstate__(self):
         self.dateSvg = time()
-        state = {key:value for key, value in self.__dict__.items() if not key in ["fenetre", "modeActif", "cacheEnCours", \
+        state = {key:value for key, value in self.__dict__.items() if not key in ["fenetre", "modeActif", \
                                                                                   "editionTerrain", "editionCreature", "editionDecor", \
-                                                                                  "polygoneZonePlacement", "gestionCombat", "polygonesCaches", \
+                                                                                  "polygoneZonePlacement", "gestionCombat", \
                                                                                   "editionAttaques", "pinceau"]}
         return (state)
 
@@ -140,6 +135,9 @@ class Plateau(QGraphicsScene):
         for coord in self.cases:
             self.cases[coord].recreer(self)
 
+        #recreation des caches
+        self.chargeListeCaches()
+
         #recreation des pions
         for numCombattant in self.combattants:
             self.combattants[numCombattant].ajouterAuPlateau(self)
@@ -156,12 +154,7 @@ class Plateau(QGraphicsScene):
         #recreation de la zone de placement: 
         if len(self.listeCasesZonePlacement) > 0:
             self.polygoneZonePlacement = None
-            self.majZonePlacement(self.listeCasesZonePlacement)    
-
-        #recreation des caches
-        self.polygonesCaches = {}
-        for i in range(1,5):
-            self.polygonesCaches[i] = None
+            self.majZonePlacement(self.listeCasesZonePlacement)
 
         self.plateauModeCombat()
 
@@ -210,6 +203,8 @@ class Plateau(QGraphicsScene):
         self.fenetre.connect(self.fenetre.ui.cp_listeTerrains, SIGNAL("cellClicked(int,int)"), self.modeMajTerrainCase, 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_listeCaches, SIGNAL("cellClicked(int,int)"), self.centrerSurCache, Qt.UniqueConnection)
+        self.fenetre.connect(self.fenetre.ui.cp_listeCaches, SIGNAL("cellChanged(int,int)"), self.majNomCache, 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)
@@ -219,7 +214,9 @@ class Plateau(QGraphicsScene):
         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_editerCache, SIGNAL("clicked()"), self.activerModeEditionCache, Qt.UniqueConnection)
+        self.fenetre.connect(self.fenetre.ui.cp_nouveauCache, SIGNAL("clicked()"), self.activerModeCreationCache, Qt.UniqueConnection)
+        self.fenetre.connect(self.fenetre.ui.cp_supprimerCache, SIGNAL("clicked()"), self.supprimerCache, Qt.UniqueConnection)
 
         #creation
         self.fenetre.connect(self.fenetre.ui.cp_epaisseurPinceau, SIGNAL("valueChanged(int)"), self.majEpaisseurPinceau, Qt.UniqueConnection)
@@ -230,17 +227,13 @@ class Plateau(QGraphicsScene):
         self.fenetre.connect(self.fenetre.ui.cp_placerEntree, SIGNAL("clicked()"), self.majModeDefinirEntree, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_placerSortie, SIGNAL("clicked()"), self.majModeDefinirSortie, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_defPlacement, SIGNAL("clicked()"), self.majModeZonePlacement, Qt.UniqueConnection)
-##        self.fenetre.connect(self.fenetre.ui.cacheActif, SIGNAL("clicked()"), self.majEtatCacheEnCours, Qt.UniqueConnection)
-##        self.fenetre.connect(self.fenetre.ui.cacheVoir, SIGNAL("clicked()"), self.voirCacheEnCours, Qt.UniqueConnection)
-##        self.fenetre.connect(self.fenetre.ui.cachePlacer, SIGNAL("clicked()"), self.placerCacheEnCours, Qt.UniqueConnection)
-
-##        self.fenetre.connect(self.fenetre.ui.notesMjPlateau, SIGNAL("textChanged()"), self.majNotesPlateau, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.pi_notes, SIGNAL("textChanged()"), self.majNotesCombattant, Qt.UniqueConnection)
 
         #formes (dessin)
         self.fenetre.connect(self.fenetre.ui.cp_formeSimple, SIGNAL("clicked()"), self.majModeForme, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_formeLigne, SIGNAL("clicked()"), self.majModeForme, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_formeLigneOrientee, SIGNAL("clicked()"), self.majModeForme, Qt.UniqueConnection)
+        self.fenetre.connect(self.fenetre.ui.cp_formePot, SIGNAL("clicked()"), self.majModeForme, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_formeEllipseVide, SIGNAL("clicked()"), self.majModeForme, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_formeEllipsePlein, SIGNAL("clicked()"), self.majModeForme, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_formeRectVide, SIGNAL("clicked()"), self.majModeForme, Qt.UniqueConnection)
@@ -254,7 +247,6 @@ class Plateau(QGraphicsScene):
 ##        self.fenetre.connect(self.fenetre.ui.pi_vol, SIGNAL("clicked()"), self.fenetre.barreCombatVol, Qt.UniqueConnection)
         
         self.fenetre.connect(self.fenetre.ui.pi_finTour, SIGNAL("clicked()"), self.pionSuivant, Qt.UniqueConnection)
-
         
     def initialisationGraphique(self):
         """cree la scene graphique et les parametres necessaires a son fonctionnement, et met a jour l'interface""" 
@@ -271,10 +263,6 @@ class Plateau(QGraphicsScene):
         self.setItemIndexMethod(QGraphicsScene.BspTreeIndex)
         
         self.polygoneZonePlacement = None
-        self.polygonesCaches = {}
-        for i in range(1,5):
-            self.polygonesCaches[i] = None
-
 
         #gestion du mode d'interaction avec le plateau
         self.modeActif = Modes.StandardCp(self)
@@ -327,12 +315,6 @@ class Plateau(QGraphicsScene):
         couleur = QColorDialog(self.vue()).getColor(QColor("white"), self.vue())
         return couleur
 
-##    def majBoutonsCaches(self):
-##        """met a jour l'affichage et connecte les boutons de caches"""
-##        for i in range(1,5):
-##            bouton = self.fenetre.ui.outilsEditionPlateau.findChild(QToolButton, "plateauCache{}".format(i))
-##            self.fenetre.connect(bouton, SIGNAL("clicked()"), self.majAffichageMenuCache)
-
     def majListesPions(self, numCombattant = None):
         """met a jour les listes contenant des donnees liees aux pions"""
 ##        self.majListeOrdreJeu()
@@ -655,6 +637,7 @@ class Plateau(QGraphicsScene):
         formes = {"cp_formeSimple": "simple", \
                   "cp_formeLigne": "ligne", \
                   "cp_formeLigneOrientee": "frontiere", \
+                  "cp_formePot": "pot", \
                   "cp_formeEllipseVide": "ellipseV", \
                   "cp_formeEllipsePlein": "ellipseP", \
                   "cp_formeRectVide": "rectV", \
@@ -1411,33 +1394,73 @@ class Plateau(QGraphicsScene):
     ###############
 
     ######### caches ###############
-    def voirCacheEnCours(self):
-        """centre la vue sur et met en evidence le cache actif"""
-        if len(self.caches[self.cacheEnCours]["listeCases"]) > 0: 
-            #centre la vue sur le premier point du polygone d'une case du milieu de la liste
-            indiceMilieu = int((len(self.caches[self.cacheEnCours]["listeCases"])/2))
-            self.vue().centerOn(self.cases[self.caches[self.cacheEnCours]["listeCases"][indiceMilieu]].polygon()[0])
-            #mettre en surbrillance
-            #for coord in self.caches[self.cacheEnCours]["listeCases"]:
-            #    self.
-
-    def placerCacheEnCours(self):
-        """active le mode de mise a jour de la liste des cases cachees par ce cache"""
-        self.majMode("cachePlacer")
-        self.fenetre.ui.cacheActif.setChecked(True)
-        self.majEtatCacheEnCours()
-
-    def majEtatCacheEnCours(self):
-        """met a jour l'etat (actif ou non) du cache selon l'etat de la case correspondante"""
-        self.caches[self.cacheEnCours]["actif"] = self.fenetre.ui.cacheActif.isChecked()
-        self.majAffichageCache(self.cacheEnCours, self.caches[self.cacheEnCours]["actif"])
-
-    def majAffichageCache(self, numCache, afficher = True):
-        """met a jour l'affichage des cases selon les parametres enregistres pour le cache"""
-        if self.polygonesCaches[numCache] == None:
-            self.polygonesCaches[numCache] = Cache(self, numCache)
-        self.polygonesCaches[numCache].afficher(afficher, self.pinceau.selection())    
+    def chargeListeCaches(self):
+        """charge la liste des caches avec les donnees en memoire"""
+        for cache in self.caches:
+            cache.recreer(self)
+            self.ajouterCacheAuPlateau(cache)
+
+    def activerModeCreationCache(self):
+        self.activerMode(Modes.EditerCaches)
+
+    def activerModeEditionCache(self):
+        index = self.fenetre.ui.cp_listeCaches.currentRow()
+        self.activerMode(Modes.EditerCaches, index)
+        
+    def ajouterCacheAuPlateau(self, cache):
+        """ajoute le cache a la table des caches et sur le plateau"""
+        ligne = self.fenetre.ui.cp_listeCaches.nouvelleLigneFin()
+        if cache.actif():
+            nomImg = "oeilBarre2_32.png"
+        else:
+            nomImg = "oeil_32.png"
+        item = QTableWidgetItem(QIcon(":/interface/32/ressource/{}".format(nomImg)), cache.nom)
+        self.fenetre.ui.cp_listeCaches.setItem(ligne, 0, item)
+        widget = QCheckBox(QString(""))
+        widget.setChecked(cache.actif())
+        widget.setObjectName(QString("afficherCache_{}".format(ligne)))
+        self.connect(widget, SIGNAL("toggled(bool)"), self.majEtatCache)
+        self.fenetre.ui.cp_listeCaches.setCellWidget(ligne, 1, widget)
+
+    def nouveauCache(self, listeCases):
+        numero = len(self.caches)
+        cache = Cache(self, numero)
+        cache.activer(True)
+        cache.nom = "Cache {}".format(len(self.caches) + 1)
+        cache.listeCases = listeCases
+        self.caches.append(cache)
+        cache.creer()
+        self.ajouterCacheAuPlateau(cache)
+
+    def editerFormeCache(self, index, listeCases):
+        """edite le cache en index s'il existe"""
+        self.caches[index].majPolygone(listeCases)
+
+    def majEtatCache(self, actif):
+        emetteur = self.sender().objectName()
+        index = int(emetteur.replace("afficherCache_", ""))
+        self.caches[index].activer(actif)
+        if actif:
+            nomImg = "oeilBarre_32.png"
+        else:
+            nomImg = "oeil_32.png"
+        self.fenetre.ui.cp_listeCaches.item(index, 0).setIcon(QIcon(":/interface/32/ressource/{}".format(nomImg)))
+
+    def majNomCache(self, ligne, colonne):
+        nouveauNom = str(self.fenetre.ui.cp_listeCaches.item(ligne, 0).text().toUtf8())
+        if nouveauNom != self.caches[ligne].nom:
+            self.caches[ligne].nom = nouveauNom
+            self.caches[ligne].majEtiquette()
+
+    def supprimerCache(self):
+        index = self.fenetre.ui.cp_listeCaches.currentRow()
+        self.removeItem(self.caches[index])
+        self.fenetre.ui.cp_listeCaches.removeRow(index)
+        del self.caches[index]
         
+    def centrerSurCache(self, ligne, colonne):
+        self.vue().centerOn(self.cases[self.caches[ligne].coordCentre()].centreGraphique)
+
     ###############"
         
     ######### gestion des evenements souris et clavier ###############
@@ -1467,7 +1490,7 @@ class Plateau(QGraphicsScene):
         """gestion des evenements clavier"""
         toucheClavier = event.key()
         self.modeActif.toucheClavier(event)
-            
+
     ################   
 
 

+ 124 - 85
lib/ui/ecran_principal.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'mainwindow.ui'
 #
-# Created: Tue Jun 30 10:20:19 2015
+# Created: Tue Jun 30 14:59:07 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -627,20 +627,31 @@ class Ui_principal(object):
         self.cp_epaisseurPinceau.setProperty("value", 1)
         self.cp_epaisseurPinceau.setOrientation(QtCore.Qt.Horizontal)
         self.cp_epaisseurPinceau.setObjectName(_fromUtf8("cp_epaisseurPinceau"))
-        self.cp_formeLigneOrientee_2 = QtGui.QToolButton(self.cP_boiteFormes)
-        self.cp_formeLigneOrientee_2.setGeometry(QtCore.QRect(111, 0, 37, 25))
-        self.cp_formeLigneOrientee_2.setMinimumSize(QtCore.QSize(37, 25))
-        self.cp_formeLigneOrientee_2.setMaximumSize(QtCore.QSize(37, 25))
-        self.cp_formeLigneOrientee_2.setStatusTip(_fromUtf8(""))
+        self.cp_formePot = QtGui.QToolButton(self.cP_boiteFormes)
+        self.cp_formePot.setGeometry(QtCore.QRect(111, 0, 37, 25))
+        self.cp_formePot.setMinimumSize(QtCore.QSize(37, 25))
+        self.cp_formePot.setMaximumSize(QtCore.QSize(37, 25))
+        self.cp_formePot.setStatusTip(_fromUtf8(""))
         icon18 = QtGui.QIcon()
         icon18.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/potPeinture_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_formeLigneOrientee_2.setIcon(icon18)
-        self.cp_formeLigneOrientee_2.setIconSize(QtCore.QSize(18, 18))
-        self.cp_formeLigneOrientee_2.setObjectName(_fromUtf8("cp_formeLigneOrientee_2"))
+        self.cp_formePot.setIcon(icon18)
+        self.cp_formePot.setIconSize(QtCore.QSize(18, 18))
+        self.cp_formePot.setObjectName(_fromUtf8("cp_formePot"))
         self.verticalLayout_3.addWidget(self.cP_boiteFormes)
         self.cp_ongletsListes = QtGui.QTabWidget(self.cp_panneau)
         self.cp_ongletsListes.setMinimumSize(QtCore.QSize(154, 0))
         self.cp_ongletsListes.setMaximumSize(QtCore.QSize(154, 16777215))
+        palette = QtGui.QPalette()
+        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
+        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
+        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
+        self.cp_ongletsListes.setPalette(palette)
         self.cp_ongletsListes.setObjectName(_fromUtf8("cp_ongletsListes"))
         self.cp_afficherTerrains = QtGui.QWidget()
         self.cp_afficherTerrains.setObjectName(_fromUtf8("cp_afficherTerrains"))
@@ -786,29 +797,61 @@ class Ui_principal(object):
         self.cp_afficherCaches = QtGui.QWidget()
         self.cp_afficherCaches.setObjectName(_fromUtf8("cp_afficherCaches"))
         self.verticalLayout_5 = QtGui.QVBoxLayout(self.cp_afficherCaches)
+        self.verticalLayout_5.setSpacing(3)
         self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5"))
-        self.cp_listeCaches = QtGui.QTableWidget(self.cp_afficherCaches)
+        self.cp_listeCaches = DmTableWidget(self.cp_afficherCaches)
+        palette = QtGui.QPalette()
+        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
+        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
+        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
+        self.cp_listeCaches.setPalette(palette)
         self.cp_listeCaches.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
-        self.cp_listeCaches.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
+        self.cp_listeCaches.setEditTriggers(QtGui.QAbstractItemView.SelectedClicked)
         self.cp_listeCaches.setCornerButtonEnabled(False)
         self.cp_listeCaches.setObjectName(_fromUtf8("cp_listeCaches"))
-        self.cp_listeCaches.setColumnCount(4)
+        self.cp_listeCaches.setColumnCount(2)
         self.cp_listeCaches.setRowCount(0)
         item = QtGui.QTableWidgetItem()
         self.cp_listeCaches.setHorizontalHeaderItem(0, item)
         item = QtGui.QTableWidgetItem()
         self.cp_listeCaches.setHorizontalHeaderItem(1, item)
-        item = QtGui.QTableWidgetItem()
-        self.cp_listeCaches.setHorizontalHeaderItem(2, item)
-        item = QtGui.QTableWidgetItem()
-        self.cp_listeCaches.setHorizontalHeaderItem(3, item)
         self.cp_listeCaches.horizontalHeader().setVisible(False)
-        self.cp_listeCaches.horizontalHeader().setDefaultSectionSize(28)
+        self.cp_listeCaches.horizontalHeader().setDefaultSectionSize(105)
         self.cp_listeCaches.verticalHeader().setVisible(False)
+        self.cp_listeCaches.verticalHeader().setDefaultSectionSize(45)
         self.verticalLayout_5.addWidget(self.cp_listeCaches)
+        self.horizontalLayout_9 = QtGui.QHBoxLayout()
+        self.horizontalLayout_9.setContentsMargins(-1, 0, -1, -1)
+        self.horizontalLayout_9.setObjectName(_fromUtf8("horizontalLayout_9"))
+        self.cp_supprimerCache = QtGui.QToolButton(self.cp_afficherCaches)
+        self.cp_supprimerCache.setText(_fromUtf8(""))
         icon25 = QtGui.QIcon()
-        icon25.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/mainCache_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_ongletsListes.addTab(self.cp_afficherCaches, icon25, _fromUtf8(""))
+        icon25.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/corbeille_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_supprimerCache.setIcon(icon25)
+        self.cp_supprimerCache.setObjectName(_fromUtf8("cp_supprimerCache"))
+        self.horizontalLayout_9.addWidget(self.cp_supprimerCache)
+        spacerItem7 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout_9.addItem(spacerItem7)
+        self.cp_nouveauCache = QtGui.QToolButton(self.cp_afficherCaches)
+        self.cp_nouveauCache.setText(_fromUtf8(""))
+        self.cp_nouveauCache.setIcon(icon19)
+        self.cp_nouveauCache.setObjectName(_fromUtf8("cp_nouveauCache"))
+        self.horizontalLayout_9.addWidget(self.cp_nouveauCache)
+        self.cp_editerCache = QtGui.QToolButton(self.cp_afficherCaches)
+        self.cp_editerCache.setText(_fromUtf8(""))
+        self.cp_editerCache.setIcon(icon20)
+        self.cp_editerCache.setObjectName(_fromUtf8("cp_editerCache"))
+        self.horizontalLayout_9.addWidget(self.cp_editerCache)
+        self.verticalLayout_5.addLayout(self.horizontalLayout_9)
+        icon26 = QtGui.QIcon()
+        icon26.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/mainCache_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_ongletsListes.addTab(self.cp_afficherCaches, icon26, _fromUtf8(""))
         self.verticalLayout_3.addWidget(self.cp_ongletsListes)
         self.creationPlateau_sousPanneauBas = QtGui.QFrame(self.cp_panneau)
         self.creationPlateau_sousPanneauBas.setMinimumSize(QtCore.QSize(154, 81))
@@ -821,17 +864,17 @@ class Ui_principal(object):
         self.cp_placerEntree = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
         self.cp_placerEntree.setMinimumSize(QtCore.QSize(41, 31))
         self.cp_placerEntree.setMaximumSize(QtCore.QSize(41, 31))
-        icon26 = QtGui.QIcon()
-        icon26.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/entree_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_placerEntree.setIcon(icon26)
+        icon27 = QtGui.QIcon()
+        icon27.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/entree_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_placerEntree.setIcon(icon27)
         self.cp_placerEntree.setObjectName(_fromUtf8("cp_placerEntree"))
         self.gridLayout_3.addWidget(self.cp_placerEntree, 2, 1, 1, 1)
         self.cp_placerSortie = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
         self.cp_placerSortie.setMinimumSize(QtCore.QSize(41, 31))
         self.cp_placerSortie.setMaximumSize(QtCore.QSize(41, 31))
-        icon27 = QtGui.QIcon()
-        icon27.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sortie_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_placerSortie.setIcon(icon27)
+        icon28 = QtGui.QIcon()
+        icon28.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sortie_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_placerSortie.setIcon(icon28)
         self.cp_placerSortie.setObjectName(_fromUtf8("cp_placerSortie"))
         self.gridLayout_3.addWidget(self.cp_placerSortie, 2, 2, 1, 1)
         self.cp_altitudes = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
@@ -844,21 +887,21 @@ class Ui_principal(object):
         self.cp_effets.setMinimumSize(QtCore.QSize(41, 31))
         self.cp_effets.setMaximumSize(QtCore.QSize(41, 31))
         self.cp_effets.setObjectName(_fromUtf8("cp_effets"))
-        icon28 = QtGui.QIcon()
-        icon28.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/feu_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_effets.addItem(icon28, _fromUtf8(""))
-        self.cp_effets.setItemText(0, _fromUtf8(""))
         icon29 = QtGui.QIcon()
-        icon29.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/eau_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        icon29.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/feu_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         self.cp_effets.addItem(icon29, _fromUtf8(""))
-        self.cp_effets.setItemText(1, _fromUtf8(""))
+        self.cp_effets.setItemText(0, _fromUtf8(""))
         icon30 = QtGui.QIcon()
-        icon30.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/glace_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        icon30.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/eau_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         self.cp_effets.addItem(icon30, _fromUtf8(""))
-        self.cp_effets.setItemText(2, _fromUtf8(""))
+        self.cp_effets.setItemText(1, _fromUtf8(""))
         icon31 = QtGui.QIcon()
-        icon31.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/poison_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        icon31.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/glace_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         self.cp_effets.addItem(icon31, _fromUtf8(""))
+        self.cp_effets.setItemText(2, _fromUtf8(""))
+        icon32 = QtGui.QIcon()
+        icon32.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/poison_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_effets.addItem(icon32, _fromUtf8(""))
         self.cp_effets.setItemText(3, _fromUtf8(""))
         self.cp_effets.addItem(icon22, _fromUtf8(""))
         self.cp_effets.setItemText(4, _fromUtf8(""))
@@ -866,17 +909,17 @@ class Ui_principal(object):
         self.cp_afficherNotes = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
         self.cp_afficherNotes.setMinimumSize(QtCore.QSize(41, 31))
         self.cp_afficherNotes.setMaximumSize(QtCore.QSize(41, 31))
-        icon32 = QtGui.QIcon()
-        icon32.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/note_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_afficherNotes.setIcon(icon32)
+        icon33 = QtGui.QIcon()
+        icon33.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/note_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_afficherNotes.setIcon(icon33)
         self.cp_afficherNotes.setObjectName(_fromUtf8("cp_afficherNotes"))
         self.gridLayout_3.addWidget(self.cp_afficherNotes, 0, 4, 1, 1)
         self.cp_defPlacement = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
         self.cp_defPlacement.setMinimumSize(QtCore.QSize(41, 31))
         self.cp_defPlacement.setMaximumSize(QtCore.QSize(41, 31))
-        icon33 = QtGui.QIcon()
-        icon33.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/depart_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_defPlacement.setIcon(icon33)
+        icon34 = QtGui.QIcon()
+        icon34.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/depart_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_defPlacement.setIcon(icon34)
         self.cp_defPlacement.setObjectName(_fromUtf8("cp_defPlacement"))
         self.gridLayout_3.addWidget(self.cp_defPlacement, 2, 4, 1, 1)
         self.verticalLayout_3.addWidget(self.creationPlateau_sousPanneauBas)
@@ -938,9 +981,9 @@ class Ui_principal(object):
         self.pi_deplacement.setMinimumSize(QtCore.QSize(0, 0))
         self.pi_deplacement.setMaximumSize(QtCore.QSize(100, 100))
         self.pi_deplacement.setText(_fromUtf8(""))
-        icon34 = QtGui.QIcon()
-        icon34.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/deplacement_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_deplacement.setIcon(icon34)
+        icon35 = QtGui.QIcon()
+        icon35.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/deplacement_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_deplacement.setIcon(icon35)
         self.pi_deplacement.setObjectName(_fromUtf8("pi_deplacement"))
         self.pi_formeAttaqueZone = QtGui.QComboBox(self.pi_actions)
         self.pi_formeAttaqueZone.setGeometry(QtCore.QRect(50, 91, 41, 29))
@@ -949,38 +992,38 @@ class Ui_principal(object):
         self.pi_formeAttaqueZone.setItemText(0, _fromUtf8(""))
         self.pi_formeAttaqueZone.addItem(icon17, _fromUtf8(""))
         self.pi_formeAttaqueZone.setItemText(1, _fromUtf8(""))
-        icon35 = QtGui.QIcon()
-        icon35.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/cone_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_formeAttaqueZone.addItem(icon35, _fromUtf8(""))
+        icon36 = QtGui.QIcon()
+        icon36.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/cone_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_formeAttaqueZone.addItem(icon36, _fromUtf8(""))
         self.pi_formeAttaqueZone.setItemText(2, _fromUtf8(""))
         self.pi_attaqueCac = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueCac.setGeometry(QtCore.QRect(10, 50, 61, 31))
         self.pi_attaqueCac.setMinimumSize(QtCore.QSize(0, 0))
         self.pi_attaqueCac.setMaximumSize(QtCore.QSize(100, 100))
-        icon36 = QtGui.QIcon()
-        icon36.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/epee_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_attaqueCac.setIcon(icon36)
+        icon37 = QtGui.QIcon()
+        icon37.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/epee_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_attaqueCac.setIcon(icon37)
         self.pi_attaqueCac.setObjectName(_fromUtf8("pi_attaqueCac"))
         self.pi_vol = QtGui.QToolButton(self.pi_actions)
         self.pi_vol.setGeometry(QtCore.QRect(80, 10, 61, 31))
-        icon37 = QtGui.QIcon()
-        icon37.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/oiseau_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_vol.setIcon(icon37)
+        icon38 = QtGui.QIcon()
+        icon38.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/oiseau_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_vol.setIcon(icon38)
         self.pi_vol.setObjectName(_fromUtf8("pi_vol"))
         self.pi_attaqueDist = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueDist.setGeometry(QtCore.QRect(80, 50, 61, 31))
         self.pi_attaqueDist.setMinimumSize(QtCore.QSize(0, 0))
         self.pi_attaqueDist.setMaximumSize(QtCore.QSize(100, 100))
-        icon38 = QtGui.QIcon()
-        icon38.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/arc_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_attaqueDist.setIcon(icon38)
+        icon39 = QtGui.QIcon()
+        icon39.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/arc_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_attaqueDist.setIcon(icon39)
         self.pi_attaqueDist.setObjectName(_fromUtf8("pi_attaqueDist"))
         self.pi_attaqueZone = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueZone.setGeometry(QtCore.QRect(10, 90, 31, 31))
         self.pi_attaqueZone.setText(_fromUtf8(""))
-        icon39 = QtGui.QIcon()
-        icon39.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/bombe_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_attaqueZone.setIcon(icon39)
+        icon40 = QtGui.QIcon()
+        icon40.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/bombe_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_attaqueZone.setIcon(icon40)
         self.pi_attaqueZone.setObjectName(_fromUtf8("pi_attaqueZone"))
         self.verticalLayout_10.addWidget(self.pi_actions)
         self.pi_ongletsListes = QtGui.QTabWidget(self.pi_panneau)
@@ -1020,9 +1063,9 @@ class Ui_principal(object):
         self.pi_listeAttributs.horizontalHeader().setDefaultSectionSize(50)
         self.pi_listeAttributs.verticalHeader().setVisible(False)
         self.verticalLayout_9.addWidget(self.pi_listeAttributs)
-        icon40 = QtGui.QIcon()
-        icon40.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/profil_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_ongletsListes.addTab(self.pi_afficherAttributs, icon40, _fromUtf8(""))
+        icon41 = QtGui.QIcon()
+        icon41.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/profil_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_ongletsListes.addTab(self.pi_afficherAttributs, icon41, _fromUtf8(""))
         self.pi_afficherAttaques = QtGui.QWidget()
         self.pi_afficherAttaques.setObjectName(_fromUtf8("pi_afficherAttaques"))
         self.pi_panneauAttaqueEC = QtGui.QGroupBox(self.pi_afficherAttaques)
@@ -1120,14 +1163,14 @@ class Ui_principal(object):
         self.pi_listeAttaques.horizontalHeader().setVisible(False)
         self.pi_listeAttaques.horizontalHeader().setDefaultSectionSize(50)
         self.pi_listeAttaques.verticalHeader().setVisible(False)
-        icon41 = QtGui.QIcon()
-        icon41.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/attaque_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_ongletsListes.addTab(self.pi_afficherAttaques, icon41, _fromUtf8(""))
+        icon42 = QtGui.QIcon()
+        icon42.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/attaque_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_ongletsListes.addTab(self.pi_afficherAttaques, icon42, _fromUtf8(""))
         self.pi_afficherInventaire = QtGui.QWidget()
         self.pi_afficherInventaire.setObjectName(_fromUtf8("pi_afficherInventaire"))
-        icon42 = QtGui.QIcon()
-        icon42.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sac_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_ongletsListes.addTab(self.pi_afficherInventaire, icon42, _fromUtf8(""))
+        icon43 = QtGui.QIcon()
+        icon43.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sac_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_ongletsListes.addTab(self.pi_afficherInventaire, icon43, _fromUtf8(""))
         self.pi_afficherNotes = QtGui.QWidget()
         self.pi_afficherNotes.setObjectName(_fromUtf8("pi_afficherNotes"))
         self.verticalLayout_8 = QtGui.QVBoxLayout(self.pi_afficherNotes)
@@ -1136,7 +1179,7 @@ class Ui_principal(object):
         self.pi_notes.setDocumentTitle(_fromUtf8(""))
         self.pi_notes.setObjectName(_fromUtf8("pi_notes"))
         self.verticalLayout_8.addWidget(self.pi_notes)
-        self.pi_ongletsListes.addTab(self.pi_afficherNotes, icon32, _fromUtf8(""))
+        self.pi_ongletsListes.addTab(self.pi_afficherNotes, icon33, _fromUtf8(""))
         self.verticalLayout_10.addWidget(self.pi_ongletsListes)
         self.pi_finTour = QtGui.QPushButton(self.pi_panneau)
         self.pi_finTour.setMinimumSize(QtCore.QSize(152, 41))
@@ -1154,9 +1197,9 @@ class Ui_principal(object):
         self.cbt_ajouterPj.setGeometry(QtCore.QRect(20, 470, 131, 51))
         self.cbt_ajouterPj.setMinimumSize(QtCore.QSize(34, 24))
         self.cbt_ajouterPj.setMaximumSize(QtCore.QSize(34000, 24000))
-        icon43 = QtGui.QIcon()
-        icon43.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/nouveauJoueur_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cbt_ajouterPj.setIcon(icon43)
+        icon44 = QtGui.QIcon()
+        icon44.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/nouveauJoueur_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cbt_ajouterPj.setIcon(icon44)
         self.cbt_ajouterPj.setIconSize(QtCore.QSize(32, 32))
         self.cbt_ajouterPj.setObjectName(_fromUtf8("cbt_ajouterPj"))
         self.cbt_panneauDroite.addWidget(self.cbt_panneauDroite3)
@@ -1339,13 +1382,13 @@ class Ui_principal(object):
         self.verticalLayout_12 = QtGui.QVBoxLayout(self.grp_panneauCommande)
         self.verticalLayout_12.setMargin(2)
         self.verticalLayout_12.setObjectName(_fromUtf8("verticalLayout_12"))
-        spacerItem7 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout_12.addItem(spacerItem7)
+        spacerItem8 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.verticalLayout_12.addItem(spacerItem8)
         self.grp_nouveauPj = QtGui.QPushButton(self.grp_panneauCommande)
         self.grp_nouveauPj.setMinimumSize(QtCore.QSize(50, 50))
         self.grp_nouveauPj.setMaximumSize(QtCore.QSize(50, 50))
         self.grp_nouveauPj.setText(_fromUtf8(""))
-        self.grp_nouveauPj.setIcon(icon43)
+        self.grp_nouveauPj.setIcon(icon44)
         self.grp_nouveauPj.setIconSize(QtCore.QSize(24, 24))
         self.grp_nouveauPj.setObjectName(_fromUtf8("grp_nouveauPj"))
         self.verticalLayout_12.addWidget(self.grp_nouveauPj)
@@ -1589,8 +1632,8 @@ class Ui_principal(object):
         self.cbt_panneauGauche.setCurrentIndex(1)
         self.cbt_panneauBas.setCurrentIndex(1)
         self.cbt_panneauDroite.setCurrentIndex(1)
-        self.cp_ongletsListes.setCurrentIndex(1)
-        self.pi_ongletsListes.setCurrentIndex(3)
+        self.cp_ongletsListes.setCurrentIndex(3)
+        self.pi_ongletsListes.setCurrentIndex(0)
         self.tabStatutAppli.setCurrentIndex(2)
         QtCore.QMetaObject.connectSlotsByName(principal)
 
@@ -1674,8 +1717,8 @@ class Ui_principal(object):
         self.cp_formeSimple.setText(_translate("principal", "...", None))
         self.cp_formeEllipsePlein.setToolTip(_translate("principal", "Ellipse (pleine)", None))
         self.cp_formeEllipsePlein.setText(_translate("principal", "...", None))
-        self.cp_formeLigneOrientee_2.setToolTip(_translate("principal", "Frontière", None))
-        self.cp_formeLigneOrientee_2.setText(_translate("principal", "...", None))
+        self.cp_formePot.setToolTip(_translate("principal", "Frontière", None))
+        self.cp_formePot.setText(_translate("principal", "...", None))
         item = self.cp_listeTerrains.horizontalHeaderItem(0)
         item.setText(_translate("principal", "code", None))
         item = self.cp_listeTerrains.horizontalHeaderItem(1)
@@ -1692,13 +1735,9 @@ class Ui_principal(object):
         item.setText(_translate("principal", "Creature", None))
         self.cp_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherCreatures), _translate("principal", "Afficher la liste des créatures", None))
         item = self.cp_listeCaches.horizontalHeaderItem(0)
-        item.setText(_translate("principal", "N°", None))
+        item.setText(_translate("principal", "Nom", None))
         item = self.cp_listeCaches.horizontalHeaderItem(1)
-        item.setText(_translate("principal", "Actif", None))
-        item = self.cp_listeCaches.horizontalHeaderItem(2)
-        item.setText(_translate("principal", "Modif", None))
-        item = self.cp_listeCaches.horizontalHeaderItem(3)
-        item.setText(_translate("principal", "Suppr", None))
+        item.setText(_translate("principal", "activer", None))
         self.cp_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherCaches), _translate("principal", "Afficher les notes du plateau", None))
         self.cp_placerEntree.setToolTip(_translate("principal", "Placer la/les entrée(s)", None))
         self.cp_placerEntree.setText(_translate("principal", "...", None))
@@ -1779,7 +1818,7 @@ class Ui_principal(object):
         self.actionParam_tres.setText(_translate("principal", "Paramètres", None))
         self.actionLexique.setText(_translate("principal", "Lexique", None))
 
-from dm import DmFrameInf_Decor, DmFrameInf_Case, DmTableBiblio, DmFrameInf_Combattant, DmGraphicsView, DmLabel, DmTextEdit
+from dm import DmFrameInf_Decor, DmFrameInf_Case, DmTableBiblio, DmFrameInf_Combattant, DmGraphicsView, DmLabel, DmTableWidget, DmTextEdit
 import ressource_rc
 
 if __name__ == "__main__":

+ 146 - 18
lib/ui/mainwindow.ui

@@ -2004,7 +2004,7 @@
                        <enum>Qt::Horizontal</enum>
                       </property>
                      </widget>
-                     <widget class="QToolButton" name="cp_formeLigneOrientee_2">
+                     <widget class="QToolButton" name="cp_formePot">
                       <property name="geometry">
                        <rect>
                         <x>111</x>
@@ -2061,8 +2061,45 @@
                        <height>16777215</height>
                       </size>
                      </property>
+                     <property name="palette">
+                      <palette>
+                       <active>
+                        <colorrole role="Base">
+                         <brush brushstyle="SolidPattern">
+                          <color alpha="255">
+                           <red>248</red>
+                           <green>248</green>
+                           <blue>248</blue>
+                          </color>
+                         </brush>
+                        </colorrole>
+                       </active>
+                       <inactive>
+                        <colorrole role="Base">
+                         <brush brushstyle="SolidPattern">
+                          <color alpha="255">
+                           <red>248</red>
+                           <green>248</green>
+                           <blue>248</blue>
+                          </color>
+                         </brush>
+                        </colorrole>
+                       </inactive>
+                       <disabled>
+                        <colorrole role="Base">
+                         <brush brushstyle="SolidPattern">
+                          <color alpha="255">
+                           <red>240</red>
+                           <green>240</green>
+                           <blue>240</blue>
+                          </color>
+                         </brush>
+                        </colorrole>
+                       </disabled>
+                      </palette>
+                     </property>
                      <property name="currentIndex">
-                      <number>1</number>
+                      <number>3</number>
                      </property>
                      <widget class="QWidget" name="cp_afficherTerrains">
                       <attribute name="icon">
@@ -2410,13 +2447,53 @@
                        <string>Afficher les notes du plateau</string>
                       </attribute>
                       <layout class="QVBoxLayout" name="verticalLayout_5">
+                       <property name="spacing">
+                        <number>3</number>
+                       </property>
                        <item>
-                        <widget class="QTableWidget" name="cp_listeCaches">
+                        <widget class="DmTableWidget" name="cp_listeCaches">
+                         <property name="palette">
+                          <palette>
+                           <active>
+                            <colorrole role="Base">
+                             <brush brushstyle="SolidPattern">
+                              <color alpha="255">
+                               <red>248</red>
+                               <green>248</green>
+                               <blue>248</blue>
+                              </color>
+                             </brush>
+                            </colorrole>
+                           </active>
+                           <inactive>
+                            <colorrole role="Base">
+                             <brush brushstyle="SolidPattern">
+                              <color alpha="255">
+                               <red>248</red>
+                               <green>248</green>
+                               <blue>248</blue>
+                              </color>
+                             </brush>
+                            </colorrole>
+                           </inactive>
+                           <disabled>
+                            <colorrole role="Base">
+                             <brush brushstyle="SolidPattern">
+                              <color alpha="255">
+                               <red>240</red>
+                               <green>240</green>
+                               <blue>240</blue>
+                              </color>
+                             </brush>
+                            </colorrole>
+                           </disabled>
+                          </palette>
+                         </property>
                          <property name="horizontalScrollBarPolicy">
                           <enum>Qt::ScrollBarAlwaysOff</enum>
                          </property>
                          <property name="editTriggers">
-                          <set>QAbstractItemView::NoEditTriggers</set>
+                          <set>QAbstractItemView::SelectedClicked</set>
                          </property>
                          <property name="cornerButtonEnabled">
                           <bool>false</bool>
@@ -2425,33 +2502,79 @@
                           <bool>false</bool>
                          </attribute>
                          <attribute name="horizontalHeaderDefaultSectionSize">
-                          <number>28</number>
+                          <number>105</number>
                          </attribute>
                          <attribute name="verticalHeaderVisible">
                           <bool>false</bool>
                          </attribute>
+                         <attribute name="verticalHeaderDefaultSectionSize">
+                          <number>45</number>
+                         </attribute>
                          <column>
                           <property name="text">
-                           <string>N°</string>
-                          </property>
-                         </column>
-                         <column>
-                          <property name="text">
-                           <string>Actif</string>
-                          </property>
-                         </column>
-                         <column>
-                          <property name="text">
-                           <string>Modif</string>
+                           <string>Nom</string>
                           </property>
                          </column>
                          <column>
                           <property name="text">
-                           <string>Suppr</string>
+                           <string>activer</string>
                           </property>
                          </column>
                         </widget>
                        </item>
+                       <item>
+                        <layout class="QHBoxLayout" name="horizontalLayout_9">
+                         <property name="topMargin">
+                          <number>0</number>
+                         </property>
+                         <item>
+                          <widget class="QToolButton" name="cp_supprimerCache">
+                           <property name="text">
+                            <string/>
+                           </property>
+                           <property name="icon">
+                            <iconset resource="ressource.qrc">
+                             <normaloff>:/interface/16/ressource/corbeille_16.png</normaloff>:/interface/16/ressource/corbeille_16.png</iconset>
+                           </property>
+                          </widget>
+                         </item>
+                         <item>
+                          <spacer name="horizontalSpacer_8">
+                           <property name="orientation">
+                            <enum>Qt::Horizontal</enum>
+                           </property>
+                           <property name="sizeHint" stdset="0">
+                            <size>
+                             <width>40</width>
+                             <height>20</height>
+                            </size>
+                           </property>
+                          </spacer>
+                         </item>
+                         <item>
+                          <widget class="QToolButton" name="cp_nouveauCache">
+                           <property name="text">
+                            <string/>
+                           </property>
+                           <property name="icon">
+                            <iconset resource="ressource.qrc">
+                             <normaloff>:/interface/16/ressource/plus_16.png</normaloff>:/interface/16/ressource/plus_16.png</iconset>
+                           </property>
+                          </widget>
+                         </item>
+                         <item>
+                          <widget class="QToolButton" name="cp_editerCache">
+                           <property name="text">
+                            <string/>
+                           </property>
+                           <property name="icon">
+                            <iconset resource="ressource.qrc">
+                             <normaloff>:/interface/16/ressource/editer_16.png</normaloff>:/interface/16/ressource/editer_16.png</iconset>
+                           </property>
+                          </widget>
+                         </item>
+                        </layout>
+                       </item>
                       </layout>
                      </widget>
                     </widget>
@@ -3043,7 +3166,7 @@ selectionné</string>
                     </size>
                    </property>
                    <property name="currentIndex">
-                    <number>3</number>
+                    <number>0</number>
                    </property>
                    <widget class="QWidget" name="pi_afficherAttributs">
                     <attribute name="icon">
@@ -4790,6 +4913,11 @@ selectionné</string>
    <header location="global">dm.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>DmTableWidget</class>
+   <extends>QTableWidget</extends>
+   <header>dm.h</header>
+  </customwidget>
  </customwidgets>
  <resources>
   <include location="ressource.qrc"/>

+ 71 - 41
lib/ui/ressource_rc.py

@@ -2,7 +2,7 @@
 
 # Resource object code
 #
-# Created: lun. 29. juin 12:10:18 2015
+# Created: mar. 30. juin 11:38:31 2015
 #      by: The Resource Compiler for PyQt (Qt v4.8.5)
 #
 # WARNING! All changes made in this file will be lost!
@@ -2204,6 +2204,30 @@ qt_resource_data = "\
 \x5f\xf8\xc0\x02\xaf\xe8\xb7\x75\x21\x6a\xbf\x31\x22\x02\xd7\xf8\
 \xc9\xcc\x55\x6b\x11\x75\x60\xdf\x58\x03\x56\x79\x28\xad\xb7\x9d\
 \xb2\x1f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x5d\
+\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\x24\x49\x44\x41\x54\x38\x8d\x8d\xd3\x3f\x28\x85\x51\
+\x18\xc7\xf1\x8f\x18\x6e\xfe\x4c\x4a\x58\x64\x37\x19\x0c\xca\x78\
+\x17\x59\x94\x0c\x0c\x92\x41\x12\x29\x83\x52\x12\xc5\x20\x8b\xc1\
+\xa2\xc8\x20\xa1\x44\x16\x93\xfc\x49\x46\xc4\x20\x25\x83\xc5\xc2\
+\x2d\xe5\xc6\xc6\xf0\xbe\xea\x75\x3b\xae\xf7\x57\xcf\xf2\x9c\xe7\
+\xf7\x3d\xe7\x3c\xe7\x39\xfc\x56\x39\x0e\xb0\x82\x75\x2c\x60\x09\
+\x8d\x52\x2a\x83\x3d\xf4\xe1\x0a\x5f\xc8\xe3\x09\xb5\xff\x99\x2b\
+\xd0\x8f\x76\xbc\xc4\xe6\x2f\xbc\x63\x3a\x06\x07\x55\x8b\x39\xbc\
+\xc6\x86\x07\x74\xe0\x2c\x01\xe9\xc4\x2d\xda\x42\x80\xf3\x44\xe1\
+\x4f\xe4\x31\x89\x21\xdc\x61\x13\x3d\xd8\x0f\x01\x96\x03\x80\x9f\
+\xb8\x41\x13\x3e\xd0\x82\x1c\xaa\x0b\x01\xd9\x22\x80\x64\x1c\x61\
+\x1b\xdd\x85\x80\x52\x3c\xa7\x84\xdc\x63\x36\x74\x8d\xc5\x94\x80\
+\x9c\xa8\x99\x25\x85\x80\x1a\xbc\x15\x31\x7e\x62\x0d\x87\xd8\x40\
+\x7d\xe8\x14\x13\x7f\xec\x38\x8f\xba\xb8\x66\x55\x34\x13\xcd\x21\
+\x40\x06\x97\xb1\xf1\x11\xa3\xa8\x8c\xd7\x5a\xb1\x85\x53\x0c\xe3\
+\x1a\xe3\x21\x48\x03\xba\x44\x8d\x4d\x6a\x04\x03\xa2\x69\x25\xfa\
+\x23\xd9\x10\x20\xa4\x41\xec\xa0\x37\x91\x1b\xc7\x2e\xc6\xd2\x00\
+\x76\x30\x83\xb2\x44\xae\x52\xf4\x72\xbb\x69\x00\x19\x4c\xe1\x38\
+\x8e\x13\x5c\x88\xfe\x4f\xd5\x37\xe0\xc2\x6d\x70\xa7\x76\x27\x5b\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \x00\x00\x01\x6b\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -4595,6 +4619,11 @@ qt_resource_name = "\
 \x02\x44\x26\x27\
 \x00\x65\
 \x00\x61\x00\x75\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x07\x24\x9c\xe7\
+\x00\x70\
+\x00\x6f\x00\x74\x00\x50\x00\x65\x00\x69\x00\x6e\x00\x74\x00\x75\x00\x72\x00\x65\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
 \x00\x0f\
 \x00\x41\x67\x07\
 \x00\x73\
@@ -4766,9 +4795,9 @@ qt_resource_struct = "\
 \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\x42\x00\x02\x00\x00\x00\x03\x00\x00\x00\x07\
-\x00\x00\x0c\x2e\x00\x00\x00\x4a\x00\x25\x00\x00\xea\xa7\
-\x00\x00\x0c\x0e\x00\x00\x00\x4a\x00\x25\x00\x00\xba\x73\
-\x00\x00\x0b\xea\x00\x00\x00\x4a\x00\x25\x00\x00\xa7\x9f\
+\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\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\x00\x5a\x00\x00\x00\x4a\x00\x25\x00\x00\x00\x00\
@@ -4807,64 +4836,65 @@ qt_resource_struct = "\
 \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\x00\x42\x00\x02\x00\x00\x00\x06\x00\x00\x00\x30\
-\x00\x00\x0c\x4c\x00\x00\x00\x4a\x00\x25\x00\x00\xf6\x7b\
-\x00\x00\x0c\xee\x00\x00\x00\x4a\x00\x25\x00\x00\xff\x14\
-\x00\x00\x0c\xd2\x00\x00\x00\x4a\x00\x25\x00\x00\xfd\xbf\
-\x00\x00\x0c\x70\x00\x00\x00\x4a\x00\x25\x00\x00\xf8\x8e\
-\x00\x00\x0c\xb4\x00\x00\x00\x4a\x00\x25\x00\x00\xfc\x4f\
-\x00\x00\x0c\x96\x00\x00\x00\x4a\x00\x25\x00\x00\xfa\xa1\
-\x00\x00\x00\x42\x00\x02\x00\x00\x00\x33\x00\x00\x00\x37\
-\x00\x00\x07\xf6\x00\x00\x00\x4a\x00\x25\x00\x00\x81\x42\
+\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\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\x07\x3e\x00\x00\x00\x4a\x00\x25\x00\x00\x7a\xca\
 \x00\x00\x07\x8a\x00\x00\x00\x4a\x00\x25\x00\x00\x7d\xde\
 \x00\x00\x07\xb0\x00\x00\x00\x4a\x00\x25\x00\x00\x7e\xff\
-\x00\x00\x08\xba\x00\x00\x00\x4a\x00\x25\x00\x00\x89\xd9\
+\x00\x00\x08\xe4\x00\x00\x00\x4a\x00\x25\x00\x00\x8b\x3a\
 \x00\x00\x07\xdc\x00\x00\x00\x4a\x00\x25\x00\x00\x7f\xef\
-\x00\x00\x08\xdc\x00\x00\x00\x4a\x00\x25\x00\x00\x8b\x6d\
+\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\x0a\xfa\x00\x00\x00\x4a\x00\x25\x00\x00\x9e\x42\
+\x00\x00\x0b\x24\x00\x00\x00\x4a\x00\x25\x00\x00\x9f\xa3\
 \x00\x00\x05\x92\x00\x00\x00\x4a\x00\x25\x00\x00\x6a\xf2\
-\x00\x00\x09\x16\x00\x00\x00\x4a\x00\x25\x00\x00\x8c\xad\
-\x00\x00\x0a\x0a\x00\x00\x00\x4a\x00\x25\x00\x00\x95\xe9\
+\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\x06\x58\x00\x00\x00\x4a\x00\x25\x00\x00\x71\x9a\
-\x00\x00\x0b\x42\x00\x00\x00\x4a\x00\x25\x00\x00\xa0\xcf\
-\x00\x00\x09\x2e\x00\x00\x00\x4a\x00\x25\x00\x00\x8e\x21\
-\x00\x00\x0a\x4a\x00\x00\x00\x4a\x00\x25\x00\x00\x97\x92\
-\x00\x00\x0a\x8c\x00\x00\x00\x4a\x00\x25\x00\x00\x9a\x02\
-\x00\x00\x09\x92\x00\x00\x00\x4a\x00\x25\x00\x00\x92\x15\
-\x00\x00\x0b\x14\x00\x00\x00\x4a\x00\x25\x00\x00\x9f\xae\
+\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\x05\xac\x00\x00\x00\x4a\x00\x25\x00\x00\x6c\x6f\
-\x00\x00\x08\x58\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x88\
-\x00\x00\x0a\xb2\x00\x00\x00\x4a\x00\x25\x00\x00\x9b\x50\
-\x00\x00\x09\x4a\x00\x00\x00\x4a\x00\x25\x00\x00\x8f\x06\
-\x00\x00\x0b\x5e\x00\x00\x00\x4a\x00\x25\x00\x00\xa2\xac\
-\x00\x00\x08\x7a\x00\x00\x00\x4a\x00\x25\x00\x00\x86\x2a\
+\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\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\x08\x9a\x00\x00\x00\x4a\x00\x25\x00\x00\x88\x56\
-\x00\x00\x08\xf6\x00\x00\x00\x4a\x00\x25\x00\x00\x8c\x21\
-\x00\x00\x0a\x26\x00\x00\x00\x4a\x00\x25\x00\x00\x97\x38\
-\x00\x00\x0a\x6c\x00\x00\x00\x4a\x00\x25\x00\x00\x98\xd6\
+\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\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\x06\x2e\x00\x00\x00\x4a\x00\x25\x00\x00\x70\x5f\
-\x00\x00\x0b\xc0\x00\x00\x00\x4a\x00\x25\x00\x00\xa6\x9b\
+\x00\x00\x0b\xea\x00\x00\x00\x4a\x00\x25\x00\x00\xa7\xfc\
 \x00\x00\x06\xd2\x00\x00\x00\x4a\x00\x25\x00\x00\x77\x3d\
-\x00\x00\x08\x1a\x00\x00\x00\x4a\x00\x25\x00\x00\x82\xb1\
+\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\x06\xb2\x00\x00\x00\x4a\x00\x25\x00\x00\x76\x50\
-\x00\x00\x09\x6e\x00\x00\x00\x4a\x00\x25\x00\x00\x90\x9f\
+\x00\x00\x09\x98\x00\x00\x00\x4a\x00\x25\x00\x00\x92\x00\
 \x00\x00\x05\xcc\x00\x00\x00\x4a\x00\x25\x00\x00\x6d\xd0\
-\x00\x00\x09\xb6\x00\x00\x00\x4a\x00\x25\x00\x00\x93\x93\
+\x00\x00\x09\xe0\x00\x00\x00\x4a\x00\x25\x00\x00\x94\xf4\
 \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\x05\x4a\x00\x00\x00\x4a\x00\x25\x00\x00\x68\xa4\
-\x00\x00\x09\xde\x00\x00\x00\x4a\x00\x25\x00\x00\x94\xdc\
-\x00\x00\x0a\xd2\x00\x00\x00\x4a\x00\x25\x00\x00\x9d\x27\
+\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\x06\x10\x00\x00\x00\x4a\x00\x25\x00\x00\x6f\x58\
-\x00\x00\x0b\x7e\x00\x00\x00\x4a\x00\x25\x00\x00\xa3\xf3\
+\x00\x00\x0b\xa8\x00\x00\x00\x4a\x00\x25\x00\x00\xa5\x54\
 \x00\x00\x05\x74\x00\x00\x00\x4a\x00\x25\x00\x00\x69\xf5\
-\x00\x00\x0b\xa2\x00\x00\x00\x4a\x00\x25\x00\x00\xa4\x94\
+\x00\x00\x0b\xcc\x00\x00\x00\x4a\x00\x25\x00\x00\xa5\xf5\
 \x00\x00\x07\x6c\x00\x00\x00\x4a\x00\x25\x00\x00\x7b\xe8\
-\x00\x00\x08\x3a\x00\x00\x00\x4a\x00\x25\x00\x00\x83\x3b\
+\x00\x00\x08\x64\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x9c\
 "
 
 def qInitResources():

BIN
parties/Partie1/svg/0.p


BIN
parties/Partie1/svg/1.p


BIN
parties/Partie1/svg/2.p


BIN
parties/Partie1/svg/infos_sauvegarde