ソースを参照

Manipulation des entrées et sorties opérationelle

unknown 10 年 前
コミット
590a750876
5 ファイル変更76 行追加43 行削除
  1. 28 23
      lib/EntreeSortie.py
  2. 46 16
      lib/Modes.py
  3. 2 4
      lib/Plateau.py
  4. BIN
      parties/Partie1/svg/1.p
  5. BIN
      parties/Partie1/svg/infos_sauvegarde

+ 28 - 23
lib/EntreeSortie.py

@@ -19,7 +19,8 @@ class EntreeSortie(QGraphicsPolygonItem):
         self.nbRotations = 0
         self.prepareGeometryChange()
         self.setFlag(QGraphicsItem.ItemIsFocusable)
-
+        self.estPositionne = False
+        
     def __getstate__(self):
         state = {key:value for key, value in self.__dict__.items() if key in ["entreeSortie", "position", "nbRotations"]}
         return (state)
@@ -43,12 +44,29 @@ class EntreeSortie(QGraphicsPolygonItem):
             self.setBrush(couleur)
             self.setPen(QPen(couleur))
         self.setPolygon(polygone)
-        self.setOpacity(0.5)
         self.setTransformOriginPoint(0,0)
-        self.plateau.fenetre.ui.cbt_vue.fitInView(self.plateau.sceneRect(), Qt.KeepAspectRatio)
         self.plateau.addItem(self)
-        self.estPositionne = False
         
+    def recreer(self, plateau):
+        """recreation et repositionnement dans le cadre d'un chargement du plateau"""
+        self.plateau = plateau
+        super(EntreeSortie, self).__init__()
+        self.creerForme()
+        self.setPos(self.position)
+        self.setRotation(self.nbRotations*90)
+        self.positionner()
+
+    def supprimer(self):
+        self.prepareGeometryChange()
+        self.plateau.removeItem(self)
+        self.plateau = None
+
+    def saisir(self):
+        """le polygone va suivre la souris et etre semi transparent
+        jusqu'au prochain clic sur le plateau"""
+        self.setOpacity(0.5)
+        self.estPositionne = False        
+
     def majProjection(self, position = None):
         """met a jour la projection de la position de l'objet"""
         if position != None:
@@ -61,23 +79,10 @@ class EntreeSortie(QGraphicsPolygonItem):
         self.setOpacity(1)
         self.estPositionne = True
 
-    def recreer(self, plateau):
-        """recreation et repositionnement dans le cadre d'un chargement du plateau"""
-        self.plateau = plateau
-        super(EntreeSortie, self).__init__()
-        self.creerForme()
-        self.setPos(self.position)
-        self.setRotation(self.nbRotations*90)
-        self.setOpacity(1)
-        self.estPositionne = True
-    
     def mousePressEvent(self, event):
-        event.ignore()
-        #a revoir
-        
-##        if event.button() == 1:
-##            if self.plateau.modeActif != Modes.EntreesSorties:
-##                self.estPositionne = False
-##                self.setOpacity(0.5)
-##                self.plateau.activerMode(Modes.EntreesSorties, self)
-##                event.accept()
+        if event.button() == 1:
+            if self.estPositionne:
+                self.plateau.modeActif.clic_es(self)
+                event.accept()
+            else:
+                event.ignore()

+ 46 - 16
lib/Modes.py

@@ -68,6 +68,10 @@ class ModeBase(object):
     def clic_case(self, coord):
         pass
 
+    def clic_es(self, es):
+        #clic sur une entree/sortie
+        pass
+        
     #double clic gauche
     def doubleClic_combattant(self, num):
         pass
@@ -166,7 +170,10 @@ class StandardCp(ModeBaseCp):
         
     def clic_decor(self, num):
         self.plateau.activerMode(DeplacementPion, num)
-        
+
+    def clic_es(self, es):
+        self.plateau.activerMode(EditionEntreeSortie, es)
+ 
 class MajCases(ModeBaseCp):
     """mode de mise a jour des cases (terrain, couleur, effet special)"""
     def __init__(self, plateau):
@@ -299,43 +306,41 @@ class EditerCaches(ModeBaseCp):
                     self.plateau.nouveauCache(self.plateau.pinceau.selection())
                 self.plateau.activerMode(StandardCp)
 
-class EntreesSorties(ModeBaseCp):
-    """mode de definition deentrees et sorties du plateau"""
+class EntreeSortieBase(ModeBaseCp):
+    """mode de base de la gestion des entrees et sorties du plateau"""
     def __init__(self, plateau):
-        super(EntreesSorties, self).__init__(plateau)
+        super(EntreeSortieBase, self).__init__(plateau)
         self._sourceCurseur = ":/interface/16/ressource/pinceau_16.png"
         self._focus = True
 
     def activerCurseur(self):
-        super(EntreesSorties, self).activerCurseur()
+        super(EntreeSortieBase, self).activerCurseur()
 
     def activer(self, param):
         self.es = param
-        self.es.creerForme()
-        super(EntreesSorties, self).activer()
+        self.es.saisir()
+        super(EntreeSortieBase, self).activer()
 
     def desactiver(self):
         if not self.es.estPositionne:
             self.es.prepareGeometryChange()
             self.es.plateau = None
             self.plateau.removeItem(self.es)
-        super(EntreesSorties, self).desactiver()
+            if self.es in self.plateau.entreesSorties:
+                self.plateau.entreesSorties.remove(self.es) 
+        super(EntreeSortieBase, self).desactiver()
         
     def mouvementSouris(self, event):
         if event.buttons() != Qt.LeftButton:
             if not self.es.estPositionne:
                 self.es.majProjection(event.scenePos())
 
-    def clicGauche(self, event):
-        if not event.isAccepted():
-            self.es.positionner()
-            self.plateau.entreesSorties.append(self.es)
-            self.desactiver()
-
     def toucheClavier(self, event):
         if event.key() == Qt.Key_Delete:
-            #supprimer l'es
-            self.desactiver()
+            self.es.supprimer()
+            if self.es in self.plateau.entreesSorties:
+                self.plateau.entreesSorties.remove(self.es)            
+            self.plateau.activerMode(StandardCp)
         elif event.key() == Qt.Key_Right:
             self.es.nbRotations += 1
             self.es.majProjection()   
@@ -343,6 +348,31 @@ class EntreesSorties(ModeBaseCp):
             self.es.nbRotations -= 1
             self.es.majProjection()    
 
+class CreationEntreeSortie(EntreeSortieBase):
+    """mode de creation des entrees / sorties"""
+    def __init__(self, plateau):
+        super(CreationEntreeSortie, self).__init__(plateau)    
+
+    def activer(self, typeES):
+        self.plateau.fenetre.ui.cbt_vue.fitInView(self.plateau.sceneRect(), Qt.KeepAspectRatio)
+        param = EntreeSortie(self.plateau, typeES)
+        param.creerForme()
+        super(CreationEntreeSortie, self).activer(param)
+
+    def clicGauche(self, event):
+        self.es.positionner()
+        self.plateau.entreesSorties.append(self.es)
+        self.plateau.activerMode(StandardCp)
+
+class EditionEntreeSortie(EntreeSortieBase):
+    """mode d'edition des entrees / sorties"""
+    def __init__(self, plateau):
+        super(EditionEntreeSortie, self).__init__(plateau)
+
+    def clicGauche(self, event):
+        if not event.isAccepted():
+            self.es.positionner()
+            self.plateau.activerMode(StandardCp)
 
 class CreationPion(ModeBaseCp):
     """mode de creation de pions (combattant ou decor)"""

+ 2 - 4
lib/Plateau.py

@@ -665,12 +665,10 @@ class Plateau(QGraphicsScene):
             self.modeActif.nouvelleAction(action)      
 
     def majModeDefinirEntree(self):
-        entree = EntreeSortie(self, "E")
-        self.activerMode(Modes.EntreesSorties, entree)
+        self.activerMode(Modes.CreationEntreeSortie, "E")
 
     def majModeDefinirSortie(self):
-        sortie = EntreeSortie(self, "S")
-        self.activerMode(Modes.EntreesSorties, sortie)
+        self.activerMode(Modes.CreationEntreeSortie, "S")
 
     def majModeZonePlacement(self):
         self.activerMode(Modes.ZonePlacement)

BIN
parties/Partie1/svg/1.p


BIN
parties/Partie1/svg/infos_sauvegarde