浏览代码

Creation des classes GestionCombat et ListePions

olinox14 10 年之前
父节点
当前提交
ee8fbbcb55
共有 50 个文件被更改,包括 1102 次插入833 次删除
  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. 二进制
      lib/ui/ressource/ninja_16.png
  22. 二进制
      lib/ui/ressource/piege_16.png
  23. 130 37
      lib/ui/ressource_rc.py
  24. 二进制
      mat/defaut/cbpjko6PKn.dm
  25. 二进制
      mat/defaut/cbpjlhJRJf.dm
  26. 二进制
      mat/defaut/cbpjlhKTq6.dm
  27. 二进制
      mat/defaut/dcpjlhHrA6.dm
  28. 二进制
      mat/defaut/dcpjlhJaf9.dm
  29. 二进制
      mat/defaut/trpjlhF3od.dm
  30. 二进制
      mat/defaut/trpjlhGeI8.dm
  31. 二进制
      mat/defaut/trpjlhGpxm.dm
  32. 3 4
      parties/defaut/cbt/infos_sauvegarde
  33. 二进制
      parties/defaut/cbt/plpjko6FCR.dm
  34. 二进制
      parties/defaut/cbt/plpjko8it5.dm
  35. 二进制
      parties/defaut/cbt/plpjloIyzj.dm
  36. 二进制
      parties/defaut/grp/cbpjjkaliQ.dm
  37. 二进制
      parties/defaut/grp/cbpjjo2fVX.dm
  38. 二进制
      parties/defaut/grp/cbpjjo3PbS.dm
  39. 二进制
      parties/defaut/grp/cbpjjo3cGS.dm
  40. 二进制
      parties/defaut/grp/cbpjjoYIe3.dm
  41. 二进制
      parties/defaut/grp/cbpjjovwvD.dm
  42. 二进制
      parties/defaut/grp/pjpjlnfAxO.dm
  43. 二进制
      parties/defaut/grp/pjpjlngiGG.dm
  44. 二进制
      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/Cache.py=utf-8
 encoding//lib/Case.py=utf-8
 encoding//lib/Case.py=utf-8
 encoding//lib/Combattant.py=utf-8
 encoding//lib/Combattant.py=utf-8
+encoding//lib/Creature.py=utf-8
 encoding//lib/Decor.py=utf-8
 encoding//lib/Decor.py=utf-8
 encoding//lib/EcranAffichageTexte.py=utf-8
 encoding//lib/EcranAffichageTexte.py=utf-8
 encoding//lib/EcranAltitude.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
     QApplication
 
 
 from lib.Actions import Ligne
 from lib.Actions import Ligne
+from lib.Combattant import PJ
 from lib.EcranChargerPlateau import EcranChargerPlateau
 from lib.EcranChargerPlateau import EcranChargerPlateau
 from lib.EcranCreerPlateau import EcranCreerPlateau
 from lib.EcranCreerPlateau import EcranCreerPlateau
 from lib.EcranEditionCombattant import EcranEditionCombattant
 from lib.EcranEditionCombattant import EcranEditionCombattant
@@ -30,12 +31,12 @@ class DMonde(QMainWindow):
         """initialisation de la fenetre"""
         """initialisation de la fenetre"""
         super (DMonde, self).__init__()
         super (DMonde, self).__init__()
         self.plateau = None
         self.plateau = None
-        self.profil = "Joueur"
+        self.util = "Joueur"
         self.partie = ""
         self.partie = ""
         self.regles = ""
         self.regles = ""
         self.idPlateauEnCours = ""
         self.idPlateauEnCours = ""
         self.plateauConnecte = False
         self.plateauConnecte = False
-        self._compteurPj = 0
+        self.pjs = []   #liste des idM des personnages du groupe
         self.createWidgets()
         self.createWidgets()
 
 
     def createWidgets(self):
     def createWidgets(self):
@@ -55,6 +56,9 @@ class DMonde(QMainWindow):
         
         
 #         self.showMaximized()
 #         self.showMaximized()
 
 
+    def estMj(self):
+        return True
+
     def chargerPartie(self, idPartie):
     def chargerPartie(self, idPartie):
         """charge la partie"""
         """charge la partie"""
         self.profil = "olivier"
         self.profil = "olivier"
@@ -200,14 +204,15 @@ class DMonde(QMainWindow):
         self.ui.grp_deroulement_layout.setAlignment(Qt.AlignTop)
         self.ui.grp_deroulement_layout.setAlignment(Qt.AlignTop)
 
 
     def pjAjouterAListe(self, pj = None):
     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:
         if pj:
             panneau.chargerPj(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.connect(panneau, SIGNAL("pjModifie(int)"), self.pjEnregistrer)
         self.ui.grp_deroulement_layout.addWidget(panneau, ligne, colonne)
         self.ui.grp_deroulement_layout.addWidget(panneau, ligne, colonne)
         
         
@@ -222,7 +227,7 @@ class DMonde(QMainWindow):
         self.ui.grp_deroulement_layout.removeWidget(panneau)
         self.ui.grp_deroulement_layout.removeWidget(panneau)
 
 
     def nouveauPj(self):
     def nouveauPj(self):
-        fen = EcranEditionCombattant()
+        fen = EcranEditionCombattant(PJ())
         fen.exec_()
         fen.exec_()
         pj = fen.combattant()
         pj = fen.combattant()
         del fen
         del fen

+ 17 - 11
avancement.TXT

@@ -8,7 +8,7 @@
   *7- la mise a jour des effets ne fonctionne pas
   *7- la mise a jour des effets ne fonctionne pas
   *8- zone de placement ne peut pas etre scindee
   *8- zone de placement ne peut pas etre scindee
   *9- edition cbtants: le bouton aide n'affiche rien
   *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!
   *11- dragon: image ne pivote pas avec le pion!
   *12- interdire deplacement sur d'autres pions
   *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
   *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
        elargir un peu la scrollarea des attaques
   *17- inventaire commence sur l'onglet "trésor"
   *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
   *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
   *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)
   *22- epaisseur ne fonctionne pas avec ligne (dessin)
   *23- zone placement: hachures ne s'enlèvent pas aprés dessin, pas de curseur pinceau
   *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?)
   *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
 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
 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
 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
 ### orga fichiers/ fonctions
@@ -43,11 +48,12 @@
 2- creer menu combat
 2- creer menu combat
 3- pouvoir afficher les fiches des pions, generation de valeurs aleatoires, mode edition
 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
 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
 6- décors à forme variables
 7- integrer l'attribut hauteurMax pour les decors
 7- integrer l'attribut hauteurMax pour les decors
 8- ajouter les effets aux cases, decors, et combattants
 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)
 ### ameliorations (secondaires)
 1- ajouter des pieges
 1- ajouter des pieges
@@ -56,4 +62,4 @@
 4- regler l'effet de la tabulation dans les fiches
 4- regler l'effet de la tabulation dans les fiches
 5- Permettre l'envoi de sons par le chat 
 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
 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
         pass
 
 
     def acteur(self):
     def acteur(self):
-        return self.plateau.combattants[self._num]
+        return self.plateau.pions[self._num]
 
 
     def coordActeur(self):
     def coordActeur(self):
         return self.acteur().position
         return self.acteur().position

+ 5 - 11
lib/Cache.py

@@ -37,12 +37,9 @@ class Cache(object):
         
         
         for coord in self._listeCases:
         for coord in self._listeCases:
             self.plateau.cases[coord].ajouterCache(self._idCache)  
             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):
     def creerEtiquette(self):
         self.etiquette = EtiquetteCache(self)
         self.etiquette = EtiquetteCache(self)
@@ -57,14 +54,11 @@ class Cache(object):
         for coord in self._listeCases:
         for coord in self._listeCases:
             self.plateau.cases[coord].retirerCache(self._idCache)
             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)
         self.plateau.removeItem(self.etiquette)
 
 
         del self.plateau.caches[self._idCache]         
         del self.plateau.caches[self._idCache]         
-        
+
+        self.plateau.gC.maj()
  
  
         
         
 class EtiquetteCache(QGraphicsTextItem):
 class EtiquetteCache(QGraphicsTextItem):

+ 7 - 53
lib/Case.py

@@ -123,7 +123,6 @@ class Case(QGraphicsPolygonItem):
         
         
         self.creerGraphique()
         self.creerGraphique()
         self.majTerrain(self.terrain)   
         self.majTerrain(self.terrain)   
-        self.majAffichageSpecial("")
         self.majEffet(self.effetActif)
         self.majEffet(self.effetActif)
 
 
     def polygone(self, x, y):
     def polygone(self, x, y):
@@ -225,10 +224,8 @@ class Case(QGraphicsPolygonItem):
                 break
                 break
         retour = None
         retour = None
         if num:
         if num:
-            if num < 10000:
-                retour = self.plateau.combattants[num]
-            else:
-                retour = self.plateau.decors[num] 
+            retour = self.plateau.pions[num]
+
         if retour:
         if retour:
             if not isinstance(retour, classe): retour = None        
             if not isinstance(retour, classe): retour = None        
         return retour                          
         return retour                          
@@ -321,56 +318,13 @@ class Case(QGraphicsPolygonItem):
             self.effetActif = ""
             self.effetActif = ""
             self.polygoneEffet.setVisible(False)              
             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
     #caches
     def ajouterCache(self, idCache):
     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()
         self.majCache()
         
         
     def retirerCache(self, idCache):
     def retirerCache(self, idCache):
-        if idCache in self.caches:
-            self.caches.remove(idCache) 
+        if idCache in self.caches: self.caches.remove(idCache) 
         self.majCache()
         self.majCache()
     
     
     def majCache(self):
     def majCache(self):
@@ -380,7 +334,7 @@ class Case(QGraphicsPolygonItem):
                                 
                                 
     def estCachee(self):
     def estCachee(self):
         """une case cachee ne recoit plus aucun evenement souris ou clavier"""
         """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
     #fonctions secondaires
     def couleurDep(self):
     def couleurDep(self):
@@ -454,7 +408,7 @@ class Case(QGraphicsPolygonItem):
     def hoverEnterEvent(self, event):
     def hoverEnterEvent(self, event):
         """met a jour l'affichage de la case au survol de la souris, si un pion est selectionne"""
         """met a jour l'affichage de la case au survol de la souris, si un pion est selectionne"""
         super(Case, self).hoverEnterEvent(event)
         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)
             self.plateau.caseSurvol(self.x, self.y)
 
 
     def hoverLeaveEvent(self, event):
     def hoverLeaveEvent(self, event):
@@ -585,7 +539,7 @@ class PolygoneCache(QGraphicsPolygonItem):
     def sceneEvent(self, event):
     def sceneEvent(self, event):
         """filtre les evenements souris et clavier
         """filtre les evenements souris et clavier
             si faux: l'evenement est bloque"""
             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:
         if not autorise:
             event.accept()
             event.accept()
         else:
         else:

+ 13 - 12
lib/Combattant.py

@@ -26,12 +26,11 @@ class Combattant(Pion, Materiel):
         #caracs liees au combat:
         #caracs liees au combat:
         self.etat = ""
         self.etat = ""
         self.deplacementRestant = 0        
         self.deplacementRestant = 0        
-        self.caches = []   #liste des id des caches qui couvrent le combattant
 
 
     def pM(self):
     def pM(self):
         """les points de mouvement"""
         """les points de mouvement"""
         return max([self.depMarche, self.depNage, self.depEscalade, self.depVol])
         return max([self.depMarche, self.depNage, self.depEscalade, self.depVol])
-    
+
     def coutDep(self, typeDep, dist = 1):
     def coutDep(self, typeDep, dist = 1):
         """renvoie le cout en PM pour effectuer ce deplacement"""
         """renvoie le cout en PM pour effectuer ce deplacement"""
         retour = 1
         retour = 1
@@ -51,18 +50,13 @@ class Combattant(Pion, Materiel):
         self.plateau = plateau
         self.plateau = plateau
         super(Combattant, self).ajouterAuPlateau(self.plateau)
         super(Combattant, self).ajouterAuPlateau(self.plateau)
         self.majEtiquette()
         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):
     def estCache(self):
         """met a jour le combattant selon qu'il est cache ou non"""
         """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):
     def hoverEnterEvent(self, event):
         """evenement lors du survol de la souris (en entree)"""
         """evenement lors du survol de la souris (en entree)"""
@@ -92,7 +86,14 @@ class Combattant(Pion, Materiel):
             event.ignore()
             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"]:
                 if isinstance(self._pion, Combattant) and dmK.touchesEnfoncees() == ["maj"]:
                     nouveauZ = self.plateau.dialogueVol(self._pion.z)
                     nouveauZ = self.plateau.dialogueVol(self._pion.z)
                     self._pion.majZ(nouveauZ)
                     self._pion.majZ(nouveauZ)
-                self.plateau.creerPion(self._pion)
+                self.plateau.pions.nouveau(self._pion)
                 accepte = True
                 accepte = True
         return accepte
         return accepte
     
     
     def toucheClavier(self, event):
     def toucheClavier(self, event):
-        accepte = False
         if self._pion:
         if self._pion:
             if event.key() == Qt.Key_Right:
             if event.key() == Qt.Key_Right:
                 self.plateau.proj.majRotation(1)
                 self.plateau.proj.majRotation(1)
-                accepte = True
+                return True
             elif event.key() == Qt.Key_Left:
             elif event.key() == Qt.Key_Left:
                 self.plateau.proj.majRotation(-1)
                 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):
 class SuppressionPion(ModeBaseCp):
@@ -532,69 +514,47 @@ class SuppressionPion(ModeBaseCp):
         self._sourceCurseur = ":/interface/16/ressource/gomme_16.png"
         self._sourceCurseur = ":/interface/16/ressource/gomme_16.png"
         self._enSurbrillance = []
         self._enSurbrillance = []
         self._focus = True
         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
         #cible est le nom de la classe des objets a supprimer
-        self._cible = cible
         super(SuppressionPion, self).activer()
         super(SuppressionPion, self).activer()
 
 
     def desactiver(self):
     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()
         super(SuppressionPion, self).desactiver()
 
 
     def clicGauche(self, event):
     def clicGauche(self, event):
         """supprime le pion sous le clic. S'il y en a plusieurs,
         """supprime le pion sous le clic. S'il y en a plusieurs,
             supprime le premier de la pile"""
             supprime le premier de la pile"""
-        accepte = False
         num = None
         num = None
         item = self.plateau.itemAt(event.scenePos())
         item = self.plateau.itemAt(event.scenePos())
-        if isinstance(item.parentItem(), self._cible):
+        if issubclass(item.parentItem().__class__, Pion):
             num = item.parentItem().numero
             num = item.parentItem().numero
         else:
         else:
             if item.parentItem() != None: 
             if item.parentItem() != None: 
-                if isinstance(item.parentItem().parentItem(), self._cible):
+                if issubclass(item.parentItem().parentItem().__class__, Pion):
                     num = item.parentItem().parentItem().numero
                     num = item.parentItem().parentItem().numero
         if num:
         if num:
-            self.plateau.pionSupprimer(num)
-            accepte = True
-        return accepte
+            self.plateau.pions.supprimer(num)
+            return True
+        return False
     
     
     def survol_combattant(self, num):
     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):
     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):
     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):
     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):
 class DeplacementPion(ModeBaseCp):
     """mode de deplacement de pions (combattant ou decor) en mode creation
     """mode de deplacement de pions (combattant ou decor) en mode creation
@@ -605,10 +565,7 @@ class DeplacementPion(ModeBaseCp):
         
         
     def activer(self, num):
     def activer(self, num):
         self._num = 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.plateau.proj.creer(pion)
         self.deplace = False
         self.deplace = False
         super(DeplacementPion, self).activer()
         super(DeplacementPion, self).activer()
@@ -631,14 +588,12 @@ class DeplacementPion(ModeBaseCp):
         if self.plateau.cases[coord].occupeeParCombattant(): return
         if self.plateau.cases[coord].occupeeParCombattant(): return
         if self._num > 0:
         if self._num > 0:
             if self.deplace:
             if self.deplace:
-                if self._num < 10000:
-                    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())
                 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
                 accepte = True
         return accepte
         return accepte
     
     
@@ -692,12 +647,7 @@ class PionSelectionne(ModeBasePi):
 
 
     def pion(self):
     def pion(self):
         """retourne la ref du pion actuellement selectionne"""
         """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):
     def activer(self, num):
         self._num = num
         self._num = num

+ 1 - 1
lib/Pion.py

@@ -81,7 +81,7 @@ class Pion(QGraphicsObject):
         retour = []
         retour = []
         if self.plateau:
         if self.plateau:
             for x, y in self.forme.listeCases(self.position, self.nbRotations):
             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)))
                     retour.append((x, y, (self.plateau.cases[(x, y)].altitude + self.z + z)))
         return retour
         return retour
 
 

+ 392 - 437
lib/Plateau.py

@@ -29,10 +29,12 @@ from ProjectionDep import ProjectionDep
 from Terrain import Terrain
 from Terrain import Terrain
 import br
 import br
 from lib.commun import rep, charger
 from lib.commun import rep, charger
+from lib.gC import GestionCombat
 from lib.gM import GestionMateriel
 from lib.gM import GestionMateriel
 from lib.mat import Materiel, chargerMat
 from lib.mat import Materiel, chargerMat
 from outilsSvg import chargerUnique
 from outilsSvg import chargerUnique
 import regles as regles
 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), \
 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
         ##partie et infos plateau
         self.chapitre = 0
         self.chapitre = 0
-        self.tour = 0
+        self.creePar = ""
         
         
         self.enCours = False
         self.enCours = False
         self.public = False
         self.public = False
@@ -69,9 +71,9 @@ class Plateau(QGraphicsScene, Materiel):
         #objets
         #objets
         self.pinceau = Pinceau(self)
         self.pinceau = Pinceau(self)
         self.gM = GestionMateriel()
         self.gM = GestionMateriel()
+        self.gC = GestionCombat()
         self.cases = {}   #dict des cases du plateau   (coordonnées: case)
         self.cases = {}   #dict des cases du plateau   (coordonnées: case)
-        self.combattants = {}   #liste de combattants positionnes sur le plateau
-        self.decors = {}  #liste des decors places sur le plateau
+        self.pions = ListePions()
         self.caches = {}
         self.caches = {}
         self.listeCasesZonePlacement = []
         self.listeCasesZonePlacement = []
         self.polygoneZonePlacement = None
         self.polygoneZonePlacement = None
@@ -80,7 +82,11 @@ class Plateau(QGraphicsScene, Materiel):
         #infos combat
         #infos combat
         self.numCombattantEnCours = 0
         self.numCombattantEnCours = 0
         self.ordreJeu = {}  #numero du pion: ordre de jeu
         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):
     def __getstate__(self):
         self.dateSvg = time()
         self.dateSvg = time()
@@ -96,9 +102,19 @@ class Plateau(QGraphicsScene, Materiel):
     def vue(self):
     def vue(self):
         return self.fenetre.ui.cbt_vue
         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):
     def creer(self):
         """cree le plateau"""
         """cree le plateau"""
         self.dateCreation = time()
         self.dateCreation = time()
+        self.creePar = self.fenetre.util
         self.hCase = 120  #hauteur d'une case
         self.hCase = 120  #hauteur d'une case
         self.modeActif = Modes.ModeBase(self)
         self.modeActif = Modes.ModeBase(self)
         self.gestionCombat = None
         self.gestionCombat = None
@@ -131,14 +147,10 @@ class Plateau(QGraphicsScene, Materiel):
             self.caches[idCache].ajouter(self)
             self.caches[idCache].ajouter(self)
         self.majCaches()
         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
         #recreation des marqueurs entree/sortie
         for entreeSortie in self.entreesSorties:
         for entreeSortie in self.entreesSorties:
@@ -180,35 +192,22 @@ class Plateau(QGraphicsScene, Materiel):
         #modes d'interaction
         #modes d'interaction
         self.fenetre.connect(self.fenetre.ui.cbt_modeCreation, SIGNAL("clicked()"), self.plateauModeCreation, Qt.UniqueConnection)
         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.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
         #etapes du combat
         self.fenetre.connect(self.fenetre.ui.cbt_etapeSuivante, SIGNAL("clicked()"), self.etapeSuivante, Qt.UniqueConnection)
         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
         #affichage de fenetres
         self.fenetre.connect(self.fenetre.ui.cbt_nom, SIGNAL("clicked()"), self.afficherEcranPlateau, Qt.UniqueConnection)
         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.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.pi_listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee, Qt.UniqueConnection)
-
         self.fenetre.connect(self.fenetre.ui.cp_dialogueCouleurs, SIGNAL("clicked()"), self.modePeintureCase, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_dialogueCouleurs, SIGNAL("clicked()"), self.modePeintureCase, Qt.UniqueConnection)
-
         self.fenetre.connect(self.fenetre.ui.cp_afficherNotes, SIGNAL("clicked()"), self.agrandirNotesMjPlateau, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_afficherNotes, SIGNAL("clicked()"), self.agrandirNotesMjPlateau, Qt.UniqueConnection)
         
         
         #listes
         #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_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_listeCreatures, SIGNAL("cellClicked(int,int)"), self.modeCreationCombattant, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_listeDecors, SIGNAL("cellClicked(int,int)"), self.modeCreationDecor, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_listeDecors, SIGNAL("cellClicked(int,int)"), self.modeCreationDecor, Qt.UniqueConnection)
-        
-#         self.fenetre.connect(self.fenetre.ui.cp_editerTerrain, SIGNAL("clicked()"), self.terrainEdit, Qt.UniqueConnection)
-#         self.fenetre.connect(self.fenetre.ui.cp_nouveauTerrain, SIGNAL("clicked()"), self.terrainNouveau, Qt.UniqueConnection)
-#         self.fenetre.connect(self.fenetre.ui.cp_editerCombattant, SIGNAL("clicked()"), self.creatureEdit, Qt.UniqueConnection)
-#         self.fenetre.connect(self.fenetre.ui.cp_nouveauCombattant, SIGNAL("clicked()"), self.creatureNouveau, Qt.UniqueConnection)
-#         self.fenetre.connect(self.fenetre.ui.cp_gommeCombattant, SIGNAL("clicked()"), self.majModeSupprimerCombattant, Qt.UniqueConnection)
-#         self.fenetre.connect(self.fenetre.ui.cp_editerDecor, SIGNAL("clicked()"), self.decorEdit, Qt.UniqueConnection)
-#         self.fenetre.connect(self.fenetre.ui.cp_nouveauDecor, SIGNAL("clicked()"), self.decorNouveau, Qt.UniqueConnection)
-#         self.fenetre.connect(self.fenetre.ui.cp_gommeDecor, SIGNAL("clicked()"), self.majModeSupprimerDecor, Qt.UniqueConnection)
 
 
         #creation
         #creation
         self.fenetre.connect(self.fenetre.ui.cp_epaisseurPinceau, SIGNAL("valueChanged(int)"), self.majEpaisseurPinceau, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_epaisseurPinceau, SIGNAL("valueChanged(int)"), self.majEpaisseurPinceau, Qt.UniqueConnection)
@@ -216,6 +215,7 @@ class Plateau(QGraphicsScene, Materiel):
         self.fenetre.connect(self.fenetre.ui.cp_effets, SIGNAL("activated(int)"), self.modeCaseEffet, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_effets, SIGNAL("activated(int)"), self.modeCaseEffet, Qt.UniqueConnection)
         
         
         #autres:
         #autres:
+        self.fenetre.connect(self.fenetre.ui.cp_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_placerEntree, SIGNAL("clicked()"), self.majModeDefinirEntree, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_placerCache, SIGNAL("clicked()"), self.majModePlacerCache, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_placerCache, SIGNAL("clicked()"), self.majModePlacerCache, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cp_placerSortie, SIGNAL("clicked()"), self.majModeDefinirSortie, 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_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_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):
     def initialisationGraphique(self):
         """cree la scene graphique et les parametres necessaires a son fonctionnement, et met a jour l'interface""" 
         """cree la scene graphique et les parametres necessaires a son fonctionnement, et met a jour l'interface""" 
         #on cree la scene graphique
         #on cree la scene graphique
@@ -258,7 +255,7 @@ class Plateau(QGraphicsScene, Materiel):
         self.polygoneZonePlacement = None
         self.polygoneZonePlacement = None
 
 
         #gestion du mode d'interaction avec le plateau
         #gestion du mode d'interaction avec le plateau
-        
+        self.pions.initialiser(self)
         self.pinceau = Pinceau(self)
         self.pinceau = Pinceau(self)
         self.proj = ProjectionDep(self)
         self.proj = ProjectionDep(self)
   
   
@@ -267,8 +264,8 @@ class Plateau(QGraphicsScene, Materiel):
         self.majNomPlateau()
         self.majNomPlateau()
         self.majBoutonsCouleursPerso()
         self.majBoutonsCouleursPerso()
         self.gM.initialiser(self.fenetre)
         self.gM.initialiser(self.fenetre)
+        self.gC.initialiser(self)
         
         
-        self.initListeOrdreJeu()
         self.initListeAttaques()
         self.initListeAttaques()
         self.majBoutonEtape()
         self.majBoutonEtape()
 
 
@@ -310,64 +307,46 @@ class Plateau(QGraphicsScene, Materiel):
             self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Publier le plateau"))
             self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Publier le plateau"))
             return
             return
         
         
-        if not self.tour > 0:
+        if not self.gC.tour() > 0:
             self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Démarrer le combat"))
             self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Démarrer le combat"))
             return            
             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):
     def etapeSuivante(self):
         """apres clic sur le bouton d'etape, on passe a l'etape suivante (publication, demarrage du combat...)"""
         """apres clic sur le bouton d'etape, on passe a l'etape suivante (publication, demarrage du combat...)"""
         if not self.public:
         if not self.public:
             self.publier()
             self.publier()
             return
             return
-        
-        if not self.tour > 0:
-            self.demarrer()
-            return            
-        
-        self.pionSuivant()   
+        self.gC.pionSuivant()
 
 
     def publier(self):
     def publier(self):
         self.public = True
         self.public = True
         self.majListePJ()
         self.majListePJ()
         self.majBoutonEtape()
         self.majBoutonEtape()
-    
-    def demarrer(self):
-        self.tour = 1
-        self.majBoutonEtape()    
-
+ 
     def majListePJ(self):
     def majListePJ(self):
         """met a jour la liste des pj qui peuvent etre ajoutes au plateau"""
         """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(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):
     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):
     def majBoutonsCouleursPerso(self):
         """met a jour l'affichage des couleurs customisees dans la boite de dialogue de selection de couleur"""
         """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()
                     self.cases[coord].majCache()
                     traite.append(coord)
                     traite.append(coord)
 
 
-
-
     ############### maj des infos du panneau Pi a la selection/deselection d'un pion
     ############### maj des infos du panneau Pi a la selection/deselection d'un pion
         #voir a balancer tout ca dans une classe a part
         #voir a balancer tout ca dans une classe a part
 
 
@@ -541,25 +518,6 @@ class Plateau(QGraphicsScene, Materiel):
         self.modeActif.desactiver()
         self.modeActif.desactiver()
         self.modeActif = mode(self)
         self.modeActif = mode(self)
         self.modeActif.activer(param)
         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):
     def modePeintureCase(self):
         """enclenche le mode peinture de case a partir de la couleur selectionnee"""
         """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"""
         """enclenche le mode de creation de pions simples"""
         self.majMode("pionCreation")
         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)"""
         """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):
     def modeCreationDecor(self, ligne, col):
         """enclenche le mode de creation de decors depuis la liste des decors"""
         """enclenche le mode de creation de decors depuis la liste des decors"""
@@ -692,66 +646,6 @@ class Plateau(QGraphicsScene, Materiel):
     ###############
     ###############
 
 
     ########## Gestion du combat ##############
     ########## 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):
     def afficheEcranGestionCombat(self):
         """affiche l'ecran de gestion du combat"""
         """affiche l'ecran de gestion du combat"""
         self.gestionCombat = EcranGestionCombat(self)
         self.gestionCombat = EcranGestionCombat(self)
@@ -759,45 +653,107 @@ class Plateau(QGraphicsScene, Materiel):
         self.connect(self.fenetre, SIGNAL("majListesPions"), self.majListesPions)
         self.connect(self.fenetre, SIGNAL("majListesPions"), self.majListesPions)
         self.connect(self.gestionCombat, SIGNAL("majListesPions"), self.majListesPions)
         self.connect(self.gestionCombat, SIGNAL("majListesPions"), self.majListesPions)
         QApplication.processEvents()
         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):
     def listeAttributCelluleModifiee(self, ligne, colonne):
         """une cellule de la liste des attributs a ete modifiee"""
         """une cellule de la liste des attributs a ete modifiee"""
@@ -935,6 +891,7 @@ class Plateau(QGraphicsScene, Materiel):
     ###############
     ###############
 
 
     ### panneau d'info
     ### panneau d'info
+    
     def majInfosCombattant(self, combattant=None):
     def majInfosCombattant(self, combattant=None):
         self.fenetre.ui.inf_boitePion.maj(combattant)
         self.fenetre.ui.inf_boitePion.maj(combattant)
 
 
@@ -944,7 +901,243 @@ class Plateau(QGraphicsScene, Materiel):
     def majInfosCase(self, case=None):
     def majInfosCase(self, case=None):
         self.fenetre.ui.inf_boiteCase.maj(case)        
         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):
     def coordonneesValides(self, coord):
         """les coordonnees entrees en parametre sont elles celles d'une case du plateau"""
         """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)
         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)
             retour += self.pionSelectionne().coutDep("depVol", dist)
 
 
         return retour   
         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):
     def majZonePlacement(self, listeCases):
         """met a jour la forme et l'affichage de la zone de placement initale des joueurs"""
         """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.polygoneZonePlacement.setPolygon(polygone)
             self.listeCasesZonePlacement = listeCases
             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.createWidgets()
         self._selection = []
         self._selection = []
         self.ui.exm_onglets.setCurrentIndex(ongletInit)
         self.ui.exm_onglets.setCurrentIndex(ongletInit)
-#         self._panneaux = [] 
 
 
     def createWidgets(self):
     def createWidgets(self):
         """construction de l'interface"""
         """construction de l'interface"""
@@ -82,7 +81,9 @@ class ExplorateurMateriel(QDialog):
         self.ui.exm_ok.setText(QString("Importer ({})".format(len(self._selection))))
         self.ui.exm_ok.setText(QString("Importer ({})".format(len(self._selection))))
 
 
     def retirerPanneau(self, panneau):
     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)
         layout.removeWidget(panneau)
         panneau.setParent(None)
         panneau.setParent(None)
         layout.update()
         layout.update()
@@ -91,7 +92,6 @@ class ExplorateurMateriel(QDialog):
         filtreNom = self.ui.exm_filtreNom.text()
         filtreNom = self.ui.exm_filtreNom.text()
         self.emit(SIGNAL("majFiltre(QString)"), filtreNom)
         self.emit(SIGNAL("majFiltre(QString)"), filtreNom)
 
 
-
     def initLayout(self):
     def initLayout(self):
         for layout in [self.ui.exm_layout_tr, self.ui.exm_layout_cb, self.ui.exm_layout_dc]:
         for layout in [self.ui.exm_layout_tr, self.ui.exm_layout_cb, self.ui.exm_layout_dc]:
             layout.setColumnMinimumWidth(0, 140)
             layout.setColumnMinimumWidth(0, 140)
@@ -195,6 +195,7 @@ class PanneauMateriel(QFrame):
         
         
 if __name__ == "__main__":
 if __name__ == "__main__":
     s = Session()
     s = Session()
+    print "exploMat"
     arg = ["DMonde", s.idS()]
     arg = ["DMonde", s.idS()]
     app = QApplication(arg)
     app = QApplication(arg)
     listeMat = importerMateriel()
     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.EcranEditionCombattant import EcranEditionCombattant
 from lib.EcranEditionDecor import EcranEditionDecor
 from lib.EcranEditionDecor import EcranEditionDecor
 from lib.EcranEditionTerrain import EcranEditionTerrain
 from lib.EcranEditionTerrain import EcranEditionTerrain
-from lib.explorateurMat import ExplorateurMateriel, importerMateriel
+from lib.explorateurMat import importerMateriel
 from lib.mat import chargerMat
 from lib.mat import chargerMat
 
 
 
 
@@ -71,20 +71,19 @@ class GestionMateriel(object):
             self.prog.plateau.plateauModeCreation()
             self.prog.plateau.plateauModeCreation()
 
 
     def importerTr(self):
     def importerTr(self):
-        self.importer("tr")
+        self.importer(0)
         
         
     def importerDc(self):
     def importerDc(self):
-        self.importer("dc")
+        self.importer(1)
         
         
     def importerCb(self):
     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)
         listeMat = importerMateriel(ongletInit)
         for idMat in listeMat:
         for idMat in listeMat:
             self.ajouterMat(idMat)
             self.ajouterMat(idMat)
+        
         self.majTables()
         self.majTables()
     
     
     def majTables(self):
     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
 #from __future__ import unicode_literals
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 """ensemble des widgets surchargés"""
 """ensemble des widgets surchargés"""
-import os
-
 from PyQt4.QtCore import QString, SIGNAL, QVariant, QSize, pyqtSignal, \
 from PyQt4.QtCore import QString, SIGNAL, QVariant, QSize, pyqtSignal, \
     QPersistentModelIndex, Qt, QEvent, QModelIndex
     QPersistentModelIndex, Qt, QEvent, QModelIndex
 from PyQt4.QtGui import QLabel, QPixmap, QTextEdit, QLineEdit, QGraphicsView, \
 from PyQt4.QtGui import QLabel, QPixmap, QTextEdit, QLineEdit, QGraphicsView, \
     QComboBox, QSpinBox, QTabWidget, QTableWidget, QTableWidgetItem, \
     QComboBox, QSpinBox, QTabWidget, QTableWidget, QTableWidgetItem, \
     QItemSelectionModel, QIcon, QColor, QBrush, QGroupBox, QFrame
     QItemSelectionModel, QIcon, QColor, QBrush, QGroupBox, QFrame
 
 
-from lib.outilsSvg import afficheSvg
-
-try:        
-    import lib.regles as regles
-except:
-    try:
-        import regles as regles
-    except:
-        print "dm: impossible de charger regles"
 
 
 class Biblio():
 class Biblio():
     """cette classe fournit une liste spreciale"""
     """cette classe fournit une liste spreciale"""
@@ -229,6 +218,14 @@ class DmTableWidget(QTableWidget):
         except:
         except:
             pass
             pass
         return retour
         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):
     def chercherLigne(self, colonne, valeur):
         """cherche la valeur dans la colonne demandee
         """cherche la valeur dans la colonne demandee
@@ -270,7 +267,7 @@ class DmTableWidget(QTableWidget):
         return self.currentRow()
         return self.currentRow()
 
 
     def selectionner(self, ligne, colonne):
     def selectionner(self, ligne, colonne):
-        self.setCurrentCell(ligne, colonne, QItemSelectionModel.Select)
+        self.setCurrentCell(ligne, colonne, QItemSelectionModel.ClearAndSelect)
 
 
 
 
 class DmTableMat(DmTableWidget):
 class DmTableMat(DmTableWidget):

+ 129 - 104
lib/ui/ecran_principal.py

@@ -2,7 +2,7 @@
 
 
 # Form implementation generated from reading ui file 'principal.ui'
 # Form implementation generated from reading ui file 'principal.ui'
 #
 #
-# Created: Thu Sep 10 11:41:36 2015
+# Created: Fri Sep 11 13:23:09 2015
 #      by: PyQt4 UI code generator 4.10.4
 #      by: PyQt4 UI code generator 4.10.4
 #
 #
 # WARNING! All changes made in this file will be lost!
 # WARNING! All changes made in this file will be lost!
@@ -170,7 +170,7 @@ class Ui_principal(object):
         self.panneauInfosPlateau.setSpacing(0)
         self.panneauInfosPlateau.setSpacing(0)
         self.panneauInfosPlateau.setMargin(6)
         self.panneauInfosPlateau.setMargin(6)
         self.panneauInfosPlateau.setObjectName(_fromUtf8("panneauInfosPlateau"))
         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.setMinimumSize(QtCore.QSize(80, 208))
         self.inf_listeOrdreJeu.setMaximumSize(QtCore.QSize(110, 16777215))
         self.inf_listeOrdreJeu.setMaximumSize(QtCore.QSize(110, 16777215))
         palette = QtGui.QPalette()
         palette = QtGui.QPalette()
@@ -678,31 +678,37 @@ class Ui_principal(object):
         self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
         self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
         self.cp_importTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_importTerrain = 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.cp_importTerrain.setObjectName(_fromUtf8("cp_importTerrain"))
         self.horizontalLayout_4.addWidget(self.cp_importTerrain)
         self.horizontalLayout_4.addWidget(self.cp_importTerrain)
         spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         self.horizontalLayout_4.addItem(spacerItem2)
         self.horizontalLayout_4.addItem(spacerItem2)
         self.cp_nouveauTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_nouveauTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_nouveauTerrain.setText(_fromUtf8(""))
         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.cp_nouveauTerrain.setObjectName(_fromUtf8("cp_nouveauTerrain"))
         self.horizontalLayout_4.addWidget(self.cp_nouveauTerrain)
         self.horizontalLayout_4.addWidget(self.cp_nouveauTerrain)
         self.cp_editerTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_editerTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_editerTerrain.setText(_fromUtf8(""))
         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.cp_editerTerrain.setObjectName(_fromUtf8("cp_editerTerrain"))
         self.horizontalLayout_4.addWidget(self.cp_editerTerrain)
         self.horizontalLayout_4.addWidget(self.cp_editerTerrain)
         self.cp_retirerTerrain = QtGui.QToolButton(self.cp_afficherTerrains)
         self.cp_retirerTerrain = 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.cp_retirerTerrain.setObjectName(_fromUtf8("cp_retirerTerrain"))
         self.horizontalLayout_4.addWidget(self.cp_retirerTerrain)
         self.horizontalLayout_4.addWidget(self.cp_retirerTerrain)
         self.verticalLayout_4.addLayout(self.horizontalLayout_4)
         self.verticalLayout_4.addLayout(self.horizontalLayout_4)
-        icon16 = QtGui.QIcon()
-        icon16.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 = QtGui.QWidget()
         self.cp_afficherDecors.setObjectName(_fromUtf8("cp_afficherDecors"))
         self.cp_afficherDecors.setObjectName(_fromUtf8("cp_afficherDecors"))
         self.verticalLayout_7 = QtGui.QVBoxLayout(self.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.setContentsMargins(-1, 0, -1, -1)
         self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7"))
         self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7"))
         self.cp_importDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_importDecor = QtGui.QToolButton(self.cp_afficherDecors)
+        self.cp_importDecor.setIcon(icon14)
         self.cp_importDecor.setObjectName(_fromUtf8("cp_importDecor"))
         self.cp_importDecor.setObjectName(_fromUtf8("cp_importDecor"))
         self.horizontalLayout_7.addWidget(self.cp_importDecor)
         self.horizontalLayout_7.addWidget(self.cp_importDecor)
         spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         self.horizontalLayout_7.addItem(spacerItem3)
         self.horizontalLayout_7.addItem(spacerItem3)
         self.cp_nouveauDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_nouveauDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_nouveauDecor.setText(_fromUtf8(""))
         self.cp_nouveauDecor.setText(_fromUtf8(""))
-        self.cp_nouveauDecor.setIcon(icon14)
+        self.cp_nouveauDecor.setIcon(icon15)
         self.cp_nouveauDecor.setObjectName(_fromUtf8("cp_nouveauDecor"))
         self.cp_nouveauDecor.setObjectName(_fromUtf8("cp_nouveauDecor"))
         self.horizontalLayout_7.addWidget(self.cp_nouveauDecor)
         self.horizontalLayout_7.addWidget(self.cp_nouveauDecor)
         self.cp_editerDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_editerDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_editerDecor.setText(_fromUtf8(""))
         self.cp_editerDecor.setText(_fromUtf8(""))
-        self.cp_editerDecor.setIcon(icon15)
+        self.cp_editerDecor.setIcon(icon16)
         self.cp_editerDecor.setObjectName(_fromUtf8("cp_editerDecor"))
         self.cp_editerDecor.setObjectName(_fromUtf8("cp_editerDecor"))
         self.horizontalLayout_7.addWidget(self.cp_editerDecor)
         self.horizontalLayout_7.addWidget(self.cp_editerDecor)
         self.cp_retirerDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_retirerDecor = QtGui.QToolButton(self.cp_afficherDecors)
         self.cp_retirerDecor.setText(_fromUtf8(""))
         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.setIcon(icon17)
         self.cp_retirerDecor.setObjectName(_fromUtf8("cp_retirerDecor"))
         self.cp_retirerDecor.setObjectName(_fromUtf8("cp_retirerDecor"))
         self.horizontalLayout_7.addWidget(self.cp_retirerDecor)
         self.horizontalLayout_7.addWidget(self.cp_retirerDecor)
         self.verticalLayout_7.addLayout(self.horizontalLayout_7)
         self.verticalLayout_7.addLayout(self.horizontalLayout_7)
-        icon18 = QtGui.QIcon()
-        icon18.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 = QtGui.QWidget()
         self.cp_afficherCreatures.setObjectName(_fromUtf8("cp_afficherCreatures"))
         self.cp_afficherCreatures.setObjectName(_fromUtf8("cp_afficherCreatures"))
         self.verticalLayout_6 = QtGui.QVBoxLayout(self.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 = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_importCombattant.setMinimumSize(QtCore.QSize(23, 22))
         self.cp_importCombattant.setMinimumSize(QtCore.QSize(23, 22))
         self.cp_importCombattant.setMaximumSize(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.cp_importCombattant.setObjectName(_fromUtf8("cp_importCombattant"))
         self.horizontalLayout_8.addWidget(self.cp_importCombattant)
         self.horizontalLayout_8.addWidget(self.cp_importCombattant)
         spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
         self.horizontalLayout_8.addItem(spacerItem4)
         self.horizontalLayout_8.addItem(spacerItem4)
         self.cp_nouveauCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_nouveauCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_nouveauCombattant.setText(_fromUtf8(""))
         self.cp_nouveauCombattant.setText(_fromUtf8(""))
-        self.cp_nouveauCombattant.setIcon(icon14)
+        self.cp_nouveauCombattant.setIcon(icon15)
         self.cp_nouveauCombattant.setObjectName(_fromUtf8("cp_nouveauCombattant"))
         self.cp_nouveauCombattant.setObjectName(_fromUtf8("cp_nouveauCombattant"))
         self.horizontalLayout_8.addWidget(self.cp_nouveauCombattant)
         self.horizontalLayout_8.addWidget(self.cp_nouveauCombattant)
         self.cp_editerCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_editerCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_editerCombattant.setText(_fromUtf8(""))
         self.cp_editerCombattant.setText(_fromUtf8(""))
-        self.cp_editerCombattant.setIcon(icon15)
+        self.cp_editerCombattant.setIcon(icon16)
         self.cp_editerCombattant.setObjectName(_fromUtf8("cp_editerCombattant"))
         self.cp_editerCombattant.setObjectName(_fromUtf8("cp_editerCombattant"))
         self.horizontalLayout_8.addWidget(self.cp_editerCombattant)
         self.horizontalLayout_8.addWidget(self.cp_editerCombattant)
         self.cp_retirerCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
         self.cp_retirerCombattant = QtGui.QToolButton(self.cp_afficherCreatures)
@@ -802,9 +808,9 @@ class Ui_principal(object):
         self.cp_retirerCombattant.setObjectName(_fromUtf8("cp_retirerCombattant"))
         self.cp_retirerCombattant.setObjectName(_fromUtf8("cp_retirerCombattant"))
         self.horizontalLayout_8.addWidget(self.cp_retirerCombattant)
         self.horizontalLayout_8.addWidget(self.cp_retirerCombattant)
         self.verticalLayout_6.addLayout(self.horizontalLayout_8)
         self.verticalLayout_6.addLayout(self.horizontalLayout_8)
-        icon19 = QtGui.QIcon()
-        icon19.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.verticalLayout_3.addWidget(self.cp_ongletsListes)
         self.creationPlateau_sousPanneauBas = QtGui.QFrame(self.cp_panneau)
         self.creationPlateau_sousPanneauBas = QtGui.QFrame(self.cp_panneau)
         self.creationPlateau_sousPanneauBas.setMinimumSize(QtCore.QSize(154, 81))
         self.creationPlateau_sousPanneauBas.setMinimumSize(QtCore.QSize(154, 81))
@@ -817,66 +823,83 @@ class Ui_principal(object):
         self.gridLayout_3.setMargin(3)
         self.gridLayout_3.setMargin(3)
         self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
         self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
         self.cp_placerEntree = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
         self.cp_placerEntree = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
-        self.cp_placerEntree.setMinimumSize(QtCore.QSize(41, 31))
-        self.cp_placerEntree.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.cp_placerEntree.setObjectName(_fromUtf8("cp_placerEntree"))
         self.gridLayout_3.addWidget(self.cp_placerEntree, 2, 1, 1, 1)
         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 = 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.cp_placerSortie.setObjectName(_fromUtf8("cp_placerSortie"))
         self.gridLayout_3.addWidget(self.cp_placerSortie, 2, 2, 1, 1)
         self.gridLayout_3.addWidget(self.cp_placerSortie, 2, 2, 1, 1)
         self.cp_effets = QtGui.QComboBox(self.creationPlateau_sousPanneauBas)
         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"))
         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(""))
         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(""))
         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(""))
         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.setItemText(3, _fromUtf8(""))
-        self.cp_effets.addItem(icon17, _fromUtf8(""))
+        self.cp_effets.addItem(icon23, _fromUtf8(""))
         self.cp_effets.setItemText(4, _fromUtf8(""))
         self.cp_effets.setItemText(4, _fromUtf8(""))
         self.gridLayout_3.addWidget(self.cp_effets, 0, 1, 1, 1)
         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 = 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.cp_defPlacement.setObjectName(_fromUtf8("cp_defPlacement"))
         self.gridLayout_3.addWidget(self.cp_defPlacement, 2, 4, 1, 1)
         self.gridLayout_3.addWidget(self.cp_defPlacement, 2, 4, 1, 1)
         self.cp_placerCache = QtGui.QToolButton(self.creationPlateau_sousPanneauBas)
         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.cp_placerCache.setObjectName(_fromUtf8("cp_placerCache"))
         self.gridLayout_3.addWidget(self.cp_placerCache, 0, 2, 1, 1)
         self.gridLayout_3.addWidget(self.cp_placerCache, 0, 2, 1, 1)
         self.verticalLayout_3.addWidget(self.creationPlateau_sousPanneauBas)
         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.setMinimumSize(QtCore.QSize(0, 0))
         self.pi_deplacement.setMaximumSize(QtCore.QSize(100, 100))
         self.pi_deplacement.setMaximumSize(QtCore.QSize(100, 100))
         self.pi_deplacement.setText(_fromUtf8(""))
         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_deplacement.setObjectName(_fromUtf8("pi_deplacement"))
         self.pi_formeAttaqueZone = QtGui.QComboBox(self.pi_actions)
         self.pi_formeAttaqueZone = QtGui.QComboBox(self.pi_actions)
         self.pi_formeAttaqueZone.setGeometry(QtCore.QRect(50, 91, 41, 29))
         self.pi_formeAttaqueZone.setGeometry(QtCore.QRect(50, 91, 41, 29))
         self.pi_formeAttaqueZone.setObjectName(_fromUtf8("pi_formeAttaqueZone"))
         self.pi_formeAttaqueZone.setObjectName(_fromUtf8("pi_formeAttaqueZone"))
         self.pi_formeAttaqueZone.addItem(icon11, _fromUtf8(""))
         self.pi_formeAttaqueZone.addItem(icon11, _fromUtf8(""))
         self.pi_formeAttaqueZone.setItemText(0, _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(""))
         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_formeAttaqueZone.setItemText(2, _fromUtf8(""))
         self.pi_attaqueCac = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueCac = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueCac.setGeometry(QtCore.QRect(10, 50, 61, 31))
         self.pi_attaqueCac.setGeometry(QtCore.QRect(10, 50, 61, 31))
         self.pi_attaqueCac.setMinimumSize(QtCore.QSize(0, 0))
         self.pi_attaqueCac.setMinimumSize(QtCore.QSize(0, 0))
         self.pi_attaqueCac.setMaximumSize(QtCore.QSize(100, 100))
         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_attaqueCac.setObjectName(_fromUtf8("pi_attaqueCac"))
         self.pi_vol = QtGui.QToolButton(self.pi_actions)
         self.pi_vol = QtGui.QToolButton(self.pi_actions)
         self.pi_vol.setGeometry(QtCore.QRect(80, 10, 61, 31))
         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_vol.setObjectName(_fromUtf8("pi_vol"))
         self.pi_attaqueDist = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueDist = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueDist.setGeometry(QtCore.QRect(80, 50, 61, 31))
         self.pi_attaqueDist.setGeometry(QtCore.QRect(80, 50, 61, 31))
         self.pi_attaqueDist.setMinimumSize(QtCore.QSize(0, 0))
         self.pi_attaqueDist.setMinimumSize(QtCore.QSize(0, 0))
         self.pi_attaqueDist.setMaximumSize(QtCore.QSize(100, 100))
         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_attaqueDist.setObjectName(_fromUtf8("pi_attaqueDist"))
         self.pi_attaqueZone = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueZone = QtGui.QToolButton(self.pi_actions)
         self.pi_attaqueZone.setGeometry(QtCore.QRect(10, 90, 31, 31))
         self.pi_attaqueZone.setGeometry(QtCore.QRect(10, 90, 31, 31))
         self.pi_attaqueZone.setText(_fromUtf8(""))
         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.pi_attaqueZone.setObjectName(_fromUtf8("pi_attaqueZone"))
         self.verticalLayout_10.addWidget(self.pi_actions)
         self.verticalLayout_10.addWidget(self.pi_actions)
         self.pi_ongletsListes = QtGui.QTabWidget(self.pi_panneau)
         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.horizontalHeader().setDefaultSectionSize(50)
         self.pi_listeAttributs.verticalHeader().setVisible(False)
         self.pi_listeAttributs.verticalHeader().setVisible(False)
         self.verticalLayout_9.addWidget(self.pi_listeAttributs)
         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 = QtGui.QWidget()
         self.pi_afficherAttaques.setObjectName(_fromUtf8("pi_afficherAttaques"))
         self.pi_afficherAttaques.setObjectName(_fromUtf8("pi_afficherAttaques"))
         self.pi_panneauAttaqueEC = QtGui.QGroupBox(self.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().setVisible(False)
         self.pi_listeAttaques.horizontalHeader().setDefaultSectionSize(50)
         self.pi_listeAttaques.horizontalHeader().setDefaultSectionSize(50)
         self.pi_listeAttaques.verticalHeader().setVisible(False)
         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 = QtGui.QWidget()
         self.pi_afficherInventaire.setObjectName(_fromUtf8("pi_afficherInventaire"))
         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 = QtGui.QWidget()
         self.pi_afficherNotes.setObjectName(_fromUtf8("pi_afficherNotes"))
         self.pi_afficherNotes.setObjectName(_fromUtf8("pi_afficherNotes"))
         self.verticalLayout_8 = QtGui.QVBoxLayout(self.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.setDocumentTitle(_fromUtf8(""))
         self.pi_notes.setObjectName(_fromUtf8("pi_notes"))
         self.pi_notes.setObjectName(_fromUtf8("pi_notes"))
         self.verticalLayout_8.addWidget(self.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.verticalLayout_10.addWidget(self.pi_ongletsListes)
         self.cbt_panneauDroite.addWidget(self.cbt_panneauDroite2)
         self.cbt_panneauDroite.addWidget(self.cbt_panneauDroite2)
         self.cbt_panneauDroite3 = QtGui.QWidget()
         self.cbt_panneauDroite3 = QtGui.QWidget()
@@ -1360,9 +1383,9 @@ class Ui_principal(object):
         self.grp_nouveauPj.setMinimumSize(QtCore.QSize(50, 50))
         self.grp_nouveauPj.setMinimumSize(QtCore.QSize(50, 50))
         self.grp_nouveauPj.setMaximumSize(QtCore.QSize(50, 50))
         self.grp_nouveauPj.setMaximumSize(QtCore.QSize(50, 50))
         self.grp_nouveauPj.setText(_fromUtf8(""))
         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.setIconSize(QtCore.QSize(24, 24))
         self.grp_nouveauPj.setObjectName(_fromUtf8("grp_nouveauPj"))
         self.grp_nouveauPj.setObjectName(_fromUtf8("grp_nouveauPj"))
         self.verticalLayout_12.addWidget(self.grp_nouveauPj)
         self.verticalLayout_12.addWidget(self.grp_nouveauPj)
@@ -1608,7 +1631,7 @@ class Ui_principal(object):
         self.cbt_panneauGauche.setCurrentIndex(1)
         self.cbt_panneauGauche.setCurrentIndex(1)
         self.cbt_panneauBas.setCurrentIndex(1)
         self.cbt_panneauBas.setCurrentIndex(1)
         self.cbt_panneauDroite.setCurrentIndex(1)
         self.cbt_panneauDroite.setCurrentIndex(1)
-        self.cp_ongletsListes.setCurrentIndex(0)
+        self.cp_ongletsListes.setCurrentIndex(1)
         self.pi_ongletsListes.setCurrentIndex(0)
         self.pi_ongletsListes.setCurrentIndex(0)
         self.tabStatutAppli.setCurrentIndex(2)
         self.tabStatutAppli.setCurrentIndex(2)
         QtCore.QMetaObject.connectSlotsByName(principal)
         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_ongletsListes.setTabToolTip(self.cp_ongletsListes.indexOf(self.cp_afficherCreatures), _translate("principal", "Afficher la liste des créatures", None))
         self.cp_placerEntree.setToolTip(_translate("principal", "Placer la/les entrée(s)", None))
         self.cp_placerEntree.setToolTip(_translate("principal", "Placer la/les entrée(s)", None))
         self.cp_placerEntree.setText(_translate("principal", "...", None))
         self.cp_placerEntree.setText(_translate("principal", "...", None))
+        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.setToolTip(_translate("principal", "Placer la/les sortie(s)", None))
         self.cp_placerSortie.setText(_translate("principal", "...", None))
         self.cp_placerSortie.setText(_translate("principal", "...", None))
         self.cp_effets.setToolTip(_translate("principal", "Effets spéciaux", 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.setToolTip(_translate("principal", "Définir la zone de placement des joueurs", None))
         self.cp_defPlacement.setText(_translate("principal", "...", None))
         self.cp_defPlacement.setText(_translate("principal", "...", None))
         self.cp_placerCache.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.actionParam_tres.setText(_translate("principal", "Paramètres", None))
         self.actionLexique.setText(_translate("principal", "Lexique", 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
 import ressource_rc
 
 
 if __name__ == "__main__":
 if __name__ == "__main__":

+ 1 - 1
lib/ui/explorateurMateriels.ui

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

+ 80 - 29
lib/ui/principal.ui

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

+ 2 - 0
lib/ui/ressource.qrc

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

二进制
lib/ui/ressource/ninja_16.png


二进制
lib/ui/ressource/piege_16.png


+ 130 - 37
lib/ui/ressource_rc.py

@@ -2,7 +2,7 @@
 
 
 # Resource object code
 # 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)
 #      by: The Resource Compiler for PyQt (Qt v4.8.5)
 #
 #
 # WARNING! All changes made in this file will be lost!
 # WARNING! All changes made in this file will be lost!
@@ -2405,6 +2405,47 @@ qt_resource_data = "\
 \x0d\x79\x68\x6f\x92\x24\x89\xc4\x21\x97\x5c\x71\xcb\x44\x92\x24\
 \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\
 \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\
 \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\
 \x00\x00\x00\xb0\
 \x89\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -2447,6 +2488,28 @@ qt_resource_data = "\
 \xe8\x70\x71\x80\x26\x5f\x62\x03\x91\x81\x58\x83\xc8\x06\x30\x83\
 \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\
 \x88\x02\x00\x97\xce\x76\x92\x56\x29\x88\xcb\x00\x00\x00\x00\x49\
 \x45\x4e\x44\xae\x42\x60\x82\
 \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\
 \x00\x00\x01\x70\
 \x89\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -2912,6 +2975,16 @@ qt_resource_data = "\
 \x25\xeb\x3b\x44\x75\x09\x50\xec\x12\x7f\x24\x0f\xbd\xf8\x80\xf7\
 \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\
 \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\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\
 \x00\x00\x02\x03\
 \x89\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -4710,6 +4783,14 @@ qt_resource_name = "\
 \x02\x10\x3f\x87\
 \x02\x10\x3f\x87\
 \x00\x70\
 \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\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\
 \x00\x0a\
 \x02\x44\x46\x67\
 \x02\x44\x46\x67\
 \x00\x61\
 \x00\x61\
@@ -4723,6 +4804,10 @@ qt_resource_name = "\
 \x06\x9a\x09\xc7\
 \x06\x9a\x09\xc7\
 \x00\x73\
 \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\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\
 \x00\x09\
 \x02\x49\x82\x27\
 \x02\x49\x82\x27\
 \x00\x64\
 \x00\x64\
@@ -4813,6 +4898,10 @@ qt_resource_name = "\
 \x00\x62\
 \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\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\
 \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\
 \x0f\x65\x26\x27\
 \x00\x62\
 \x00\x62\
 \x00\x6f\x00\x6d\x00\x62\x00\x65\x00\x5f\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \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\x38\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0a\
 \x00\x00\x00\x22\x00\x02\x00\x00\x00\x01\x00\x00\x00\x06\
 \x00\x00\x00\x22\x00\x02\x00\x00\x00\x01\x00\x00\x00\x06\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x03\x00\x00\x00\x07\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x03\x00\x00\x00\x07\
-\x00\x00\x0c\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\x00\x42\x00\x02\x00\x00\x00\x24\x00\x00\x00\x0b\
 \x00\x00\x01\xfe\x00\x00\x00\x4a\x00\x25\x00\x00\x20\xd7\
 \x00\x00\x01\xfe\x00\x00\x00\x4a\x00\x25\x00\x00\x20\xd7\
 \x00\x00\x00\x5a\x00\x00\x00\x4a\x00\x25\x00\x00\x00\x00\
 \x00\x00\x00\x5a\x00\x00\x00\x4a\x00\x25\x00\x00\x00\x00\
@@ -4908,13 +4997,13 @@ qt_resource_struct = "\
 \x00\x00\x00\xec\x00\x00\x00\x4a\x00\x25\x00\x00\x0a\xeb\
 \x00\x00\x00\xec\x00\x00\x00\x4a\x00\x25\x00\x00\x0a\xeb\
 \x00\x00\x01\x6a\x00\x00\x00\x4a\x00\x25\x00\x00\x14\xfe\
 \x00\x00\x01\x6a\x00\x00\x00\x4a\x00\x25\x00\x00\x14\xfe\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x06\x00\x00\x00\x30\
 \x00\x00\x00\x42\x00\x02\x00\x00\x00\x06\x00\x00\x00\x30\
-\x00\x00\x0c\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\x08\x20\x00\x00\x00\x4a\x00\x25\x00\x00\x82\xa3\
 \x00\x00\x05\xea\x00\x00\x00\x4a\x00\x25\x00\x00\x6e\x83\
 \x00\x00\x05\xea\x00\x00\x00\x4a\x00\x25\x00\x00\x6e\x83\
 \x00\x00\x07\x3e\x00\x00\x00\x4a\x00\x25\x00\x00\x7a\xca\
 \x00\x00\x07\x3e\x00\x00\x00\x4a\x00\x25\x00\x00\x7a\xca\
@@ -4922,52 +5011,56 @@ qt_resource_struct = "\
 \x00\x00\x07\xb0\x00\x00\x00\x4a\x00\x25\x00\x00\x7e\xff\
 \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\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\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\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\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\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\x05\xac\x00\x00\x00\x4a\x00\x25\x00\x00\x6c\x6f\
 \x00\x00\x08\x82\x00\x00\x00\x4a\x00\x25\x00\x00\x85\xe9\
 \x00\x00\x08\x82\x00\x00\x00\x4a\x00\x25\x00\x00\x85\xe9\
-\x00\x00\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\x08\xa4\x00\x00\x00\x4a\x00\x25\x00\x00\x87\x8b\
 \x00\x00\x07\x00\x00\x00\x00\x4a\x00\x25\x00\x00\x78\x41\
 \x00\x00\x07\x00\x00\x00\x00\x4a\x00\x25\x00\x00\x78\x41\
 \x00\x00\x08\xc4\x00\x00\x00\x4a\x00\x25\x00\x00\x89\xb7\
 \x00\x00\x08\xc4\x00\x00\x00\x4a\x00\x25\x00\x00\x89\xb7\
-\x00\x00\x09\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\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\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\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\x08\x44\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x12\
 \x00\x00\x05\x28\x00\x00\x00\x4a\x00\x25\x00\x00\x67\x1a\
 \x00\x00\x05\x28\x00\x00\x00\x4a\x00\x25\x00\x00\x67\x1a\
 \x00\x00\x06\xb2\x00\x00\x00\x4a\x00\x25\x00\x00\x76\x50\
 \x00\x00\x06\xb2\x00\x00\x00\x4a\x00\x25\x00\x00\x76\x50\
-\x00\x00\x09\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\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\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\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\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\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\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\x07\x6c\x00\x00\x00\x4a\x00\x25\x00\x00\x7b\xe8\
 \x00\x00\x08\x64\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x9c\
 \x00\x00\x08\x64\x00\x00\x00\x4a\x00\x25\x00\x00\x84\x9c\
 "
 "

二进制
mat/defaut/cbpjko6PKn.dm


二进制
mat/defaut/cbpjlhJRJf.dm


二进制
mat/defaut/cbpjlhKTq6.dm


二进制
mat/defaut/dcpjlhHrA6.dm


二进制
mat/defaut/dcpjlhJaf9.dm


二进制
mat/defaut/trpjlhF3od.dm


二进制
mat/defaut/trpjlhGeI8.dm


二进制
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.

二进制
parties/defaut/cbt/plpjko6FCR.dm


二进制
parties/defaut/cbt/plpjko8it5.dm


二进制
parties/defaut/cbt/plpjloIyzj.dm


二进制
parties/defaut/grp/cbpjjkaliQ.dm


二进制
parties/defaut/grp/cbpjjo2fVX.dm


二进制
parties/defaut/grp/cbpjjo3PbS.dm


二进制
parties/defaut/grp/cbpjjo3cGS.dm


二进制
parties/defaut/grp/cbpjjoYIe3.dm


二进制
parties/defaut/grp/cbpjjovwvD.dm


二进制
parties/defaut/grp/cbpjjjWTlX.dm → parties/defaut/grp/pjpjlnfAxO.dm


二进制
parties/defaut/grp/pjpjlngiGG.dm


二进制
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.