Bläddra i källkod

Creation des classes GestionCombat et ListePions

olinox14 10 år sedan
förälder
incheckning
ee8fbbcb55
50 ändrade filer med 1102 tillägg och 833 borttagningar
  1. 1 0
      .settings/org.eclipse.core.resources.prefs
  2. 13 8
      DMonde.py
  3. 17 11
      avancement.TXT
  4. 1 1
      lib/Actions.py
  5. 5 11
      lib/Cache.py
  6. 7 53
      lib/Case.py
  7. 13 12
      lib/Combattant.py
  8. 106 0
      lib/ListePions.py
  9. 27 77
      lib/Modes.py
  10. 1 1
      lib/Pion.py
  11. 392 437
      lib/Plateau.py
  12. 4 3
      lib/explorateurMat.py
  13. 129 0
      lib/gC.py
  14. 6 7
      lib/gM.py
  15. 2 25
      lib/test.py
  16. 9 12
      lib/ui/dm.py
  17. 129 104
      lib/ui/ecran_principal.py
  18. 1 1
      lib/ui/explorateurMateriels.ui
  19. 80 29
      lib/ui/principal.ui
  20. 2 0
      lib/ui/ressource.qrc
  21. BIN
      lib/ui/ressource/ninja_16.png
  22. BIN
      lib/ui/ressource/piege_16.png
  23. 130 37
      lib/ui/ressource_rc.py
  24. BIN
      mat/defaut/cbpjko6PKn.dm
  25. BIN
      mat/defaut/cbpjlhJRJf.dm
  26. BIN
      mat/defaut/cbpjlhKTq6.dm
  27. BIN
      mat/defaut/dcpjlhHrA6.dm
  28. BIN
      mat/defaut/dcpjlhJaf9.dm
  29. BIN
      mat/defaut/trpjlhF3od.dm
  30. BIN
      mat/defaut/trpjlhGeI8.dm
  31. BIN
      mat/defaut/trpjlhGpxm.dm
  32. 3 4
      parties/defaut/cbt/infos_sauvegarde
  33. BIN
      parties/defaut/cbt/plpjko6FCR.dm
  34. BIN
      parties/defaut/cbt/plpjko8it5.dm
  35. BIN
      parties/defaut/cbt/plpjloIyzj.dm
  36. BIN
      parties/defaut/grp/cbpjjkaliQ.dm
  37. BIN
      parties/defaut/grp/cbpjjo2fVX.dm
  38. BIN
      parties/defaut/grp/cbpjjo3PbS.dm
  39. BIN
      parties/defaut/grp/cbpjjo3cGS.dm
  40. BIN
      parties/defaut/grp/cbpjjoYIe3.dm
  41. BIN
      parties/defaut/grp/cbpjjovwvD.dm
  42. BIN
      parties/defaut/grp/pjpjlnfAxO.dm
  43. BIN
      parties/defaut/grp/pjpjlngiGG.dm
  44. BIN
      parties/defaut/grp/pjpjlngzFC.dm
  45. 4 0
      tmp/sepjll5RY2.tmp
  46. 4 0
      tmp/sepjlm2NsZ.tmp
  47. 4 0
      tmp/sepjlmdlsy.tmp
  48. 4 0
      tmp/sepjlmfVzW.tmp
  49. 4 0
      tmp/sepjlnfj9f.tmp
  50. 4 0
      tmp/sepjloJZCx.tmp

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

@@ -4,6 +4,7 @@ encoding//lib/Actions.py=utf-8
 encoding//lib/Cache.py=utf-8
 encoding//lib/Case.py=utf-8
 encoding//lib/Combattant.py=utf-8
+encoding//lib/Creature.py=utf-8
 encoding//lib/Decor.py=utf-8
 encoding//lib/EcranAffichageTexte.py=utf-8
 encoding//lib/EcranAltitude.py=utf-8

+ 13 - 8
DMonde.py

@@ -11,6 +11,7 @@ from PyQt4.QtGui import QMainWindow, QGraphicsView, QTableWidget, QLineEdit, \
     QApplication
 
 from lib.Actions import Ligne
+from lib.Combattant import PJ
 from lib.EcranChargerPlateau import EcranChargerPlateau
 from lib.EcranCreerPlateau import EcranCreerPlateau
 from lib.EcranEditionCombattant import EcranEditionCombattant
@@ -30,12 +31,12 @@ class DMonde(QMainWindow):
         """initialisation de la fenetre"""
         super (DMonde, self).__init__()
         self.plateau = None
-        self.profil = "Joueur"
+        self.util = "Joueur"
         self.partie = ""
         self.regles = ""
         self.idPlateauEnCours = ""
         self.plateauConnecte = False
-        self._compteurPj = 0
+        self.pjs = []   #liste des idM des personnages du groupe
         self.createWidgets()
 
     def createWidgets(self):
@@ -55,6 +56,9 @@ class DMonde(QMainWindow):
         
 #         self.showMaximized()
 
+    def estMj(self):
+        return True
+
     def chargerPartie(self, idPartie):
         """charge la partie"""
         self.profil = "olivier"
@@ -200,14 +204,15 @@ class DMonde(QMainWindow):
         self.ui.grp_deroulement_layout.setAlignment(Qt.AlignTop)
 
     def pjAjouterAListe(self, pj = None):
-        colonne = (self._compteurPj % 3) * 2
-        ligne = int(self._compteurPj / 3)
-        self._compteurPj += 1
+        compteur = len(self.pjs)
+        colonne = (compteur % 3) * 2
+        ligne = int(compteur / 3)
+        self.pjs.append(pj.idM())
         
-        panneau = FramePj(self._compteurPj)
+        panneau = FramePj(compteur)
         if pj:
             panneau.chargerPj(pj)
-        panneau.setObjectName(QString("pj_panneau_{}".format(self._compteurPj)))
+        panneau.setObjectName(QString("pj_panneau_{}".format(compteur)))
         self.connect(panneau, SIGNAL("pjModifie(int)"), self.pjEnregistrer)
         self.ui.grp_deroulement_layout.addWidget(panneau, ligne, colonne)
         
@@ -222,7 +227,7 @@ class DMonde(QMainWindow):
         self.ui.grp_deroulement_layout.removeWidget(panneau)
 
     def nouveauPj(self):
-        fen = EcranEditionCombattant()
+        fen = EcranEditionCombattant(PJ())
         fen.exec_()
         pj = fen.combattant()
         del fen

+ 17 - 11
avancement.TXT

@@ -8,7 +8,7 @@
   *7- la mise a jour des effets ne fonctionne pas
   *8- zone de placement ne peut pas etre scindee
   *9- edition cbtants: le bouton aide n'affiche rien
-10- tables mat: impossible de supprimer un objet
+  *10- tables mat: impossible de supprimer un objet
   *11- dragon: image ne pivote pas avec le pion!
   *12- interdire deplacement sur d'autres pions
   *14- Fiches de perso: quand on ouvre direct sur la page 3, les onglets a droite ne suivent pas
@@ -17,20 +17,25 @@
        elargir un peu la scrollarea des attaques
   *17- inventaire commence sur l'onglet "trésor"
   *18- pj: quand on modifie la couleur apres la creation, la couleur de la frame n'est pas mise a jour
-19- a l'ouverture, les frames PJ sont PARFOIS les unes sur les autres
+ ?19- a l'ouverture, les frames PJ sont PARFOIS les unes sur les autres
   *20- ne plus ouvrir le pateau en mode combat au chargement
-21- impossible de placer un materiel charge dans la table de mat
+  *21- impossible de placer un materiel charge dans la table de mat
   *22- epaisseur ne fonctionne pas avec ligne (dessin)
   *23- zone placement: hachures ne s'enlèvent pas aprés dessin, pas de curseur pinceau
   *24- notes plateau: s'ouvre plusieurs fois (pas bien supprimé aprés fermeture?)
-25- ne pas afficher les pions sous les caches dans l'ordre de jeu
+  *25- ne pas afficher les pions sous les caches dans l'ordre de jeu
 26- ecran gestion du combat ne s'affiche pas
-27 bug au remplissage de la liste des PJ
-28- gomme: le point d'effet du curseur est en bas a droite
-29- retirer de dm les refs a 'commun', 'mat'...ETc
+  *27 bug au remplissage de la liste des PJ
+  *28- gomme: le point d'effet du curseur est en bas a droite
+  *29- retirer de la lib dm les refs a 'commun', 'mat'...ETc
 30- Remettre en marche la liste des attributs des pions
 31- Afficher possibilité de deplacement meme lorsqu'on clique sur une 'case secondaire' d'un grand decor
-32- lorsque pion sur decor: pion toujours au dessus
+32- lorsque pion sur decor: pion toujours au dessus  -> gerer ça avec les Z
+33- accelerer virer ou la maj des textures des cases
+34- chargement plateau: le bouton d'import est connecte 2 fois
+  *35- suppression de cache: l'etiquette n'est pas supprimee
+36- decors ne sont pas deplaces
+37- pions ne peuvent pas etre places sur des decors (en mode creation)
 
 
 ### orga fichiers/ fonctions
@@ -43,11 +48,12 @@
 2- creer menu combat
 3- pouvoir afficher les fiches des pions, generation de valeurs aleatoires, mode edition
 4- ameliorer la perf de la zone disque et de la zone cone
-5- creer un bandeau de description de l'action en cours (a la place du journal)
+5- creer un bandeau de description de l'action en cours (a la place du journal), avec bouton Valider
 6- décors à forme variables
 7- integrer l'attribut hauteurMax pour les decors
 8- ajouter les effets aux cases, decors, et combattants
-9- Faire une gestion des materiels plus propre pour le plateau
+  *9- Faire une gestion des materiels plus propre pour le plateau
+
 
 ### ameliorations (secondaires)
 1- ajouter des pieges
@@ -56,4 +62,4 @@
 4- regler l'effet de la tabulation dans les fiches
 5- Permettre l'envoi de sons par le chat 
 6- creer une frame qui montre une vue en coupe de l'altitude et des obstacles (a la place du journal) lors des deplacements, attaques à distance ou de zone
-
+7- changer l'incrementation des dim du plateau pour bouger 10 par 10

+ 1 - 1
lib/Actions.py

@@ -74,7 +74,7 @@ class Action(object):
         pass
 
     def acteur(self):
-        return self.plateau.combattants[self._num]
+        return self.plateau.pions[self._num]
 
     def coordActeur(self):
         return self.acteur().position

+ 5 - 11
lib/Cache.py

@@ -37,12 +37,9 @@ class Cache(object):
         
         for coord in self._listeCases:
             self.plateau.cases[coord].ajouterCache(self._idCache)  
-        
-        for idCombattant in self.plateau.combattants:
-            if self.plateau.combattants[idCombattant].position in self._listeCases:
-                self.plateau.combattants[idCombattant].cacher(self._idCache)
-        
-        self.creerEtiquette()            
+    #         
+        self.creerEtiquette()  
+        self.plateau.gC.maj()          
 
     def creerEtiquette(self):
         self.etiquette = EtiquetteCache(self)
@@ -57,14 +54,11 @@ class Cache(object):
         for coord in self._listeCases:
             self.plateau.cases[coord].retirerCache(self._idCache)
 
-        for idCombattant in self.plateau.combattants:
-            if self.plateau.combattants[idCombattant].position in self._listeCases:
-                self.plateau.combattants[idCombattant].reveler(self._idCache)
-
         self.plateau.removeItem(self.etiquette)
 
         del self.plateau.caches[self._idCache]         
-        
+
+        self.plateau.gC.maj()
  
         
 class EtiquetteCache(QGraphicsTextItem):

+ 7 - 53
lib/Case.py

@@ -123,7 +123,6 @@ class Case(QGraphicsPolygonItem):
         
         self.creerGraphique()
         self.majTerrain(self.terrain)   
-        self.majAffichageSpecial("")
         self.majEffet(self.effetActif)
 
     def polygone(self, x, y):
@@ -225,10 +224,8 @@ class Case(QGraphicsPolygonItem):
                 break
         retour = None
         if num:
-            if num < 10000:
-                retour = self.plateau.combattants[num]
-            else:
-                retour = self.plateau.decors[num] 
+            retour = self.plateau.pions[num]
+
         if retour:
             if not isinstance(retour, classe): retour = None        
         return retour                          
@@ -321,56 +318,13 @@ class Case(QGraphicsPolygonItem):
             self.effetActif = ""
             self.polygoneEffet.setVisible(False)              
 
-    def majAffichageSpecial(self, affichage=""):
-        """donne a la case l'aspect demande en rendant visible/invisible le polygone d'affichage special"""
-        #polygone d'affichage special (altitude, tactique...)
-        if self.polygoneAffichageSpecial == None:
-            self.polygoneAffichageSpecial = QGraphicsPolygonItem(self.polygone(self.x, self.y), parent=self)
-            pinceau = QPen()
-            pinceau.setColor(self.bordure)
-            pinceau.setWidth(1)
-            self.polygoneAffichageSpecial.setPen(pinceau)
-
-        if affichage != "altitude" and self.etiquetteAltitude:
-            self.etiquetteAltitude.setVisible(False)
-            
-        if affichage == "tactique":
-            if self.terrain.franchissable:
-                self.polygoneAffichageSpecial.setBrush(QColor(255,255,255))
-            else:
-                self.polygoneAffichageSpecial.setBrush(QColor(50,50,50))
-            self.polygoneAffichageSpecial.setVisible(True)
-            
-        elif affichage == "altitude":
-            if self.etiquetteAltitude == None:
-                self.etiquetteAltitude = QGraphicsSimpleTextItem("{}".format(self.altitude), parent=self)
-                police = QFont("Georgia", 18)
-                police.setItalic(True)
-                self.etiquetteAltitude.setFont(police)
-                self.etiquetteAltitude.setPos(QPointF(((self.x*0.866)+0.65)*self.plateau.hCase,  (self.y+0.7)*self.plateau.hCase))
-            if self.altitude >= 0:
-                couleur = QColor("red").lighter(200-(5*self.altitude))
-            else:
-                couleur = QColor("purple").lighter(200+(5*self.altitude))
-            self.polygoneAffichageSpecial.setBrush(couleur)
-            self.polygoneAffichageSpecial.setZValue(5)
-            self.polygoneAffichageSpecial.setVisible(True)
-            self.etiquetteAltitude.setText(QString.fromUtf8("{}".format(self.altitude)))
-            self.etiquetteAltitude.setVisible(True)
-            self.etiquetteAltitude.setZValue(6)
-        else:
-            self.polygoneAffichageSpecial.setVisible(False)
-
-
     #caches
     def ajouterCache(self, idCache):
-        if not idCache in self.caches:
-            self.caches.append(idCache)
+        if not idCache in self.caches: self.caches.append(idCache)
         self.majCache()
         
     def retirerCache(self, idCache):
-        if idCache in self.caches:
-            self.caches.remove(idCache) 
+        if idCache in self.caches: self.caches.remove(idCache) 
         self.majCache()
     
     def majCache(self):
@@ -380,7 +334,7 @@ class Case(QGraphicsPolygonItem):
                                 
     def estCachee(self):
         """une case cachee ne recoit plus aucun evenement souris ou clavier"""
-        return (len(self.caches) > 0 and not issubclass(self.plateau.modeActif.__class__, Modes.ModeBaseCp))
+        return (len(self.caches) > 0)
 
     #fonctions secondaires
     def couleurDep(self):
@@ -454,7 +408,7 @@ class Case(QGraphicsPolygonItem):
     def hoverEnterEvent(self, event):
         """met a jour l'affichage de la case au survol de la souris, si un pion est selectionne"""
         super(Case, self).hoverEnterEvent(event)
-        if not self.estCachee():
+        if not self.estCachee() or issubclass(self.plateau.modeActif.__class__, Modes.ModeBaseCp):
             self.plateau.caseSurvol(self.x, self.y)
 
     def hoverLeaveEvent(self, event):
@@ -585,7 +539,7 @@ class PolygoneCache(QGraphicsPolygonItem):
     def sceneEvent(self, event):
         """filtre les evenements souris et clavier
             si faux: l'evenement est bloque"""
-        autorise = not self.case.estCachee()
+        autorise = not self.case.estCachee() or issubclass(self.case.plateau.modeActif.__class__, Modes.ModeBaseCp)
         if not autorise:
             event.accept()
         else:

+ 13 - 12
lib/Combattant.py

@@ -26,12 +26,11 @@ class Combattant(Pion, Materiel):
         #caracs liees au combat:
         self.etat = ""
         self.deplacementRestant = 0        
-        self.caches = []   #liste des id des caches qui couvrent le combattant
 
     def pM(self):
         """les points de mouvement"""
         return max([self.depMarche, self.depNage, self.depEscalade, self.depVol])
-    
+
     def coutDep(self, typeDep, dist = 1):
         """renvoie le cout en PM pour effectuer ce deplacement"""
         retour = 1
@@ -51,18 +50,13 @@ class Combattant(Pion, Materiel):
         self.plateau = plateau
         super(Combattant, self).ajouterAuPlateau(self.plateau)
         self.majEtiquette()
-        
-    def cacher(self, idCache):
-        """on a place le combattant sous un cache"""
-        self.caches.append(idCache)
-        
-    def reveler(self, idCache):
-        """on a retire le cache qui couvrait ce combattant"""
-        self.caches.remove(idCache)
 
     def estCache(self):
         """met a jour le combattant selon qu'il est cache ou non"""
-        return (len(self.caches) > 0)
+        for x, y, z in self.casesOccupees():
+            coord = (x, y)
+            if not self.plateau.cases[coord].estCachee(): return False
+        return True
 
     def hoverEnterEvent(self, event):
         """evenement lors du survol de la souris (en entree)"""
@@ -92,7 +86,14 @@ class Combattant(Pion, Materiel):
             event.ignore()
 
 
-
+class PJ(Combattant):
+    def __init__(self):
+        super(PJ, self).__init__()
+        self._type = "pj"
+        self.creePar = ""
+        
+    
+        
 
 
 

+ 106 - 0
lib/ListePions.py

@@ -0,0 +1,106 @@
+'''
+Liste et gestion des pions du plateau
+'''
+from lib.Combattant import Combattant
+from lib.Decor import Decor
+
+
+class ListePions(object):
+    def __init__(self):
+        self._pions = {}
+
+    def __getstate__(self):
+        state = {key:value for key, value in self.__dict__.items() if not key in ["plateau"]}
+        return (state)
+
+    def __setstate__(self, state):
+        self.__dict__ = state       
+        
+    def __getitem__(self, num):
+        if not num in self._pions: return None
+        return self._pions[num]
+
+    def __iter__(self):
+        return self._pions.__iter__()
+
+    def initialiser(self, plateau):
+        self.plateau = plateau
+
+    def pions(self):
+        return self._pions
+    
+    def combattants(self):
+        return {key:value for key, value in self._pions.items() if key > 0}
+
+    def combattantsVisibles(self):
+        retour = {}
+        for num in self.combattants():
+            if not self._pions[num].estCache(): retour[num] = self._pions[num] 
+        return retour
+
+    def decors(self):
+        return {key:value for key, value in self._pions.items() if key < 0}
+
+    def pjs(self):
+        return {key:value for key, value in self._pions.items() if key > 10000}
+
+    def pnjs(self):
+        return {key:value for key, value in self._pions.items() if key > 0 and key <= 10000}
+
+    def nouvelId(self, nomClasse):
+        if nomClasse == "Combattant":
+            if not len(self.pnjs()) > 0: return 1
+            num = max(self.pnjs()) + 1
+        elif nomClasse == "PJ":
+            if not len(self.pjs()) > 0: return 10001
+            num = max(self.pjs()) + 1            
+        else:
+            if not len(self.decors()) > 0: return -1
+            num = min(self._pions) - 1
+        return num
+
+    def numeroterNom(self, nom):
+        """renvoie le nom du pion avec un numero complementaire si necessaire """
+        i = 1
+        for num in self.combattants():
+            if self._pions[num].nom() == nom: i += 1     
+        return str(i) if i > 1 else ""
+
+    def nouveau(self, modele):
+        """creer un pion (combattant ou decor) aux coordonnees indiquees"""
+        if self.plateau.proj.projectionValide():
+            #instanciation du nouveau pion
+            instance = modele.__class__
+            pion = instance()
+            #recup de ses attributs
+            for elt in modele.__dict__:
+                pion.__dict__[elt] = modele.__dict__[elt]
+            #nouvel Id
+            numero = self.nouvelId(modele.__class__.__name__)
+            
+            #creation du pion            
+            pion.numero = numero
+            if modele.__class__.__name__ == "Combattant":
+                pion.numComplementaire = self.numeroterNom(pion.nom())  
+            self._pions[numero] = pion
+            
+            pion.position = self.plateau.proj.coord()
+            pion.nbRotations = self.plateau.proj.nbRotations()
+            pion.ajouterAuPlateau(self.plateau)
+            
+            if pion.__class__.__name__ == "PJ": self.plateau.majListePJ()
+            self.plateau.gC.maj()
+        return True    
+
+    def supprimer(self, num):
+        """supprime le pion entre en parametre"""
+        pionSuppr = self._pions.pop(num)
+        pionSuppr.retirerDuPlateau()
+        self.plateau.gC.maj()
+        if pionSuppr.__class__.__name__ == "PJ": self.plateau.majListePJ()
+
+    def materialiser(self,actif):
+        """active/desactive la reception par les pions des hover events"""
+        for num in self._pions:
+            self.decors[num].setAcceptsHoverEvents(actif)
+            self.decors[num].polygoneGraphique.setAcceptsHoverEvents(actif)

+ 27 - 77
lib/Modes.py

@@ -492,37 +492,19 @@ class CreationPion(ModeBaseCp):
                 if isinstance(self._pion, Combattant) and dmK.touchesEnfoncees() == ["maj"]:
                     nouveauZ = self.plateau.dialogueVol(self._pion.z)
                     self._pion.majZ(nouveauZ)
-                self.plateau.creerPion(self._pion)
+                self.plateau.pions.nouveau(self._pion)
                 accepte = True
         return accepte
     
     def toucheClavier(self, event):
-        accepte = False
         if self._pion:
             if event.key() == Qt.Key_Right:
                 self.plateau.proj.majRotation(1)
-                accepte = True
+                return True
             elif event.key() == Qt.Key_Left:
                 self.plateau.proj.majRotation(-1)
-                accepte = True
-        return accepte
-
-class CreationPJ(CreationPion):
-    """mode de creation de pions de joueurs"""
-    def __init__(self, plateau):
-        super(CreationPJ, self).__init__(plateau)
-
-    def clic_case(self, coord):
-        accepte = False
-        if self._pion:
-            if not self.plateau.cases[coord].estOccupee():
-                if isinstance(self._pion, Combattant) and dmK.touchesEnfoncees() == ["maj"]:
-                    nouveauZ = self.plateau.dialogueVol(self._pion.z)
-                    self._pion.majZ(nouveauZ)
-                self.plateau.creerPion(self._pion)
-                self.plateau.majListePJ()
-                accepte = True
-        return accepte    
+                return True
+        return False
 
 
 class SuppressionPion(ModeBaseCp):
@@ -532,69 +514,47 @@ class SuppressionPion(ModeBaseCp):
         self._sourceCurseur = ":/interface/16/ressource/gomme_16.png"
         self._enSurbrillance = []
         self._focus = True
-        self._cible = ""
 
-    def activer(self, cible = Pion):
+    def activer(self, param = None):
         #cible est le nom de la classe des objets a supprimer
-        self._cible = cible
         super(SuppressionPion, self).activer()
 
     def desactiver(self):
-        for num in self._enSurbrillance:
-            if num >= 10000:
-                if num in self.plateau.decors:
-                    self.plateau.decors[num].surbrillance(False)
-            else:
-                if num in self.plateau.combattants:
-                    self.plateau.combattants[num].surbrillance(False)
+        for num in self.plateau.pions:
+            self.plateau.pions[num].surbrillance(False)
         super(SuppressionPion, self).desactiver()
 
     def clicGauche(self, event):
         """supprime le pion sous le clic. S'il y en a plusieurs,
             supprime le premier de la pile"""
-        accepte = False
         num = None
         item = self.plateau.itemAt(event.scenePos())
-        if isinstance(item.parentItem(), self._cible):
+        if issubclass(item.parentItem().__class__, Pion):
             num = item.parentItem().numero
         else:
             if item.parentItem() != None: 
-                if isinstance(item.parentItem().parentItem(), self._cible):
+                if issubclass(item.parentItem().parentItem().__class__, Pion):
                     num = item.parentItem().parentItem().numero
         if num:
-            self.plateau.pionSupprimer(num)
-            accepte = True
-        return accepte
+            self.plateau.pions.supprimer(num)
+            return True
+        return False
     
     def survol_combattant(self, num):
-        accepte = False
-        if self._cible == Combattant:
-            self.plateau.combattants[num].surbrillance(True, 0.4)
-            self._enSurbrillance.append(num)
-            accepte = True
-        return accepte
+        self.plateau.pions[num].surbrillance(True, 0.4)
+        return True
     
     def finSurvol_combattant(self, num):
-        accepte = False
-        if self._cible == Combattant:
-            self.plateau.combattants[num].surbrillance(False)  
-            accepte = True 
-        return accepte
+        self.plateau.pions[num].surbrillance(False)  
+        return True
     
     def survol_decor(self, num):
-        accepte = False
-        if self._cible == Decor:
-            self.plateau.decors[num].surbrillance(True, 0.4)
-            self._enSurbrillance.append(num)
-            accepte = True
-        return accepte
+        self.plateau.pions[num].surbrillance(True, 0.4)
+        return True
     
     def finSurvol_decor(self, num):
-        accepte = False
-        if self._cible == Decor:
-            self.plateau.decors[num].surbrillance(False)  
-            accepte = True
-        return accepte
+        self.plateau.pions[num].surbrillance(False)  
+        return True
     
 class DeplacementPion(ModeBaseCp):
     """mode de deplacement de pions (combattant ou decor) en mode creation
@@ -605,10 +565,7 @@ class DeplacementPion(ModeBaseCp):
         
     def activer(self, num):
         self._num = num
-        if self._num < 10000:
-            pion = self.plateau.combattants[self._num]
-        else:
-            pion = self.plateau.decors[self._num]
+        pion = self.plateau.pions[self._num]
         self.plateau.proj.creer(pion)
         self.deplace = False
         super(DeplacementPion, self).activer()
@@ -631,14 +588,12 @@ class DeplacementPion(ModeBaseCp):
         if self.plateau.cases[coord].occupeeParCombattant(): return
         if self._num > 0:
             if self.deplace:
-                if self._num < 10000:
-                    pion = self.plateau.combattants[self._num]
-                    if dmK.touchesEnfoncees() == ["maj"]:
-                        nouveauZ = self.plateau.dialogueVol(pion.z)
-                        pion.majZ(nouveauZ)
-                else:
-                    pion = self.plateau.decors[self._num]
+                pion = self.plateau.pions[self._num]
+                if self._num > 0 and dmK.touchesEnfoncees() == ["maj"]:
+                    nouveauZ = self.plateau.dialogueVol(pion.z)
+                    pion.majZ(nouveauZ)
                 pion.majPosition(self.plateau.proj.coord(), self.plateau.proj.nbRotations())
+                self.plateau.gC.maj() #-> au cas ou le pion serait deplace vers ou depuis un cache
                 accepte = True
         return accepte
     
@@ -692,12 +647,7 @@ class PionSelectionne(ModeBasePi):
 
     def pion(self):
         """retourne la ref du pion actuellement selectionne"""
-        retour = None
-        if self._num in self.plateau.combattants:
-            retour = self.plateau.combattants[self._num]
-        elif self._num in self.plateau.decors:
-            retour = self.plateau.decors[self._num]
-        return retour
+        return (self.plateau.pions[self._num]) if (self._num in self.plateau.pions) else None
 
     def activer(self, num):
         self._num = num

+ 1 - 1
lib/Pion.py

@@ -81,7 +81,7 @@ class Pion(QGraphicsObject):
         retour = []
         if self.plateau:
             for x, y in self.forme.listeCases(self.position, self.nbRotations):
-                for z in range(1, self.hauteur):
+                for z in range(1, self.hauteur + 1):
                     retour.append((x, y, (self.plateau.cases[(x, y)].altitude + self.z + z)))
         return retour
 

+ 392 - 437
lib/Plateau.py

@@ -29,10 +29,12 @@ from ProjectionDep import ProjectionDep
 from Terrain import Terrain
 import br
 from lib.commun import rep, charger
+from lib.gC import GestionCombat
 from lib.gM import GestionMateriel
 from lib.mat import Materiel, chargerMat
 from outilsSvg import chargerUnique
 import regles as regles
+from lib.ListePions import ListePions
 
 
 m_couleursRapides = [(255,255,255), (200,200,200), (130,130,130), (90,90,90), (15,15,15), \
@@ -49,7 +51,7 @@ class Plateau(QGraphicsScene, Materiel):
 
         ##partie et infos plateau
         self.chapitre = 0
-        self.tour = 0
+        self.creePar = ""
         
         self.enCours = False
         self.public = False
@@ -69,9 +71,9 @@ class Plateau(QGraphicsScene, Materiel):
         #objets
         self.pinceau = Pinceau(self)
         self.gM = GestionMateriel()
+        self.gC = GestionCombat()
         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.pions = ListePions()
         self.caches = {}
         self.listeCasesZonePlacement = []
         self.polygoneZonePlacement = None
@@ -80,7 +82,11 @@ class Plateau(QGraphicsScene, Materiel):
         #infos combat
         self.numCombattantEnCours = 0
         self.ordreJeu = {}  #numero du pion: ordre de jeu
-            
+
+
+    def estCreateur(self):
+        """retourne vrai si l'utilisateur en cours est le createur du plateau"""
+        return (self.fenetre.util == self.creePar)
 
     def __getstate__(self):
         self.dateSvg = time()
@@ -96,9 +102,19 @@ class Plateau(QGraphicsScene, Materiel):
     def vue(self):
         return self.fenetre.ui.cbt_vue
 
+    def combattants(self):
+        return self.pions.combattants()
+
+    def combattantsVisibles(self):
+        return self.pions.combattantsVisibles()
+
+    def decors(self):
+        return self.pions.combattants()
+
     def creer(self):
         """cree le plateau"""
         self.dateCreation = time()
+        self.creePar = self.fenetre.util
         self.hCase = 120  #hauteur d'une case
         self.modeActif = Modes.ModeBase(self)
         self.gestionCombat = None
@@ -131,14 +147,10 @@ class Plateau(QGraphicsScene, Materiel):
             self.caches[idCache].ajouter(self)
         self.majCaches()
 
-        #recreation des pions
-        for numCombattant in self.combattants:
-            self.combattants[numCombattant].ajouterAuPlateau(self)
-        self.majOrdreJeu()    
-
-        #recreation des decors
-        for num in self.decors:
-            self.decors[num].ajouterAuPlateau(self)
+        #recreation des pions 
+        for num in self.pions:
+            self.pions[num].ajouterAuPlateau(self)
+        self.gC.maj()    
 
         #recreation des marqueurs entree/sortie
         for entreeSortie in self.entreesSorties:
@@ -180,35 +192,22 @@ class Plateau(QGraphicsScene, Materiel):
         #modes d'interaction
         self.fenetre.connect(self.fenetre.ui.cbt_modeCreation, SIGNAL("clicked()"), self.plateauModeCreation, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cbt_modeCombat, SIGNAL("clicked()"), self.plateauModeCombat, Qt.UniqueConnection)
-##        self.fenetre.connect(self.fenetre.ui.modeAffichagePlateau, SIGNAL("currentIndexChanged(int)"), self.majModeAffichage, Qt.UniqueConnection)
 
         #etapes du combat
         self.fenetre.connect(self.fenetre.ui.cbt_etapeSuivante, SIGNAL("clicked()"), self.etapeSuivante, Qt.UniqueConnection)
-        
+        self.connect(self.fenetre.ui.pc_listePJ, SIGNAL("cellClicked(int, int)"), self.ajouterPj)
+                
         #affichage de fenetres
         self.fenetre.connect(self.fenetre.ui.cbt_nom, SIGNAL("clicked()"), self.afficherEcranPlateau, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cbt_afficherGestion, SIGNAL("clicked()"), self.afficheEcranGestionCombat, 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_afficherNotes, SIGNAL("clicked()"), self.agrandirNotesMjPlateau, Qt.UniqueConnection)
         
         #listes
-        self.fenetre.connect(self.fenetre.ui.inf_listeOrdreJeu, SIGNAL("cellClicked(int,int)"), self.clicListOrdreJeu, Qt.UniqueConnection)
-        
         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_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
         self.fenetre.connect(self.fenetre.ui.cp_epaisseurPinceau, SIGNAL("valueChanged(int)"), self.majEpaisseurPinceau, Qt.UniqueConnection)
@@ -216,6 +215,7 @@ class Plateau(QGraphicsScene, Materiel):
         self.fenetre.connect(self.fenetre.ui.cp_effets, SIGNAL("activated(int)"), self.modeCaseEffet, Qt.UniqueConnection)
         
         #autres:
+        self.fenetre.connect(self.fenetre.ui.cp_gomme, SIGNAL("clicked()"), self.majModeSupprimerPions, 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_placerSortie, SIGNAL("clicked()"), self.majModeDefinirSortie, Qt.UniqueConnection)
@@ -238,9 +238,6 @@ class Plateau(QGraphicsScene, Materiel):
         self.fenetre.connect(self.fenetre.ui.pi_formeAttaqueZone, SIGNAL("activated (int)"), self.majModeCombatZone, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.pi_rayonAttaqueZone, SIGNAL("valueChanged(int)"), self.majRayonZone, 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""" 
         #on cree la scene graphique
@@ -258,7 +255,7 @@ class Plateau(QGraphicsScene, Materiel):
         self.polygoneZonePlacement = None
 
         #gestion du mode d'interaction avec le plateau
-        
+        self.pions.initialiser(self)
         self.pinceau = Pinceau(self)
         self.proj = ProjectionDep(self)
   
@@ -267,8 +264,8 @@ class Plateau(QGraphicsScene, Materiel):
         self.majNomPlateau()
         self.majBoutonsCouleursPerso()
         self.gM.initialiser(self.fenetre)
+        self.gC.initialiser(self)
         
-        self.initListeOrdreJeu()
         self.initListeAttaques()
         self.majBoutonEtape()
 
@@ -310,64 +307,46 @@ class Plateau(QGraphicsScene, Materiel):
             self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Publier le plateau"))
             return
         
-        if not self.tour > 0:
+        if not self.gC.tour() > 0:
             self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Démarrer le combat"))
             return            
         
-        self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Tour {}\nFinir son tour".format(self.tour)))
+        self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Tour {}\nFinir son tour".format(self.gC.tour())))
 
     def etapeSuivante(self):
         """apres clic sur le bouton d'etape, on passe a l'etape suivante (publication, demarrage du combat...)"""
         if not self.public:
             self.publier()
             return
-        
-        if not self.tour > 0:
-            self.demarrer()
-            return            
-        
-        self.pionSuivant()   
+        self.gC.pionSuivant()
 
     def publier(self):
         self.public = True
         self.majListePJ()
         self.majBoutonEtape()
-    
-    def demarrer(self):
-        self.tour = 1
-        self.majBoutonEtape()    
-
+ 
     def majListePJ(self):
         """met a jour la liste des pj qui peuvent etre ajoutes au plateau"""
         self.fenetre.ui.pc_listePJ.setColumnWidth(0,0)
-        self.fenetre.ui.pc_listePJ.setColumnWidth(1,40)
-        self.connect(self.fenetre.ui.pc_listePJ, SIGNAL("cellClicked(int, int)"), self.ajouterPj)
-        listePj = chargerUnique("parties\\{}\\groupe".format(self.fenetre.partie))
-        idPj = 0
-        for pj in listePj:
-            self.fenetre.ui.pc_listePJ.nouvelleLigneFin()
-            self.fenetre.ui.pc_listePJ.majTexte("j{}".format(idPj), 0, idPj)
-            
-            if pj.logo:
-                icone = QIcon(pj.logo.chemin())
-                item = QTableWidgetItem(QString(""))
-                item.setIcon(icone)
-                self.fenetre.ui.pc_listePJ.setItem(idPj, 1, item)
-
-            item = QTableWidgetItem()
-            item.setText(QString().fromUtf8(pj.nom))
-            police = QFont(QString("Verdana"))
-            police.setBold(True)
-            item.setFont(police)
-            self.fenetre.ui.pc_listePJ.setItem(idPj, 2, item)
-            idPj += 1
-            
+        self.fenetre.ui.pc_listePJ.vider()
+        
+        dejaCrees = []
+        for numPj in self.pions.pjs():
+            dejaCrees.append(self.pions[numPj].idM())
+
+        for idM in self.fenetre.pjs:
+            if not idM in dejaCrees:
+                pj = chargerMat(idM, "grp")
+                ligne = self.fenetre.ui.pc_listePJ.nouvelleLigneFin()
+                self.fenetre.ui.pc_listePJ.majTexte(ligne, 0, idM)
+                self.fenetre.ui.pc_listePJ.setItem(ligne, 1, QTableWidgetItem(QIcon(pj.icone().pix()), \
+                                                                              QString(pj.nom())))
+        self.fenetre.ui.pc_listePJ.setVisible((self.fenetre.ui.pc_listePJ.rowCount() > 0))
+  
     def ajouterPj(self, ligne, col):
-        listePj = chargerUnique("parties\\{}\\groupe".format(self.fenetre.partie))
-        idPj = int(self.fenetre.ui.pc_listePJ.texte(ligne, 0))
-        if idPj != None:
-            pj = listePj[idPj]
-            self.activerMode(Modes.CreationPJ, pj)
+        idM = self.fenetre.ui.pc_listePJ.texte(ligne, 0)
+        pj = chargerMat(idM, "grp")
+        if pj: self.activerMode(Modes.CreationPion, pj)
 
     def majBoutonsCouleursPerso(self):
         """met a jour l'affichage des couleurs customisees dans la boite de dialogue de selection de couleur"""
@@ -427,8 +406,6 @@ class Plateau(QGraphicsScene, Materiel):
                     self.cases[coord].majCache()
                     traite.append(coord)
 
-
-
     ############### maj des infos du panneau Pi a la selection/deselection d'un pion
         #voir a balancer tout ca dans une classe a part
 
@@ -541,25 +518,6 @@ class Plateau(QGraphicsScene, Materiel):
         self.modeActif.desactiver()
         self.modeActif = mode(self)
         self.modeActif.activer(param)
-        
-##    def majModeAffichage(self, index):
-##        """met a jour le mode d'affichage"""
-##        nouveauMode = ""
-##        if index == 0:
-##            #passe a l'affichage standard
-##            pass
-##        elif index == 1:
-##            #passe en mode affichage de l'altitude
-##            nouveauMode = "altitude"    
-##        elif index == 2:
-##            #affichage des terrains slt
-##            nouveauMode = "terrain"
-##        elif index == 3:
-##            #affichage tactique
-##            nouveauMode = "tactique"
-##            
-##        for coord in self.cases:
-##            self.cases[coord].majAffichageSpecial(nouveauMode)
 
     def modePeintureCase(self):
         """enclenche le mode peinture de case a partir de la couleur selectionnee"""
@@ -597,13 +555,9 @@ class Plateau(QGraphicsScene, Materiel):
         """enclenche le mode de creation de pions simples"""
         self.majMode("pionCreation")
 
-    def majModeSupprimerDecor(self):
-        """enclenche le mode suppression de pions sur clic gauche (creatures ou decors)"""
-        self.activerMode(Modes.SuppressionPion, Decor)
-
-    def majModeSupprimerCombattant(self):
+    def majModeSupprimerPions(self):
         """enclenche le mode suppression de pions sur clic gauche (creatures ou decors)"""
-        self.activerMode(Modes.SuppressionPion, Combattant)
+        self.activerMode(Modes.SuppressionPion)
     
     def modeCreationDecor(self, ligne, col):
         """enclenche le mode de creation de decors depuis la liste des decors"""
@@ -692,66 +646,6 @@ class Plateau(QGraphicsScene, Materiel):
     ###############
 
     ########## Gestion du combat ##############
-    def majAffichageTour(self):
-        """met a jour l'affichage du tour en cours"""
-        self.fenetre.ui.cbt_tour.majTexte("Tour: {}".format(self.tour))
-
-    def initListeOrdreJeu(self):
-        """cree les colonnes et met en forme la table ordre jeu"""
-        self.fenetre.ui.inf_listeOrdreJeu.setColumnWidth(2, 30)
-        self.fenetre.ui.inf_listeOrdreJeu.hideColumn(0)
-        self.fenetre.ui.inf_listeOrdreJeu.hideColumn(2)      
-        self.fenetre.ui.inf_listeOrdreJeu.setIconSize(QSize(30,20))   
-            
-    def majListeOrdreJeu(self):
-        """met a jour la liste des pions infoOrdreJeu"""
-        while self.fenetre.ui.inf_listeOrdreJeu.rowCount() > 0:
-            self.fenetre.ui.inf_listeOrdreJeu.removeRow(0)
-        index = 0
-        for num in self.ordreJeu:
-            self.fenetre.ui.inf_listeOrdreJeu.insertRow(int(index))
-            self.fenetre.ui.inf_listeOrdreJeu.setItem(int(index), 0, QTableWidgetItem(QString.fromUtf8(str(num))))
-            icon = QIcon(self.combattants[num].icone().fichier())
-            item = QTableWidgetItem(icon, QString.fromUtf8(self.combattants[num].txtId()))
-            self.fenetre.ui.inf_listeOrdreJeu.setItem(int(index), 1, item)
-            self.fenetre.ui.inf_listeOrdreJeu.setItem(int(index), 2, QTableWidgetItem(QString.fromUtf8(str(self.ordreJeu[num]))))
-            index += 1
-
-        self.fenetre.ui.inf_listeOrdreJeu.sizeHintForColumn(1)
-##        trierTable(self.fenetre.ui.infoOrdreJeu, 2, 0)
-
-    def clicListOrdreJeu(self, ligne, col):
-        """on a clique dans la liste d'ordre de jeu, le pion correspondant est selectionne et centre sur la carte"""
-        numCombattant = int(self.fenetre.ui.inf_listeOrdreJeu.item(ligne, 0).text().toUtf8())  
-        self.vue().centerOn(self.cases[self.combattants[numCombattant].position].centreGraphique)
-        self.modeActif.clic_combattant(numCombattant)
-
-    def pionSuivant(self):
-        """selection du pion suivant dans la liste d'ordre de jeu"""
-        if not len(self.combattants) > 0: return
-        
-        if self.numPionEnCours in self.combattants:
-            suivant = self.ordreJeu[self.numPionEnCours] + 1
-        else:
-            suivant = 1
-        if suivant > len(self.ordreJeu):
-            self.tour += 1
-            self.majAffichageTour()
-            suivant = 1
-        for num in self.ordreJeu:
-            if self.ordreJeu[num] == suivant:
-                numCombattant = num
-                break
-
-        for ligne in range(0, self.fenetre.ui.inf_listeOrdreJeu.rowCount()):
-            item = self.fenetre.ui.inf_listeOrdreJeu.item(ligne, 0)
-            item.setSelected(int(self.fenetre.ui.inf_listeOrdreJeu.item(ligne, 0).text().toUtf8()) == numCombattant)
-            if int(item.text().toUtf8()) == numCombattant:
-                self.fenetre.ui.inf_listeOrdreJeu.scrollToItem(item)
-
-        self.vue().centerOn(self.cases[self.combattants[numCombattant].position].centreGraphique)
-        self.pionSaisir(numCombattant)        
- 
     def afficheEcranGestionCombat(self):
         """affiche l'ecran de gestion du combat"""
         self.gestionCombat = EcranGestionCombat(self)
@@ -759,45 +653,107 @@ class Plateau(QGraphicsScene, Materiel):
         self.connect(self.fenetre, SIGNAL("majListesPions"), self.majListesPions)
         self.connect(self.gestionCombat, SIGNAL("majListesPions"), self.majListesPions)
         QApplication.processEvents()
-##        r = self.gestionCombat.exec_()
-
-    def majOrdreJeu(self):
-        """met a jour l'ordre de jeu des pions en fonction de l'attribut prevu par les regles s'il existe,
-           ou en fonction de l'ordre de jeu parametre sinon"""
-        if len(self.ordreJeu) > 0:
-            attribut = regles.attributOrdreJeu()
-            if attribut != None:
-                dico = {}
-                for numCombattant in self.combattants:
-                    dico[numCombattant] = int(self.combattants[numCombattant].listeAttributs[attribut])
-                ordre = sorted(dico, key = dico.get, reverse=(regles.sensTriOrdreJeu() == 1)) 
-                self.ordreJeu = {}    
-                for numCombattant in self.combattants:
-                    self.ordreJeu[numCombattant] = ordre.index(numCombattant) + 1
-        self.majListeOrdreJeu()  
-
-    def pionDeplacerDansOrdreJeu(self, numCombattant, nouvellePosition):
-        """deplace un pion dans le dictionnaire gerant l'ordre de jeu de maniere a assurer sa coherence
-           nouvellePosition = 0 supprime le pion de la liste"""
-        if numCombattant in self.ordreJeu:
-            if nouvellePosition == 0:
-                del self.ordreJeu[numCombattant]
-        if len(self.ordreJeu) > 0:        
-            i = 0    
-            tmp = sorted(self.ordreJeu, key=self.ordreJeu.get)
-            if numCombattant in tmp:
-                tmp.remove(numCombattant)
-            for num in tmp:
-                i += 1
-                if i == nouvellePosition:
-                    self.ordreJeu[numCombattant] = i
-                    i += 1
-                self.ordreJeu[num] = i
-            if i < nouvellePosition:
-                self.ordreJeu[numCombattant] = i + 1 
-        elif nouvellePosition > 0:
-            self.ordreJeu[numCombattant] = 1
-        self.majOrdreJeu()
+##        r = self.gestionCombat.exec_()    
+
+#     def majAffichageTour(self):
+#         """met a jour l'affichage du tour en cours"""
+#         self.fenetre.ui.cbt_tour.majTexte("Tour: {}".format(self.tour))
+# 
+#     def initListeOrdreJeu(self):
+#         """cree les colonnes et met en forme la table ordre jeu"""
+#         self.fenetre.ui.inf_listeOrdreJeu.setColumnWidth(2, 30)
+#         self.fenetre.ui.inf_listeOrdreJeu.hideColumn(0)
+#         self.fenetre.ui.inf_listeOrdreJeu.hideColumn(2)      
+#         self.fenetre.ui.inf_listeOrdreJeu.setIconSize(QSize(30,20))   
+#             
+#     def majListeOrdreJeu(self):
+#         """met a jour la liste des pions infoOrdreJeu"""
+#         while self.fenetre.ui.inf_listeOrdreJeu.rowCount() > 0:
+#             self.fenetre.ui.inf_listeOrdreJeu.removeRow(0)
+#         index = 0
+#         for num in self.ordreJeu:
+#             self.fenetre.ui.inf_listeOrdreJeu.insertRow(int(index))
+#             self.fenetre.ui.inf_listeOrdreJeu.setItem(int(index), 0, QTableWidgetItem(QString.fromUtf8(str(num))))
+#             icon = QIcon(self.combattants[num].icone().fichier())
+#             item = QTableWidgetItem(icon, QString.fromUtf8(self.combattants[num].txtId()))
+#             self.fenetre.ui.inf_listeOrdreJeu.setItem(int(index), 1, item)
+#             self.fenetre.ui.inf_listeOrdreJeu.setItem(int(index), 2, QTableWidgetItem(QString.fromUtf8(str(self.ordreJeu[num]))))
+#             index += 1
+# 
+#         self.fenetre.ui.inf_listeOrdreJeu.sizeHintForColumn(1)
+# ##        trierTable(self.fenetre.ui.infoOrdreJeu, 2, 0)
+# 
+#     def clicListOrdreJeu(self, ligne, col):
+#         """on a clique dans la liste d'ordre de jeu, le pion correspondant est selectionne et centre sur la carte"""
+#         numCombattant = int(self.fenetre.ui.inf_listeOrdreJeu.item(ligne, 0).text().toUtf8())  
+#         self.vue().centerOn(self.cases[self.combattants[numCombattant].position].centreGraphique)
+#         self.modeActif.clic_combattant(numCombattant)
+# 
+#     def pionSuivant(self):
+#         """selection du pion suivant dans la liste d'ordre de jeu"""
+#         if not len(self.combattants) > 0: return
+#         
+#         if self.numPionEnCours in self.combattants:
+#             suivant = self.ordreJeu[self.numPionEnCours] + 1
+#         else:
+#             suivant = 1
+#         if suivant > len(self.ordreJeu):
+#             self.tour += 1
+#             self.majAffichageTour()
+#             suivant = 1
+#         for num in self.ordreJeu:
+#             if self.ordreJeu[num] == suivant:
+#                 numCombattant = num
+#                 break
+# 
+#         for ligne in range(0, self.fenetre.ui.inf_listeOrdreJeu.rowCount()):
+#             item = self.fenetre.ui.inf_listeOrdreJeu.item(ligne, 0)
+#             item.setSelected(int(self.fenetre.ui.inf_listeOrdreJeu.item(ligne, 0).text().toUtf8()) == numCombattant)
+#             if int(item.text().toUtf8()) == numCombattant:
+#                 self.fenetre.ui.inf_listeOrdreJeu.scrollToItem(item)
+# 
+#         self.vue().centerOn(self.cases[self.combattants[numCombattant].position].centreGraphique)
+#         self.pionSaisir(numCombattant)        
+#  
+
+# 
+#     def majOrdreJeu(self):
+#         """met a jour l'ordre de jeu des pions en fonction de l'attribut prevu par les regles s'il existe,
+#            ou en fonction de l'ordre de jeu parametre sinon"""
+#         if len(self.ordreJeu) > 0:
+#             attribut = regles.attributOrdreJeu()
+#             if attribut != None:
+#                 dico = {}
+#                 for numCombattant in self.combattants:
+#                     dico[numCombattant] = int(self.combattants[numCombattant].listeAttributs[attribut])
+#                 ordre = sorted(dico, key = dico.get, reverse=(regles.sensTriOrdreJeu() == 1)) 
+#                 self.ordreJeu = {}    
+#                 for numCombattant in self.combattants:
+#                     self.ordreJeu[numCombattant] = ordre.index(numCombattant) + 1
+#         self.majListeOrdreJeu()  
+# 
+#     def pionDeplacerDansOrdreJeu(self, numCombattant, nouvellePosition):
+#         """deplace un pion dans le dictionnaire gerant l'ordre de jeu de maniere a assurer sa coherence
+#            nouvellePosition = 0 supprime le pion de la liste"""
+#         if numCombattant in self.ordreJeu:
+#             if nouvellePosition == 0:
+#                 del self.ordreJeu[numCombattant]
+#         if len(self.ordreJeu) > 0:        
+#             i = 0    
+#             tmp = sorted(self.ordreJeu, key=self.ordreJeu.get)
+#             if numCombattant in tmp:
+#                 tmp.remove(numCombattant)
+#             for num in tmp:
+#                 i += 1
+#                 if i == nouvellePosition:
+#                     self.ordreJeu[numCombattant] = i
+#                     i += 1
+#                 self.ordreJeu[num] = i
+#             if i < nouvellePosition:
+#                 self.ordreJeu[numCombattant] = i + 1 
+#         elif nouvellePosition > 0:
+#             self.ordreJeu[numCombattant] = 1
+#         self.majOrdreJeu()
 
     def listeAttributCelluleModifiee(self, ligne, colonne):
         """une cellule de la liste des attributs a ete modifiee"""
@@ -935,6 +891,7 @@ class Plateau(QGraphicsScene, Materiel):
     ###############
 
     ### panneau d'info
+    
     def majInfosCombattant(self, combattant=None):
         self.fenetre.ui.inf_boitePion.maj(combattant)
 
@@ -944,7 +901,243 @@ class Plateau(QGraphicsScene, Materiel):
     def majInfosCase(self, case=None):
         self.fenetre.ui.inf_boiteCase.maj(case)        
 
-    ############### fonctions de calcul ################ 
+    ###
+    
+                       
+    def pionSurCase(self, coord):
+        """renvoie le pion present sur la case, none sinon"""
+        for num in self.combattants():
+            if self.pions[num].position == coord: return num
+        return None        
+
+    def pionsSurListeCase(self, listeCases):
+        """renvoie la liste des num des pions presents sur la liste de cases"""
+        retour = []
+        for coord in listeCases:
+            pion = self.cases[coord].occupant()
+            if pion != None and not pion.numero in retour:
+                retour.append(pion.numero)
+        return retour   
+
+
+
+#     def materialiserPions(self,actif):
+#         """avtive/desactive la reception par les pions (autres que le pion selectionne) des hover events"""
+#         for numCombattant in self.combattants:
+#             if numCombattant != self.modeParam["numPionSelectionne"]:
+#                 self.combattants[numCombattant].setAcceptsHoverEvents(actif)
+#                 self.combattants[numCombattant].polygoneGraphique.setAcceptsHoverEvents(actif)
+#         for numCombattant in self.decors:
+#             self.decors[numCombattant].setAcceptsHoverEvents(actif)
+#             self.decors[numCombattant].polygoneGraphique.setAcceptsHoverEvents(actif)
+                
+    #######################
+
+    ######## interaction avec les cases, decors et pions  #############
+    def pionSelectionne(self):
+        """renvoie le pion actuellement selectionne"""
+        if self.modeActif.__class__.__name__ == "PionSelectionne": return self.modeActif.pion()
+        return None    
+
+    def caseCliquee(self, x, y):
+        """on a clique sur la case (clic gauche)"""
+        return self.modeActif.clic_case((x, y))     
+
+    def caseSurvolClicEnfonce(self, coord):
+        """une case est survolee par le curseur (le clic gauche est enfonce)"""
+        return self.modeActif.survolClic_case(coord)
+    
+    def caseSurvol(self, x, y):
+        """une case est survole par le curseur, on affiche ses informations dans la zone prevue"""
+        self.majInfosCase(self.cases[(x,y)]) 
+        return self.modeActif.survol_case((x,y))
+                             
+    def afficherListeCases(self, listeCases, actif):
+        """met ou non en evidence les cases selectionnees"""
+        for coord in listeCases:
+            self.cases[coord].majEstCibleCurseur(actif)
+
+    def pionClique(self, num):
+        """on a clique sur ce pion"""
+        if num > 0:
+            accepte = self.modeActif.clic_combattant(num)
+        else:
+            accepte = self.modeActif.clic_decor(num)
+        return accepte
+    
+    def combattantSurvol(self, num):
+        """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
+        accepte = self.modeActif.survol_combattant(num)
+        pion = self.pions[num]
+        self.majInfosCombattant(pion)
+        if not accepte: 
+            accepte = self.caseSurvol(pion.position[0], pion.position[1])
+        return accepte        
+
+    def combattantFinSurvol(self, num):
+        """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
+        accepte = self.modeActif.finSurvol_combattant(num)
+        self.majInfosCombattant(None)
+        return accepte 
+
+    def decorSurvol(self, num):
+        """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
+        accepte = self.modeActif.survol_decor(num)
+        pion = self.pions[num]
+        self.majInfosDecor(pion)
+        if not accepte: 
+            accepte = self.caseSurvol(pion.position[0], pion.position[1])
+        return accepte
+    
+    def decorFinSurvol(self, num):
+        """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
+        accepte = self.modeActif.finSurvol_decor(num)
+        self.majInfosDecor(None)
+        return accepte
+                
+    def pionDoubleClic(self, numCombattant):
+        """on a double-clique sur le pion"""
+        accepte = self.modeActif.doubleClic_combattant(numCombattant)       
+        return accepte
+    
+#     def creerPion(self, pionModele):
+#         """creer un pion (combattant ou decor) aux coordonnees indiquees"""
+#         cree = False
+#         if self.proj.projectionValide():
+# 
+#             if pionModele.__class__.__name__ == "Combattant":
+#                 pion = Combattant()
+#             elif pionModele.__class__.__name__ == "Decor":
+#                 pion = Decor()
+# 
+#             for elt in pionModele.__dict__:
+#                 pion.__dict__[elt] = pionModele.__dict__[elt]
+#             
+#             if pionModele.__class__.__name__ == "Combattant":
+#                 numero = 1
+#                 if len(self.combattants) > 0:
+#                     numero = max(self.combattants) + 1
+#                 pion.numero = numero    
+#                 pion.numComplementaire = self.numeroterNom(pion.nom())    
+#                 self.combattants[numero] = pion
+#                 self.pionDeplacerDansOrdreJeu(numero, len(self.ordreJeu) + 2)
+#                 
+#             elif pionModele.__class__.__name__ == "Decor":
+#                 numero = 10001
+#                 if len(self.decors) > 0:
+#                     numero = max(self.decors) + 10001
+#                 pion.numero = numero
+#                 self.decors[numero] = pion
+# 
+#             pion.position = self.proj.coord()
+#             pion.nbRotations = self.proj.nbRotations()
+#             pion.ajouterAuPlateau(self)
+# 
+#             cree = True
+#         return cree            
+
+#     def numeroterNom(self, nom):
+#         """renvoie le nom du pion avec un numero complementaire si necessaire """
+#         i = 1
+#         for numCombattant in self.combattants:
+#             if self.combattants[numCombattant].nom() == nom: i += 1     
+#         retour = str(i) if i > 1 else ""
+#         return retour
+        
+    def pionDeposer(self, coordCase):
+        """on depose le pion sur la case voulue"""
+        if self.pionSelectionne() != None:
+            pion = self.pionSelectionne()
+        if pion != None:
+            if self.proj.projectionValide():        
+                pion.majPosition(self.proj.coord(), self.proj.nbRotations())
+
+    def majZPion(self, valeur):
+        """met a jour l'altitude du pion selectionne"""
+        if self.pionSelectionne() != None:
+            self.pionSelectionne().majZ(valeur)
+
+    def dialogueVol(self, actuelle):
+        ecran = EcranVol(actuelle)
+        ecran.exec_() 
+        nouvelle = ecran.resultat()
+        del ecran
+        return nouvelle   
+            
+#     def pionSupprimer(self, num):
+#         """supprime le pion entre en parametre"""
+#         #settrace(trace_calls)
+#         if num in self.combattants:    
+#             self.pionDeplacerDansOrdreJeu(num, 0)
+#             pionSuppr = self.combattants.pop(num)
+#         elif num in self.decors:    
+#             pionSuppr = self.decors.pop(num)
+#             
+#         pionSuppr.retirerDuPlateau()
+            
+    ###############
+
+    ######### caches ###############
+
+    def nouveauCache(self, listeCases):
+        nouvelId = 0
+        if len(self.caches) > 0:
+            nouvelId = max(self.caches) + 1
+        cache = Cache(nouvelId)
+        cache.activer(True)
+        cache.nom = "Cache {}".format(nouvelId + 1)
+        self.caches[nouvelId] = cache
+        self.ajouterCacheATable(cache)
+        for coord in listeCases:
+            self.cases[coord].ajouterCache(nouvelId)        
+
+    def supprimerCache(self):
+        ligne = self.fenetre.ui.cp_listeCaches.currentRow()
+        idCache = int(self.fenetre.ui.cp_listeCaches.texte(ligne, 0)) 
+        for coord in self.cases:
+            self.cases[coord].supprimerCache(idCache)
+        self.fenetre.ui.cp_listeCaches.removeRow(idCache)
+        del self.caches[idCache]
+
+
+    ###############"
+        
+    ######### gestion des evenements souris et clavier ###############
+    
+    def mouseMoveEvent(self, event):
+        super(Plateau, self).mouseMoveEvent(event)
+        if event.buttons() == Qt.LeftButton and self.vue().dragMode() != QGraphicsView.ScrollHandDrag:
+            coord = self.coordonneesAuPoint(event.scenePos())
+            if coord != None:
+                self.caseSurvolClicEnfonce(coord)  
+        else:
+            self.modeActif.mouvementSouris(event)
+            event.ignore() 
+
+    def mousePressEvent(self, event):
+        super(Plateau, self).mousePressEvent(event)
+        if event.button() == 1:
+            self.modeActif.clicGauche(event)
+        elif event.button() == 2:
+            self.modeActif.clicDroit(event)
+            event.accept()
+
+    def mouseReleaseEvent(self, event):
+        super(Plateau, self).mouseReleaseEvent(event)
+        self.modeActif.finClicGauche(event)
+
+    def keyPressEvent(self, event):
+        """gestion des evenements clavier"""
+        self.modeActif.toucheClavier(event)
+
+    ################   
+
+    ############### Fonctions diverses
+
+    def centrerSur(self, num):
+        """centre la vue sur le pion"""
+        self.vue().centerOn(self.cases[self.pions[num].position].centreGraphique)
+
     def coordonneesValides(self, coord):
         """les coordonnees entrees en parametre sont elles celles d'une case du plateau"""
         return (coord[0] >= 0 and coord[1] >= 0 and coord[0] < self.nbCasesX and coord[1] < self.nbCasesY)
@@ -1272,23 +1465,6 @@ class Plateau(QGraphicsScene, Materiel):
             retour += self.pionSelectionne().coutDep("depVol", dist)
 
         return retour   
-                       
-    def pionSurCase(self, coord):
-        """renvoie le pion present sur la case, none sinon"""
-        retour = None
-        for num in self.combattants:
-            if self.combattants[num].position == coord:
-                retour = num
-        return retour        
-
-    def pionsSurListeCase(self, listeCases):
-        """renvoie la liste des num des pions presents sur la liste de cases"""
-        retour = []
-        for coord in listeCases:
-            pion = self.cases[coord].occupant()
-            if pion != None and not pion.numero in retour:
-                retour.append(pion.numero)
-        return retour   
 
     def majZonePlacement(self, listeCases):
         """met a jour la forme et l'affichage de la zone de placement initale des joueurs"""
@@ -1317,227 +1493,6 @@ class Plateau(QGraphicsScene, Materiel):
             self.polygoneZonePlacement.setPolygon(polygone)
             self.listeCasesZonePlacement = listeCases
 
-    def materialiserPions(self,actif):
-        """avtive/desactive la reception par les pions (autres que le pion selectionne) des hover events"""
-        for numCombattant in self.combattants:
-            if numCombattant != self.modeParam["numPionSelectionne"]:
-                self.combattants[numCombattant].setAcceptsHoverEvents(actif)
-                self.combattants[numCombattant].polygoneGraphique.setAcceptsHoverEvents(actif)
-        for numCombattant in self.decors:
-            self.decors[numCombattant].setAcceptsHoverEvents(actif)
-            self.decors[numCombattant].polygoneGraphique.setAcceptsHoverEvents(actif)
-                
-    #######################
-
-    ######## interaction avec les cases, decors et pions  #############
-    def pionSelectionne(self):
-        """renvoie le pion actuellement selectionne"""
-        retour = None
-        if self.modeActif.__class__.__name__ == "PionSelectionne":
-            retour = self.modeActif.pion()
-        return retour    
-
-    def caseCliquee(self, x, y):
-        """on a clique sur la case (clic gauche)"""
-        coord = (x, y)
-        accepte = self.modeActif.clic_case(coord)   
-        return accepte  
-
-    def caseSurvolClicEnfonce(self, coord):
-        """une case est survolee par le curseur (le clic gauche est enfonce)"""
-        accepte = self.modeActif.survolClic_case(coord)
-        return accepte
-    
-    def caseSurvol(self, x, y):
-        """une case est survole par le curseur, on affiche ses informations dans la zone prevue"""
-        self.majInfosCase(self.cases[(x,y)]) 
-        accepte = self.modeActif.survol_case((x,y))
-        return accepte
-                             
-    def afficherListeCases(self, listeCases, actif):
-        """met ou non en evidence les cases selectionnees"""
-        for coord in listeCases:
-            self.cases[coord].majEstCibleCurseur(actif)
-
-    def pionClique(self, num):
-        """on a clique sur ce pion"""
-        if num < 10000:
-            accepte = self.modeActif.clic_combattant(num)
-        else:
-            accepte = self.modeActif.clic_decor(num)
-        return accepte
-    
-    def combattantSurvol(self, num):
-        """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
-        accepte = self.modeActif.survol_combattant(num)
-        pion = self.combattants[num]
-        self.majInfosCombattant(pion)
-        if not accepte: 
-            accepte = self.caseSurvol(pion.position[0], pion.position[1])
-        return accepte        
-
-    def combattantFinSurvol(self, num):
-        """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
-        accepte = self.modeActif.finSurvol_combattant(num)
-        self.majInfosCombattant(None)
-        return accepte 
-
-    def decorSurvol(self, num):
-        """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
-        accepte = self.modeActif.survol_decor(num)
-        pion = self.decors[num]
-        self.majInfosDecor(pion)
-        if not accepte: 
-            accepte = self.caseSurvol(pion.position[0], pion.position[1])
-        return accepte
-    
-    def decorFinSurvol(self, num):
-        """le pion est survole par le curseur, on affiche ses informations dans la zone prevue"""
-        accepte = self.modeActif.finSurvol_decor(num)
-        self.majInfosDecor(None)
-        return accepte
-                
-    def pionDoubleClic(self, numCombattant):
-        """on a double-clique sur le pion"""
-        accepte = self.modeActif.doubleClic_combattant(numCombattant)       
-        return accepte
-    
-    def creerPion(self, pionModele):
-        """creer un pion (combattant ou decor) aux coordonnees indiquees"""
-        cree = False
-        if self.proj.projectionValide():
-
-            if pionModele.__class__.__name__ == "Combattant":
-                pion = Combattant()
-            elif pionModele.__class__.__name__ == "Decor":
-                pion = Decor()
-
-            for elt in pionModele.__dict__:
-                pion.__dict__[elt] = pionModele.__dict__[elt]
-            
-            if pionModele.__class__.__name__ == "Combattant":
-                numero = 1
-                if len(self.combattants) > 0:
-                    numero = max(self.combattants) + 1
-                pion.numero = numero    
-                pion.numComplementaire = self.numeroterNom(pion.nom())    
-                self.combattants[numero] = pion
-                self.pionDeplacerDansOrdreJeu(numero, len(self.ordreJeu) + 2)
-                
-            elif pionModele.__class__.__name__ == "Decor":
-                numero = 10001
-                if len(self.decors) > 0:
-                    numero = max(self.decors) + 10001
-                pion.numero = numero
-                self.decors[numero] = pion
-
-            pion.position = self.proj.coord()
-            pion.nbRotations = self.proj.nbRotations()
-            pion.ajouterAuPlateau(self)
-
-            cree = True
-        return cree            
-
-    def numeroterNom(self, nom):
-        """renvoie le nom du pion avec un numero complementaire si necessaire """
-        i = 1
-        for numCombattant in self.combattants:
-            if self.combattants[numCombattant].nom() == nom: i += 1     
-        retour = str(i) if i > 1 else ""
-        return retour
-        
-    def pionDeposer(self, coordCase):
-        """on depose le pion sur la case voulue"""
-        if self.pionSelectionne() != None:
-            pion = self.pionSelectionne()
-        
-        if pion != None:
-            if self.proj.projectionValide():        
-                pion.majPosition(self.proj.coord(), self.proj.nbRotations())
-
-    def majZPion(self, valeur):
-        """met a jour l'altitude du pion selectionne"""
-        if self.pionSelectionne() != None:
-            self.pionSelectionne().majZ(valeur)
-
-    def dialogueVol(self, actuelle):
-        ecran = EcranVol(actuelle)
-        ecran.exec_() 
-        nouvelle = ecran.resultat()
-        del ecran
-        return nouvelle   
-            
-    def pionSupprimer(self, num):
-        """supprime le pion entre en parametre"""
-        #settrace(trace_calls)
-        if num in self.combattants:    
-            self.pionDeplacerDansOrdreJeu(num, 0)
-            pionSuppr = self.combattants.pop(num)
-        elif num in self.decors:    
-            pionSuppr = self.decors.pop(num)
-            
-        pionSuppr.retirerDuPlateau()
-            
-    ###############
-
-    ######### caches ###############
-
-    def nouveauCache(self, listeCases):
-        nouvelId = 0
-        if len(self.caches) > 0:
-            nouvelId = max(self.caches) + 1
-        cache = Cache(nouvelId)
-        cache.activer(True)
-        cache.nom = "Cache {}".format(nouvelId + 1)
-        self.caches[nouvelId] = cache
-        self.ajouterCacheATable(cache)
-        for coord in listeCases:
-            self.cases[coord].ajouterCache(nouvelId)        
-
-    def supprimerCache(self):
-        ligne = self.fenetre.ui.cp_listeCaches.currentRow()
-        idCache = int(self.fenetre.ui.cp_listeCaches.texte(ligne, 0)) 
-        for coord in self.cases:
-            self.cases[coord].supprimerCache(idCache)
-        self.fenetre.ui.cp_listeCaches.removeRow(idCache)
-        del self.caches[idCache]
-
-
-    ###############"
-        
-    ######### gestion des evenements souris et clavier ###############
-    
-    def mouseMoveEvent(self, event):
-        super(Plateau, self).mouseMoveEvent(event)
-        if event.buttons() == Qt.LeftButton and self.vue().dragMode() != QGraphicsView.ScrollHandDrag:
-            coord = self.coordonneesAuPoint(event.scenePos())
-            if coord != None:
-                self.caseSurvolClicEnfonce(coord)  
-        else:
-            self.modeActif.mouvementSouris(event)
-            event.ignore() 
-
-    def mousePressEvent(self, event):
-        super(Plateau, self).mousePressEvent(event)
-        if event.button() == 1:
-            self.modeActif.clicGauche(event)
-        elif event.button() == 2:
-            self.modeActif.clicDroit(event)
-            event.accept()
-
-    def mouseReleaseEvent(self, event):
-        super(Plateau, self).mouseReleaseEvent(event)
-        self.modeActif.finClicGauche(event)
-
-    def keyPressEvent(self, event):
-        """gestion des evenements clavier"""
-        self.modeActif.toucheClavier(event)
-
-    ################   
-
-
-
-
 
 
 

+ 4 - 3
lib/explorateurMat.py

@@ -32,7 +32,6 @@ class ExplorateurMateriel(QDialog):
         self.createWidgets()
         self._selection = []
         self.ui.exm_onglets.setCurrentIndex(ongletInit)
-#         self._panneaux = [] 
 
     def createWidgets(self):
         """construction de l'interface"""
@@ -82,7 +81,9 @@ class ExplorateurMateriel(QDialog):
         self.ui.exm_ok.setText(QString("Importer ({})".format(len(self._selection))))
 
     def retirerPanneau(self, panneau):
-        layout = self.layout(panneau.mat().idM()[:2])
+        idM = panneau.mat().idM()
+        if idM in self._selection: self._selection.remove(idM)
+        layout = self.layout(idM[:2])
         layout.removeWidget(panneau)
         panneau.setParent(None)
         layout.update()
@@ -91,7 +92,6 @@ class ExplorateurMateriel(QDialog):
         filtreNom = self.ui.exm_filtreNom.text()
         self.emit(SIGNAL("majFiltre(QString)"), filtreNom)
 
-
     def initLayout(self):
         for layout in [self.ui.exm_layout_tr, self.ui.exm_layout_cb, self.ui.exm_layout_dc]:
             layout.setColumnMinimumWidth(0, 140)
@@ -195,6 +195,7 @@ class PanneauMateriel(QFrame):
         
 if __name__ == "__main__":
     s = Session()
+    print "exploMat"
     arg = ["DMonde", s.idS()]
     app = QApplication(arg)
     listeMat = importerMateriel()

+ 129 - 0
lib/gC.py

@@ -0,0 +1,129 @@
+'''
+outils de gestion du combat sur le plateau
+'''
+from PyQt4.QtCore import QSize, QString, Qt, SIGNAL
+from PyQt4.QtGui import QTableWidgetItem, QIcon, QBrush, QColor
+
+from lib import regles
+
+
+class GestionCombat(object):
+    '''reunit les outils de suivi du combat'''
+    def __init__(self):
+        self._tour = 0
+        self._oJ = OrdreJeu()
+        
+    def __getstate__(self):
+        state = {key:value for key, value in self.__dict__.items() if not key in ["plateau"]}
+        return (state)
+
+    def __setstate__(self, state):
+        self.__dict__ = state       
+        
+    def initialiser(self, plateau):
+        self.plateau = plateau
+        self.initTblOrdre()
+        self.plateau.fenetre.connect(self.tblOrdre(), SIGNAL("cellClicked(int,int)"), self.clicTblOrdre, Qt.UniqueConnection)        
+
+    def tour(self):
+        return self._tour
+
+    def tourSuivant(self):
+        self._tour += 1
+        self.plateau.majBoutonEtape()
+
+    def maj(self):
+        """appellee apres ajout ou suppr de combattants, et apres modif de leurs attributs"""
+        self._oJ.generer(self.plateau)
+        self.majTblOrdre()
+
+    def tblOrdre(self):
+        return self.plateau.fenetre.ui.inf_listeOrdreJeu
+
+    def initTblOrdre(self):
+        """cree les colonnes et met en forme la table ordre jeu"""
+        self.tblOrdre().setColumnWidth(0, 0)
+        self.tblOrdre().setColumnWidth(1, 0)
+        self.tblOrdre().hideColumn(0)
+        self.tblOrdre().hideColumn(1)      
+        self.tblOrdre().setIconSize(QSize(30,20))   
+
+    def majTblOrdre(self):
+        """met a jour la liste des pions infoOrdreJeu"""
+        self.tblOrdre().setSortingEnabled(False)
+        self.tblOrdre().vider()
+        for num in self._oJ:
+            ligne = self.tblOrdre().nouvelleLigneFin()
+            self.tblOrdre().setRowHidden(ligne, False)
+            self.tblOrdre().majData(ligne, 0, num)
+            self.tblOrdre().majData(ligne, 1, self._oJ[num])
+            self.tblOrdre().setItem(ligne, 2, QTableWidgetItem(QIcon(self.plateau.pions[num].icone().pix()), \
+                                                               QString.fromUtf8(self.plateau.pions[num].txtId())))
+
+        self.tblOrdre().sizeHintForColumn(2)
+        self.tblOrdre().setSortingEnabled(True)
+        self.tblOrdre().sortItems(1, Qt.AscendingOrder)
+
+    def clicTblOrdre(self, ligne, col):
+        """on a clique dans la liste d'ordre de jeu, le pion correspondant est selectionne et centre sur la carte"""
+        num = self.tblOrdre().entier(ligne, 0)
+        self.plateau.centrerSur(num)
+        self.plateau.modeActif.clic_combattant(num)
+
+    
+
+    def pionSuivant(self):
+        """selection du pion suivant dans la liste d'ordre de jeu"""
+        #securites en cas de suppression d'un pion
+        if not len(self._oJ) > 0: return
+        
+        suivant = self._oJ.suivant()
+        if self._oJ.position() == 0: self.tourSuivant()
+        
+        self.tblOrdre().selectionner(self._oJ.position(), 2)
+        self.tblOrdre().scrollToItem(self.tblOrdre().item(self._oJ.position(), 2))
+
+        self.plateau.centrerSur(suivant)
+        self.plateau.modeActif.clic_combattant(suivant)
+
+
+class OrdreJeu():
+    def __init__(self):
+        self._eC = -1    #pion en cours
+        self._ordre = []   #ordre (num: position)
+
+    def __iter__(self):
+        return self._ordre.__iter__()
+
+    def __getitem__(self, num):
+        if not num in self._ordre: return None
+        return self._ordre.index(num)
+
+    def __len__(self):
+        return len(self._ordre)
+
+    def generer(self, plateau):
+        combattants = plateau.combattantsVisibles()
+        lst = [value for value in combattants.values()]
+        lst.sort(key=lambda x: x.listeAttributs[regles.attributOrdreJeu()], reverse=(regles.sensTriOrdreJeu() == 1))
+        self._ordre = [value.numero for value in combattants.values()]
+    
+    def ordre(self):
+        return self._ordre
+      
+    def actuel(self):  
+        return self._ordre[self._eC]
+        
+    def suivant(self):
+        self._eC += 1
+        if self._eC >= len(self._ordre): self._eC = 0
+        return self._ordre[self._eC]
+    
+    def position(self):
+        return self._eC
+    
+        
+        
+        
+
+

+ 6 - 7
lib/gM.py

@@ -4,7 +4,7 @@ from PyQt4.QtCore import SIGNAL, Qt
 from lib.EcranEditionCombattant import EcranEditionCombattant
 from lib.EcranEditionDecor import EcranEditionDecor
 from lib.EcranEditionTerrain import EcranEditionTerrain
-from lib.explorateurMat import ExplorateurMateriel, importerMateriel
+from lib.explorateurMat import importerMateriel
 from lib.mat import chargerMat
 
 
@@ -71,20 +71,19 @@ class GestionMateriel(object):
             self.prog.plateau.plateauModeCreation()
 
     def importerTr(self):
-        self.importer("tr")
+        self.importer(0)
         
     def importerDc(self):
-        self.importer("dc")
+        self.importer(1)
         
     def importerCb(self):
-        self.importer("cb")
+        self.importer(2)
 
-    def importer(self, origine):
-        onglets = {"tr": 0, "dc":1, "cb":2}
-        ongletInit = onglets[origine[-2:]]
+    def importer(self, ongletInit = 0):
         listeMat = importerMateriel(ongletInit)
         for idMat in listeMat:
             self.ajouterMat(idMat)
+        
         self.majTables()
     
     def majTables(self):

+ 2 - 25
lib/test.py

@@ -1,27 +1,4 @@
-from PyQt4.QtGui import QGraphicsItem
 
-class A(QGraphicsItem):
-    def __init__(self):
-        super(A, self).__init__()
-        self.a = "a"
-    
-    def fa(self):
-        return self.a
 
-class B(object):
-    def __init__(self):
-        super(B, self).__init__()
-        self._b = "b"
-        
-    def fb(self):
-        return self._b
-            
-class C(A, B):
-    def __init__(self):
-        super(C, self).__init__()    
-        
-        
-c = C()
-print c.fa()
-print c.fb()
-    
+for i in range(0,1):
+    print i

+ 9 - 12
lib/ui/dm.py

@@ -1,23 +1,12 @@
 #from __future__ import unicode_literals
 # -*- coding: utf-8 -*-
 """ensemble des widgets surchargés"""
-import os
-
 from PyQt4.QtCore import QString, SIGNAL, QVariant, QSize, pyqtSignal, \
     QPersistentModelIndex, Qt, QEvent, QModelIndex
 from PyQt4.QtGui import QLabel, QPixmap, QTextEdit, QLineEdit, QGraphicsView, \
     QComboBox, QSpinBox, QTabWidget, QTableWidget, QTableWidgetItem, \
     QItemSelectionModel, QIcon, QColor, QBrush, QGroupBox, QFrame
 
-from lib.outilsSvg import afficheSvg
-
-try:        
-    import lib.regles as regles
-except:
-    try:
-        import regles as regles
-    except:
-        print "dm: impossible de charger regles"
 
 class Biblio():
     """cette classe fournit une liste spreciale"""
@@ -229,6 +218,14 @@ class DmTableWidget(QTableWidget):
         except:
             pass
         return retour
+
+    def entier(self, ligne, colonne):
+        """recupere une valeur entiere de la case, None sinon"""
+        try:
+            entier = int(self.item(ligne, colonne).data(0))
+        except:
+            entier = None
+        return entier
                 
     def chercherLigne(self, colonne, valeur):
         """cherche la valeur dans la colonne demandee
@@ -270,7 +267,7 @@ class DmTableWidget(QTableWidget):
         return self.currentRow()
 
     def selectionner(self, ligne, colonne):
-        self.setCurrentCell(ligne, colonne, QItemSelectionModel.Select)
+        self.setCurrentCell(ligne, colonne, QItemSelectionModel.ClearAndSelect)
 
 
 class DmTableMat(DmTableWidget):

+ 129 - 104
lib/ui/ecran_principal.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'principal.ui'
 #
-# Created: Thu Sep 10 11:41:36 2015
+# Created: Fri Sep 11 13:23:09 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -170,7 +170,7 @@ class Ui_principal(object):
         self.panneauInfosPlateau.setSpacing(0)
         self.panneauInfosPlateau.setMargin(6)
         self.panneauInfosPlateau.setObjectName(_fromUtf8("panneauInfosPlateau"))
-        self.inf_listeOrdreJeu = QtGui.QTableWidget(self.inf_panneau)
+        self.inf_listeOrdreJeu = DmTableWidget(self.inf_panneau)
         self.inf_listeOrdreJeu.setMinimumSize(QtCore.QSize(80, 208))
         self.inf_listeOrdreJeu.setMaximumSize(QtCore.QSize(110, 16777215))
         palette = QtGui.QPalette()
@@ -678,31 +678,37 @@ class Ui_principal(object):
         self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
         self.cp_importTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
+        icon14 = QtGui.QIcon()
+        icon14.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/import_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_importTerrain.setIcon(icon14)
         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)
         self.horizontalLayout_4.addItem(spacerItem2)
         self.cp_nouveauTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_nouveauTerrain.setText(_fromUtf8(""))
-        icon14 = QtGui.QIcon()
-        icon14.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/plus_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_nouveauTerrain.setIcon(icon14)
+        icon15 = QtGui.QIcon()
+        icon15.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/plus_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_nouveauTerrain.setIcon(icon15)
         self.cp_nouveauTerrain.setObjectName(_fromUtf8("cp_nouveauTerrain"))
         self.horizontalLayout_4.addWidget(self.cp_nouveauTerrain)
         self.cp_editerTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_editerTerrain.setText(_fromUtf8(""))
-        icon15 = QtGui.QIcon()
-        icon15.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/editer_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_editerTerrain.setIcon(icon15)
+        icon16 = QtGui.QIcon()
+        icon16.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/editer_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_editerTerrain.setIcon(icon16)
         self.cp_editerTerrain.setObjectName(_fromUtf8("cp_editerTerrain"))
         self.horizontalLayout_4.addWidget(self.cp_editerTerrain)
         self.cp_retirerTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
+        icon17 = QtGui.QIcon()
+        icon17.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/moins_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_retirerTerrain.setIcon(icon17)
         self.cp_retirerTerrain.setObjectName(_fromUtf8("cp_retirerTerrain"))
         self.horizontalLayout_4.addWidget(self.cp_retirerTerrain)
         self.verticalLayout_4.addLayout(self.horizontalLayout_4)
-        icon16 = QtGui.QIcon()
-        icon16.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/montagne_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_ongletsListes.addTab(self.cp_afficherTerrains, icon16, _fromUtf8(""))
+        icon18 = QtGui.QIcon()
+        icon18.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/montagne_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_ongletsListes.addTab(self.cp_afficherTerrains, icon18, _fromUtf8(""))
         self.cp_afficherDecors = QtGui.QWidget()
         self.cp_afficherDecors.setObjectName(_fromUtf8("cp_afficherDecors"))
         self.verticalLayout_7 = QtGui.QVBoxLayout(self.cp_afficherDecors)
@@ -729,31 +735,30 @@ class Ui_principal(object):
         self.horizontalLayout_7.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7"))
         self.cp_importDecor = QtGui.QToolButton(self.cp_afficherDecors)
+        self.cp_importDecor.setIcon(icon14)
         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)
         self.horizontalLayout_7.addItem(spacerItem3)
         self.cp_nouveauDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_nouveauDecor.setText(_fromUtf8(""))
-        self.cp_nouveauDecor.setIcon(icon14)
+        self.cp_nouveauDecor.setIcon(icon15)
         self.cp_nouveauDecor.setObjectName(_fromUtf8("cp_nouveauDecor"))
         self.horizontalLayout_7.addWidget(self.cp_nouveauDecor)
         self.cp_editerDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_editerDecor.setText(_fromUtf8(""))
-        self.cp_editerDecor.setIcon(icon15)
+        self.cp_editerDecor.setIcon(icon16)
         self.cp_editerDecor.setObjectName(_fromUtf8("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)
-        icon18 = QtGui.QIcon()
-        icon18.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/decor_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_ongletsListes.addTab(self.cp_afficherDecors, icon18, _fromUtf8(""))
+        icon19 = QtGui.QIcon()
+        icon19.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/decor_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_ongletsListes.addTab(self.cp_afficherDecors, icon19, _fromUtf8(""))
         self.cp_afficherCreatures = QtGui.QWidget()
         self.cp_afficherCreatures.setObjectName(_fromUtf8("cp_afficherCreatures"))
         self.verticalLayout_6 = QtGui.QVBoxLayout(self.cp_afficherCreatures)
@@ -782,18 +787,19 @@ class Ui_principal(object):
         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.setIcon(icon14)
         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)
         self.horizontalLayout_8.addItem(spacerItem4)
         self.cp_nouveauCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_nouveauCombattant.setText(_fromUtf8(""))
-        self.cp_nouveauCombattant.setIcon(icon14)
+        self.cp_nouveauCombattant.setIcon(icon15)
         self.cp_nouveauCombattant.setObjectName(_fromUtf8("cp_nouveauCombattant"))
         self.horizontalLayout_8.addWidget(self.cp_nouveauCombattant)
         self.cp_editerCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_editerCombattant.setText(_fromUtf8(""))
-        self.cp_editerCombattant.setIcon(icon15)
+        self.cp_editerCombattant.setIcon(icon16)
         self.cp_editerCombattant.setObjectName(_fromUtf8("cp_editerCombattant"))
         self.horizontalLayout_8.addWidget(self.cp_editerCombattant)
         self.cp_retirerCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
@@ -802,9 +808,9 @@ class Ui_principal(object):
         self.cp_retirerCombattant.setObjectName(_fromUtf8("cp_retirerCombattant"))
         self.horizontalLayout_8.addWidget(self.cp_retirerCombattant)
         self.verticalLayout_6.addLayout(self.horizontalLayout_8)
-        icon19 = QtGui.QIcon()
-        icon19.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/creature_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_ongletsListes.addTab(self.cp_afficherCreatures, icon19, _fromUtf8(""))
+        icon20 = QtGui.QIcon()
+        icon20.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/creature_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_ongletsListes.addTab(self.cp_afficherCreatures, icon20, _fromUtf8(""))
         self.verticalLayout_3.addWidget(self.cp_ongletsListes)
         self.creationPlateau_sousPanneauBas = QtGui.QFrame(self.cp_panneau)
         self.creationPlateau_sousPanneauBas.setMinimumSize(QtCore.QSize(154, 81))
@@ -817,66 +823,83 @@ class Ui_principal(object):
         self.gridLayout_3.setMargin(3)
         self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
         self.cp_placerEntree = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
-        self.cp_placerEntree.setMinimumSize(QtCore.QSize(41, 31))
-        self.cp_placerEntree.setMaximumSize(QtCore.QSize(41, 31))
-        icon20 = QtGui.QIcon()
-        icon20.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/entree_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_placerEntree.setIcon(icon20)
+        self.cp_placerEntree.setMinimumSize(QtCore.QSize(31, 31))
+        self.cp_placerEntree.setMaximumSize(QtCore.QSize(31, 31))
+        icon21 = QtGui.QIcon()
+        icon21.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/entree_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_placerEntree.setIcon(icon21)
         self.cp_placerEntree.setObjectName(_fromUtf8("cp_placerEntree"))
         self.gridLayout_3.addWidget(self.cp_placerEntree, 2, 1, 1, 1)
+        self.cp_afficherNotes = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
+        self.cp_afficherNotes.setMinimumSize(QtCore.QSize(31, 31))
+        self.cp_afficherNotes.setMaximumSize(QtCore.QSize(31, 31))
+        icon22 = QtGui.QIcon()
+        icon22.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/note_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_afficherNotes.setIcon(icon22)
+        self.cp_afficherNotes.setObjectName(_fromUtf8("cp_afficherNotes"))
+        self.gridLayout_3.addWidget(self.cp_afficherNotes, 2, 5, 1, 1)
+        self.cp_gomme = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
+        self.cp_gomme.setMinimumSize(QtCore.QSize(31, 31))
+        self.cp_gomme.setMaximumSize(QtCore.QSize(31, 16777215))
+        icon23 = QtGui.QIcon()
+        icon23.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/gomme_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_gomme.setIcon(icon23)
+        self.cp_gomme.setObjectName(_fromUtf8("cp_gomme"))
+        self.gridLayout_3.addWidget(self.cp_gomme, 0, 5, 1, 1)
+        self.cp_placerPiege = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
+        self.cp_placerPiege.setMinimumSize(QtCore.QSize(31, 31))
+        self.cp_placerPiege.setMaximumSize(QtCore.QSize(31, 16777215))
+        icon24 = QtGui.QIcon()
+        icon24.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/piege_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_placerPiege.setIcon(icon24)
+        self.cp_placerPiege.setObjectName(_fromUtf8("cp_placerPiege"))
+        self.gridLayout_3.addWidget(self.cp_placerPiege, 0, 4, 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))
-        icon21 = QtGui.QIcon()
-        icon21.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sortie_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_placerSortie.setIcon(icon21)
+        self.cp_placerSortie.setMinimumSize(QtCore.QSize(31, 31))
+        self.cp_placerSortie.setMaximumSize(QtCore.QSize(31, 31))
+        icon25 = QtGui.QIcon()
+        icon25.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sortie_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_placerSortie.setIcon(icon25)
         self.cp_placerSortie.setObjectName(_fromUtf8("cp_placerSortie"))
         self.gridLayout_3.addWidget(self.cp_placerSortie, 2, 2, 1, 1)
         self.cp_effets = QtGui.QComboBox(self.creationPlateau_sousPanneauBas)
-        self.cp_effets.setMinimumSize(QtCore.QSize(41, 31))
-        self.cp_effets.setMaximumSize(QtCore.QSize(41, 31))
+        self.cp_effets.setMinimumSize(QtCore.QSize(31, 31))
+        self.cp_effets.setMaximumSize(QtCore.QSize(31, 31))
+        self.cp_effets.setIconSize(QtCore.QSize(12, 12))
         self.cp_effets.setObjectName(_fromUtf8("cp_effets"))
-        icon22 = QtGui.QIcon()
-        icon22.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/feu_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_effets.addItem(icon22, _fromUtf8(""))
+        icon26 = QtGui.QIcon()
+        icon26.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/feu_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_effets.addItem(icon26, _fromUtf8(""))
         self.cp_effets.setItemText(0, _fromUtf8(""))
-        icon23 = QtGui.QIcon()
-        icon23.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/eau_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_effets.addItem(icon23, _fromUtf8(""))
+        icon27 = QtGui.QIcon()
+        icon27.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/eau_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_effets.addItem(icon27, _fromUtf8(""))
         self.cp_effets.setItemText(1, _fromUtf8(""))
-        icon24 = QtGui.QIcon()
-        icon24.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/glace_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_effets.addItem(icon24, _fromUtf8(""))
+        icon28 = QtGui.QIcon()
+        icon28.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/glace_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_effets.addItem(icon28, _fromUtf8(""))
         self.cp_effets.setItemText(2, _fromUtf8(""))
-        icon25 = QtGui.QIcon()
-        icon25.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/poison_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_effets.addItem(icon25, _fromUtf8(""))
+        icon29 = QtGui.QIcon()
+        icon29.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/poison_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_effets.addItem(icon29, _fromUtf8(""))
         self.cp_effets.setItemText(3, _fromUtf8(""))
-        self.cp_effets.addItem(icon17, _fromUtf8(""))
+        self.cp_effets.addItem(icon23, _fromUtf8(""))
         self.cp_effets.setItemText(4, _fromUtf8(""))
         self.gridLayout_3.addWidget(self.cp_effets, 0, 1, 1, 1)
-        self.cp_afficherNotes = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
-        self.cp_afficherNotes.setMinimumSize(QtCore.QSize(41, 31))
-        self.cp_afficherNotes.setMaximumSize(QtCore.QSize(41, 31))
-        icon26 = QtGui.QIcon()
-        icon26.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/note_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_afficherNotes.setIcon(icon26)
-        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))
-        icon27 = QtGui.QIcon()
-        icon27.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/depart_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_defPlacement.setIcon(icon27)
+        self.cp_defPlacement.setMinimumSize(QtCore.QSize(31, 31))
+        self.cp_defPlacement.setMaximumSize(QtCore.QSize(31, 31))
+        icon30 = QtGui.QIcon()
+        icon30.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/depart_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_defPlacement.setIcon(icon30)
         self.cp_defPlacement.setObjectName(_fromUtf8("cp_defPlacement"))
         self.gridLayout_3.addWidget(self.cp_defPlacement, 2, 4, 1, 1)
         self.cp_placerCache = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
-        self.cp_placerCache.setMinimumSize(QtCore.QSize(41, 31))
-        self.cp_placerCache.setMaximumSize(QtCore.QSize(41, 31))
-        icon28 = QtGui.QIcon()
-        icon28.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/mainCache_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.cp_placerCache.setIcon(icon28)
+        self.cp_placerCache.setMinimumSize(QtCore.QSize(31, 31))
+        self.cp_placerCache.setMaximumSize(QtCore.QSize(31, 31))
+        icon31 = QtGui.QIcon()
+        icon31.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/mainCache_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.cp_placerCache.setIcon(icon31)
         self.cp_placerCache.setObjectName(_fromUtf8("cp_placerCache"))
         self.gridLayout_3.addWidget(self.cp_placerCache, 0, 2, 1, 1)
         self.verticalLayout_3.addWidget(self.creationPlateau_sousPanneauBas)
@@ -946,51 +969,51 @@ 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(""))
-        icon29 = QtGui.QIcon()
-        icon29.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/deplacement_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_deplacement.setIcon(icon29)
+        icon32 = QtGui.QIcon()
+        icon32.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/deplacement_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_deplacement.setIcon(icon32)
         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))
         self.pi_formeAttaqueZone.setObjectName(_fromUtf8("pi_formeAttaqueZone"))
         self.pi_formeAttaqueZone.addItem(icon11, _fromUtf8(""))
         self.pi_formeAttaqueZone.setItemText(0, _fromUtf8(""))
-        icon30 = QtGui.QIcon()
-        icon30.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/ellipsePleine_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_formeAttaqueZone.addItem(icon30, _fromUtf8(""))
+        icon33 = QtGui.QIcon()
+        icon33.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/ellipsePleine_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_formeAttaqueZone.addItem(icon33, _fromUtf8(""))
         self.pi_formeAttaqueZone.setItemText(1, _fromUtf8(""))
-        icon31 = QtGui.QIcon()
-        icon31.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/cone_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_formeAttaqueZone.addItem(icon31, _fromUtf8(""))
+        icon34 = QtGui.QIcon()
+        icon34.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/cone_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_formeAttaqueZone.addItem(icon34, _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))
-        icon32 = QtGui.QIcon()
-        icon32.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/epee_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_attaqueCac.setIcon(icon32)
+        icon35 = QtGui.QIcon()
+        icon35.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/epee_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_attaqueCac.setIcon(icon35)
         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))
-        icon33 = QtGui.QIcon()
-        icon33.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/oiseau_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_vol.setIcon(icon33)
+        icon36 = QtGui.QIcon()
+        icon36.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/oiseau_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_vol.setIcon(icon36)
         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))
-        icon34 = QtGui.QIcon()
-        icon34.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/arc_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_attaqueDist.setIcon(icon34)
+        icon37 = QtGui.QIcon()
+        icon37.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/arc_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_attaqueDist.setIcon(icon37)
         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(""))
-        icon35 = QtGui.QIcon()
-        icon35.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/bombe_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_attaqueZone.setIcon(icon35)
+        icon38 = QtGui.QIcon()
+        icon38.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/bombe_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_attaqueZone.setIcon(icon38)
         self.pi_attaqueZone.setObjectName(_fromUtf8("pi_attaqueZone"))
         self.verticalLayout_10.addWidget(self.pi_actions)
         self.pi_ongletsListes = QtGui.QTabWidget(self.pi_panneau)
@@ -1030,9 +1053,9 @@ class Ui_principal(object):
         self.pi_listeAttributs.horizontalHeader().setDefaultSectionSize(50)
         self.pi_listeAttributs.verticalHeader().setVisible(False)
         self.verticalLayout_9.addWidget(self.pi_listeAttributs)
-        icon36 = QtGui.QIcon()
-        icon36.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/profil_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_ongletsListes.addTab(self.pi_afficherAttributs, icon36, _fromUtf8(""))
+        icon39 = QtGui.QIcon()
+        icon39.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/profil_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_ongletsListes.addTab(self.pi_afficherAttributs, icon39, _fromUtf8(""))
         self.pi_afficherAttaques = QtGui.QWidget()
         self.pi_afficherAttaques.setObjectName(_fromUtf8("pi_afficherAttaques"))
         self.pi_panneauAttaqueEC = QtGui.QGroupBox(self.pi_afficherAttaques)
@@ -1130,14 +1153,14 @@ class Ui_principal(object):
         self.pi_listeAttaques.horizontalHeader().setVisible(False)
         self.pi_listeAttaques.horizontalHeader().setDefaultSectionSize(50)
         self.pi_listeAttaques.verticalHeader().setVisible(False)
-        icon37 = QtGui.QIcon()
-        icon37.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/attaque_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_ongletsListes.addTab(self.pi_afficherAttaques, icon37, _fromUtf8(""))
+        icon40 = QtGui.QIcon()
+        icon40.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/attaque_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_ongletsListes.addTab(self.pi_afficherAttaques, icon40, _fromUtf8(""))
         self.pi_afficherInventaire = QtGui.QWidget()
         self.pi_afficherInventaire.setObjectName(_fromUtf8("pi_afficherInventaire"))
-        icon38 = QtGui.QIcon()
-        icon38.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sac_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.pi_ongletsListes.addTab(self.pi_afficherInventaire, icon38, _fromUtf8(""))
+        icon41 = QtGui.QIcon()
+        icon41.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sac_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.pi_ongletsListes.addTab(self.pi_afficherInventaire, icon41, _fromUtf8(""))
         self.pi_afficherNotes = QtGui.QWidget()
         self.pi_afficherNotes.setObjectName(_fromUtf8("pi_afficherNotes"))
         self.verticalLayout_8 = QtGui.QVBoxLayout(self.pi_afficherNotes)
@@ -1146,7 +1169,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, icon26, _fromUtf8(""))
+        self.pi_ongletsListes.addTab(self.pi_afficherNotes, icon22, _fromUtf8(""))
         self.verticalLayout_10.addWidget(self.pi_ongletsListes)
         self.cbt_panneauDroite.addWidget(self.cbt_panneauDroite2)
         self.cbt_panneauDroite3 = QtGui.QWidget()
@@ -1360,9 +1383,9 @@ class Ui_principal(object):
         self.grp_nouveauPj.setMinimumSize(QtCore.QSize(50, 50))
         self.grp_nouveauPj.setMaximumSize(QtCore.QSize(50, 50))
         self.grp_nouveauPj.setText(_fromUtf8(""))
-        icon39 = QtGui.QIcon()
-        icon39.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/nouveauJoueur_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.grp_nouveauPj.setIcon(icon39)
+        icon42 = QtGui.QIcon()
+        icon42.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/nouveauJoueur_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.grp_nouveauPj.setIcon(icon42)
         self.grp_nouveauPj.setIconSize(QtCore.QSize(24, 24))
         self.grp_nouveauPj.setObjectName(_fromUtf8("grp_nouveauPj"))
         self.verticalLayout_12.addWidget(self.grp_nouveauPj)
@@ -1608,7 +1631,7 @@ class Ui_principal(object):
         self.cbt_panneauGauche.setCurrentIndex(1)
         self.cbt_panneauBas.setCurrentIndex(1)
         self.cbt_panneauDroite.setCurrentIndex(1)
-        self.cp_ongletsListes.setCurrentIndex(0)
+        self.cp_ongletsListes.setCurrentIndex(1)
         self.pi_ongletsListes.setCurrentIndex(0)
         self.tabStatutAppli.setCurrentIndex(2)
         QtCore.QMetaObject.connectSlotsByName(principal)
@@ -1707,11 +1730,13 @@ class Ui_principal(object):
         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.setText(_translate("principal", "...", None))
+        self.cp_afficherNotes.setToolTip(_translate("principal", "Gérer les caches", None))
+        self.cp_afficherNotes.setText(_translate("principal", "...", None))
+        self.cp_gomme.setText(_translate("principal", "...", None))
+        self.cp_placerPiege.setText(_translate("principal", "...", None))
         self.cp_placerSortie.setToolTip(_translate("principal", "Placer la/les sortie(s)", None))
         self.cp_placerSortie.setText(_translate("principal", "...", None))
         self.cp_effets.setToolTip(_translate("principal", "Effets spéciaux", None))
-        self.cp_afficherNotes.setToolTip(_translate("principal", "Gérer les caches", None))
-        self.cp_afficherNotes.setText(_translate("principal", "...", None))
         self.cp_defPlacement.setToolTip(_translate("principal", "Définir la zone de placement des joueurs", None))
         self.cp_defPlacement.setText(_translate("principal", "...", None))
         self.cp_placerCache.setText(_translate("principal", "...", None))
@@ -1789,7 +1814,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, DmFrameInf_Combattant, DmLabel, DmGraphicsView, DmTableMat, DmTextEdit, DmTableWidget
+from dm import DmFrameInf_Decor, DmFrameInf_Case, DmLabel, DmGraphicsView, DmFrameInf_Combattant, DmTableWidget, DmTextEdit, DmTableMat
 import ressource_rc
 
 if __name__ == "__main__":

+ 1 - 1
lib/ui/explorateurMateriels.ui

@@ -187,7 +187,7 @@
    <item>
     <widget class="QTabWidget" name="exm_onglets">
      <property name="currentIndex">
-      <number>2</number>
+      <number>0</number>
      </property>
      <widget class="QWidget" name="exm_tab_tr">
       <attribute name="icon">

+ 80 - 29
lib/ui/principal.ui

@@ -420,7 +420,7 @@
                         <number>6</number>
                        </property>
                        <item>
-                        <widget class="QTableWidget" name="inf_listeOrdreJeu">
+                        <widget class="DmTableWidget" name="inf_listeOrdreJeu">
                          <property name="minimumSize">
                           <size>
                            <width>80</width>
@@ -1321,7 +1321,7 @@
                      </size>
                     </property>
                     <property name="currentIndex">
-                     <number>1</number>
+                     <number>3</number>
                     </property>
                     <widget class="QWidget" name="cbt_panneauDroite0"/>
                     <widget class="QWidget" name="cbt_panneauDroite1">
@@ -2062,7 +2062,7 @@
                             </palette>
                            </property>
                            <property name="currentIndex">
-                            <number>2</number>
+                            <number>1</number>
                            </property>
                            <widget class="QWidget" name="cp_afficherTerrains">
                             <attribute name="icon">
@@ -2496,13 +2496,13 @@
                              <widget class="QToolButton" name="cp_placerEntree">
                               <property name="minimumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
                               <property name="maximumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
@@ -2518,17 +2518,63 @@
                               </property>
                              </widget>
                             </item>
+                            <item row="0" column="5">
+                             <widget class="QToolButton" name="cp_gomme">
+                              <property name="minimumSize">
+                               <size>
+                                <width>31</width>
+                                <height>31</height>
+                               </size>
+                              </property>
+                              <property name="maximumSize">
+                               <size>
+                                <width>31</width>
+                                <height>16777215</height>
+                               </size>
+                              </property>
+                              <property name="text">
+                               <string>...</string>
+                              </property>
+                              <property name="icon">
+                               <iconset resource="ressource.qrc">
+                                <normaloff>:/interface/16/ressource/gomme_16.png</normaloff>:/interface/16/ressource/gomme_16.png</iconset>
+                              </property>
+                             </widget>
+                            </item>
+                            <item row="0" column="4">
+                             <widget class="QToolButton" name="cp_placerPiege">
+                              <property name="minimumSize">
+                               <size>
+                                <width>31</width>
+                                <height>31</height>
+                               </size>
+                              </property>
+                              <property name="maximumSize">
+                               <size>
+                                <width>31</width>
+                                <height>16777215</height>
+                               </size>
+                              </property>
+                              <property name="text">
+                               <string>...</string>
+                              </property>
+                              <property name="icon">
+                               <iconset resource="ressource.qrc">
+                                <normaloff>:/interface/16/ressource/piege_16.png</normaloff>:/interface/16/ressource/piege_16.png</iconset>
+                              </property>
+                             </widget>
+                            </item>
                             <item row="2" column="2">
                              <widget class="QToolButton" name="cp_placerSortie">
                               <property name="minimumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
                               <property name="maximumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
@@ -2548,19 +2594,25 @@
                              <widget class="QComboBox" name="cp_effets">
                               <property name="minimumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
                               <property name="maximumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
                               <property name="toolTip">
                                <string>Effets spéciaux</string>
                               </property>
+                              <property name="iconSize">
+                               <size>
+                                <width>12</width>
+                                <height>12</height>
+                               </size>
+                              </property>
                               <item>
                                <property name="text">
                                 <string/>
@@ -2608,78 +2660,78 @@
                               </item>
                              </widget>
                             </item>
-                            <item row="0" column="4">
-                             <widget class="QToolButton" name="cp_afficherNotes">
+                            <item row="2" column="4">
+                             <widget class="QToolButton" name="cp_defPlacement">
                               <property name="minimumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
                               <property name="maximumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
                               <property name="toolTip">
-                               <string>Gérer les caches</string>
+                               <string>Définir la zone de placement des joueurs</string>
                               </property>
                               <property name="text">
                                <string>...</string>
                               </property>
                               <property name="icon">
                                <iconset resource="ressource.qrc">
-                                <normaloff>:/interface/32/ressource/note_32.png</normaloff>:/interface/32/ressource/note_32.png</iconset>
+                                <normaloff>:/interface/16/ressource/depart_16.png</normaloff>:/interface/16/ressource/depart_16.png</iconset>
                               </property>
                              </widget>
                             </item>
-                            <item row="2" column="4">
-                             <widget class="QToolButton" name="cp_defPlacement">
+                            <item row="0" column="2">
+                             <widget class="QToolButton" name="cp_placerCache">
                               <property name="minimumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
                               <property name="maximumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
-                              <property name="toolTip">
-                               <string>Définir la zone de placement des joueurs</string>
-                              </property>
                               <property name="text">
                                <string>...</string>
                               </property>
                               <property name="icon">
                                <iconset resource="ressource.qrc">
-                                <normaloff>:/interface/16/ressource/depart_16.png</normaloff>:/interface/16/ressource/depart_16.png</iconset>
+                                <normaloff>:/interface/32/ressource/mainCache_32.png</normaloff>:/interface/32/ressource/mainCache_32.png</iconset>
                               </property>
                              </widget>
                             </item>
-                            <item row="0" column="2">
-                             <widget class="QToolButton" name="cp_placerCache">
+                            <item row="2" column="5">
+                             <widget class="QToolButton" name="cp_afficherNotes">
                               <property name="minimumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
                               <property name="maximumSize">
                                <size>
-                                <width>41</width>
+                                <width>31</width>
                                 <height>31</height>
                                </size>
                               </property>
+                              <property name="toolTip">
+                               <string>Gérer les caches</string>
+                              </property>
                               <property name="text">
                                <string>...</string>
                               </property>
                               <property name="icon">
                                <iconset resource="ressource.qrc">
-                                <normaloff>:/interface/32/ressource/mainCache_32.png</normaloff>:/interface/32/ressource/mainCache_32.png</iconset>
+                                <normaloff>:/interface/32/ressource/note_32.png</normaloff>:/interface/32/ressource/note_32.png</iconset>
                               </property>
                              </widget>
                             </item>
@@ -4817,7 +4869,6 @@ le plateau</string>
  </customwidgets>
  <resources>
   <include location="ressource.qrc"/>
-  <include location="../../../../../Users/olivier.massot/.designer/backup/ressource.qrc"/>
  </resources>
  <connections/>
 </ui>

+ 2 - 0
lib/ui/ressource.qrc

@@ -57,6 +57,8 @@
 		<file>ressource/brise_16.png</file>
 		<file>ressource/import_16.png</file>
 		<file>ressource/moins_16.png</file>
+		<file>ressource/piege_16.png</file>
+		<file>ressource/ninja_16.png</file>
     </qresource>
     <qresource prefix="/interface/24" lang="fr">
         <file>ressource/poids_24.png</file>

BIN
lib/ui/ressource/ninja_16.png


BIN
lib/ui/ressource/piege_16.png


+ 130 - 37
lib/ui/ressource_rc.py

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

BIN
mat/defaut/cbpjko6PKn.dm


BIN
mat/defaut/cbpjlhJRJf.dm


BIN
mat/defaut/cbpjlhKTq6.dm


BIN
mat/defaut/dcpjlhHrA6.dm


BIN
mat/defaut/dcpjlhJaf9.dm


BIN
mat/defaut/trpjlhF3od.dm


BIN
mat/defaut/trpjlhGeI8.dm


BIN
mat/defaut/trpjlhGpxm.dm


+ 3 - 4
parties/defaut/cbt/infos_sauvegarde

@@ -1,4 +1,3 @@
-€}q(U
-plpjko6FCR}q(UnomUtestUdateCreationGAÕ|f‡U`BUdateSvgGAÕ|f‹>—�UchapitreU1UenCours‰Upublic‰uU
-plpjko8it5q}q(UnomqUtest2qUdateCreationqGAÕ|fŸçß;UdateSvgqGAÕ|f 6$ÝUchapitreq	U1UenCoursq
-‰Upublicq‰uu.
+€}qU
+plpjloIyzjq}q(UnomqUtestqUdateCreationqGAÕ|¹›ÒòUdateSvgqGAÕ|¹œ9XUchapitreqU1UenCoursq	‰Upublicq
+‰us.

BIN
parties/defaut/cbt/plpjko6FCR.dm


BIN
parties/defaut/cbt/plpjko8it5.dm


BIN
parties/defaut/cbt/plpjloIyzj.dm


BIN
parties/defaut/grp/cbpjjkaliQ.dm


BIN
parties/defaut/grp/cbpjjo2fVX.dm


BIN
parties/defaut/grp/cbpjjo3PbS.dm


BIN
parties/defaut/grp/cbpjjo3cGS.dm


BIN
parties/defaut/grp/cbpjjoYIe3.dm


BIN
parties/defaut/grp/cbpjjovwvD.dm


BIN
parties/defaut/grp/cbpjjjWTlX.dm → parties/defaut/grp/pjpjlnfAxO.dm


BIN
parties/defaut/grp/pjpjlngiGG.dm


BIN
parties/defaut/grp/pjpjlngzFC.dm


+ 4 - 0
tmp/sepjll5RY2.tmp

@@ -0,0 +1,4 @@
+€clib.commun
+Session
+q)�q}q(U_idUqUdefautqU_idPqhU_idJqhU_idSqU
+sepjll5RY2ub.

+ 4 - 0
tmp/sepjlm2NsZ.tmp

@@ -0,0 +1,4 @@
+€clib.commun
+Session
+q)�q}q(U_idUqUdefautqU_idPqhU_idJqhU_idSqU
+sepjlm2NsZub.

+ 4 - 0
tmp/sepjlmdlsy.tmp

@@ -0,0 +1,4 @@
+€clib.commun
+Session
+q)�q}q(U_idUqUdefautqU_idPqhU_idJqhU_idSqU
+sepjlmdlsyub.

+ 4 - 0
tmp/sepjlmfVzW.tmp

@@ -0,0 +1,4 @@
+€clib.commun
+Session
+q)�q}q(U_idUqUdefautqU_idPqhU_idJqhU_idSqU
+sepjlmfVzWub.

+ 4 - 0
tmp/sepjlnfj9f.tmp

@@ -0,0 +1,4 @@
+€clib.commun
+Session
+q)�q}q(U_idUqUdefautqU_idPqhU_idJqhU_idSqU
+sepjlnfj9fub.

+ 4 - 0
tmp/sepjloJZCx.tmp

@@ -0,0 +1,4 @@
+€clib.commun
+Session
+q)�q}q(U_idUqUdefautqU_idPqhU_idJqhU_idSqU
+sepjloJZCxub.