Browse Source

Nouvel écran d'accueil (combats)
QGraphicsView surchargée
Module dm créé pour regrouper tous les QWidgets surchargés

unknown 10 years ago
parent
commit
20d92ddf0c

+ 2 - 0
a faire.txt

@@ -1,3 +1,5 @@
+creer une forme de dessin 'pot de peinture'
+
 reprendre l'affichage lorsqu'aucun plateau n'est chargé
 
 creer des id uniques pour les plateaux et objets ("p"+partie++chapitre+nom? ou tps en s a la creation + préfixe?)

+ 2 - 0
combat_commandes manquantes.txt

@@ -0,0 +1,2 @@
+Ajouter les PJ
+Editer/Nouveau/Importer terrains, décors, créatures

+ 0 - 0
docPlateau.txt → doc/docPlateau.txt


+ 0 - 0
legende orga.xlsx → doc/legende orga.xlsx


+ 0 - 0
orga.ep → doc/orga.ep


+ 0 - 0
restructuration.txt → doc/restructuration.txt


BIN
img/cmdVue_cbt.png


BIN
img/cmdVue_ouvrir.png


BIN
img/cmdVue_plus.png


+ 54 - 0
lib/Boucle.py

@@ -0,0 +1,54 @@
+"""une boucle donne acces a une liste et offre les fonctionnalites
+supplementaires suivantes: position actuelle, suivant, precedent,
+avancer de n ou de -n
+de plus, si on depasse le dernier element, on revient au premier (et vice-versa)"""
+
+
+class Boucle():
+    def __init__(self, liste = []):
+        self._tours = 0
+        self._pos = 0
+        self._liste = []
+
+    def liste(self):
+        return self._liste
+
+    def majListe(self, liste):
+        self._liste = liste
+
+    def position(self):
+        return self._pos
+
+    def majPosition(self, pos):
+        self._pos = pos
+        while self._pos > len(self._liste):
+            self._pos -= len(self._liste)
+            self._tours += 1
+            
+        while self._pos < 0:
+            self._pos += len(self._liste)
+            self._tours -= 1
+            
+    def actuel(self):
+        return self._liste[self._pos]
+
+    def suivant(self):
+        self.avancer(1)
+        
+    def precedent(self):
+        self.avancer(-1)    
+        
+    def avancer(self, n):
+        self.majPosition((self._pos + n))
+
+    def nbTours(self):
+        return self._tours
+
+    def premier(self):
+        return self._liste[0]
+
+    def dernier(self):
+        return self._liste[len(self._liste)-1]    
+
+
+

+ 81 - 6
lib/EcranFondPlateau.py

@@ -1,5 +1,6 @@
 #from __future__ import unicode_literals
 # -*- coding: utf-8 -*-
+"""Scene affichee dans la QGraphicsView lorsqu'aucun [combat, plateau] n'est cree"""
 from __future__ import division
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
@@ -9,12 +10,86 @@ class EcranFondPlateau(QGraphicsScene):
     def __init__(self, fenetre, parent=None):
         super(EcranFondPlateau, self).__init__()
         self.fenetre = fenetre
-        self.setBackgroundBrush(QBrush(QPixmap("img\\parchemin.jpg")))
-        police = QFont("GothicI", 16)
-        self.addText(QString.fromUtf8("Cliquer pour créer\nou ouvrir un plateau"),police)
-        #self.ecranFondPlateau.addText(QString("Charger un plateau"),police)
+        self.setSceneRect(0, 0, 0.8*self.fenetre.ui.cbt_vue.width(), 0.8*self.fenetre.ui.cbt_vue.height())
+        
+        self.connect(self.fenetre.ui.cbt_vue, SIGNAL("resizeEvent()"), self.actu)
+        self.fenetre.connect(self.fenetre.ui.cbt_vue, SIGNAL("resizeEvent()"), self.actu)
+        self.cmdEnCours = CommandeFondPlateau(self, "creer", "img\\cmdVue_cbt.png", "Afficher le dernier combat", 10, 15, 30, 60)
+        self.cmdEnCours.creer()
+        self.cmdCharger = CommandeFondPlateau(self, "charger", "img\\cmdVue_ouvrir.png", "Charger un combat", 60, 15, 30, 60)
+        self.cmdCharger.creer()
+        self.cmdCreer = CommandeFondPlateau(self, "enCours", "img\\cmdVue_plus.png", "Créer un nouveau combat", 35, 60, 30, 60)
+        self.cmdCreer.creer()
+
+        self.setSceneRect(QRectF())
+        self.fenetre.ui.cbt_vue.fitInView(self.sceneRect(), Qt.KeepAspectRatioByExpanding)
+
+            
+    def actu(self):
+        self.setSceneRect(0, 0, 0.8*self.fenetre.ui.cbt_vue.width(), 0.8*self.fenetre.ui.cbt_vue.height())
+        self.cmdEnCours.actu()
+        self.cmdCharger.actu()
+        self.cmdCreer.actu()  
+
+    def clic(self, cmdId):
+        """on a clique sur une des commandes"""
+        if cmdId == "creer":
+            self.fenetre.afficherEcranCreationPlateau()
+        elif cmdId == "charger":
+            print "charger"
+        elif cmdId == "enCours":
+            print "en cours"
+        else:
+            print "Commande invalide"
+        
+class CommandeFondPlateau(QGraphicsPixmapItem):
+    """bouton image affiche sur l'EcranFondPlateau"""
+    def __init__(self, ecran, cmdId, img = "", txt = "", x = 0, y = 0, h = 100, transparence = 0, parent=None):
+        """Attention: x, y, h sont en % des dimensions de l'ecran!! et transparence est en %"""
+        super(CommandeFondPlateau, self).__init__()
+        self.ecran = ecran
+        self.cmdId = cmdId
+        self.img = img
+        self.txt = txt
+        self.x = x
+        self.y = y
+        self.h = h
+        self.transparence = transparence
+        self.effetBleu = QGraphicsBlurEffect()
+
+    def actu(self):
+        """ajoute une image au fond de l'ecran. """
+        lEcran = self.ecran.width()
+        hEcran = self.ecran.height()
+        pix = QPixmap()
+        pix.load(self.img)
+        pix = pix.scaledToHeight(((self.h*hEcran)/100))
+        
+        self.setPixmap(pix)
+        self.setPos(((self.x*lEcran)/100), \
+                    ((self.y*hEcran)/100)  )
+        self.setOpacity(self.transparence/100)
+
+    def creer(self):
+        self.setAcceptHoverEvents(True)
+        self.setFlag(QGraphicsItem.ItemIsFocusable)
+        self.actu()
+        self.ecran.addItem(self)
 
     def mousePressEvent(self, event):
         """cree un plateau sur clic gauche"""
-        if event.button() == 1:
-            self.fenetre.afficherEcranCreationPlateau()
+        self.ecran.clic(self.cmdId)
+
+    def hoverEnterEvent(self, event):
+        self.setGraphicsEffect(QGraphicsColorizeEffect ())
+
+    def hoverLeaveEvent(self, event):
+        self.setGraphicsEffect(None)
+
+
+
+
+
+
+        
+        

+ 19 - 14
lib/Plateau.py

@@ -34,6 +34,13 @@ from lancer import jet, estJetValide
 from operator import itemgetter, attrgetter
 from math import *
 
+
+m_couleursRapides = [(255,255,255), (200,200,200), (130,130,130), (90,90,90), (15,15,15), \
+                   (0,85,0), (170,255,0), (170,255,127), (85,85,0), (85,0,0), (170,85,0), (100,50,0), \
+                   (255,255,127), (240,80,0), (85,170,255), (85,85,255), (85,0,255), (0,255,255)]
+
+
+
         
 class Plateau(QGraphicsScene):
     """plateau de jeu contenant les cases, decors et pions"""
@@ -124,7 +131,6 @@ class Plateau(QGraphicsScene):
                 c = Case(self)
                 c.creer(x, y, couleur)
                 self.cases[(x,y)] = c
-                
 
     def recreer(self, fenetre):
         self.fenetre = fenetre
@@ -300,7 +306,6 @@ class Plateau(QGraphicsScene):
 
         #mise a jour de l'interface de creation
         self.fenetre.majVisibilitePanneauxPlateau("creation")
-##        self.fenetre.ui.cbt_nomPlateau.setText(QString.fromUtf8(self.nom))
 ##        self.fenetre.ui.cbt_nomPlateau.setText(QString.fromUtf8(self.nom))
         self.majBoutonsCouleursPerso()
 ##        self.majBoutonsCaches()
@@ -326,19 +331,18 @@ class Plateau(QGraphicsScene):
 
     def majBoutonsCouleursPerso(self):
         """met a jour l'affichage des couleurs customisees dans la boite de dialogue de selection de couleur"""
-        couleursRapides = []
-##        for i in range(0,16):
-####            rgb = QColorDialog(self.fenetre.ui.cbt_vue).customColor(i)
-##            couleur = QColor(rgb)
-##            bouton = self.fenetre.ui.outilsEditionPlateau.findChild(QToolButton, "terrainCouleurPerso{}".format(i+1))
-##            if couleur.isValid():
-##                bouton.setStyleSheet("QToolButton {backGround:%s}"%(couleur.name()))
-##                self.fenetre.connect(bouton, SIGNAL("clicked()"), self.modePeintureCase_perso)
+        for i in range(0,18):
+            couleur = QColor()
+            r, g, b = m_couleursRapides[i]
+            couleur.setRgb(r, g, b)
+            bouton = self.fenetre.ui.cp_boiteCouleurs.findChild(QToolButton, "cp_couleur{}".format(i+1))
+            if couleur.isValid():
+                bouton.setStyleSheet("QToolButton {backGround:%s}"%(couleur.name()))
+                self.fenetre.connect(bouton, SIGNAL("clicked()"), self.modePeintureCase_perso)
 
     def chercherCouleur(self):
         """ouvre la boite de dialogue de selection de couleur"""
         couleur = QColorDialog(self.fenetre.ui.cbt_vue).getColor(QColor("white"), self.fenetre.ui.cbt_vue)
-        self.majBoutonsCouleursPerso()
         return couleur
 
 ##    def majBoutonsCaches(self):
@@ -540,7 +544,6 @@ class Plateau(QGraphicsScene):
         curseurBaguette = QCursor(curseurPix, curseurPix.width(), 0)
         self.fenetre.ui.cbt_vue.setCursor(curseurBaguette)
         
-        
     ############
 
     ##### activation des differents modes d'interaction avec le plateau et mises a jour des principaux parametres  #######
@@ -582,8 +585,10 @@ class Plateau(QGraphicsScene):
 
     def modePeintureCase_perso(self):
         origine = self.sender().objectName()
-        index = int(origine.replace("terrainCouleurPerso",""))-1
-        couleur = QColor(QColorDialog(self.fenetre.ui.cbt_vue).customColor(index))
+        index = int(origine.replace("cp_couleur",""))-1
+        couleur = QColor()
+        r, g, b = m_couleursRapides[index]
+        couleur.setRgb(r, g, b)
         if couleur.isValid():
             self.majMode("caseMajTerrain", couleur)
         else:

+ 14 - 0
lib/ui/dm.py

@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+"""ensemble des widgets surchargés"""
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+class DmGraphicsView(QGraphicsView):
+    """surcharge de QGraphicsView"""
+    def __init__(self, parent = None):
+        super(DmGraphicsView, self).__init__(parent)
+
+    def resizeEvent(self, event):
+        super(DmGraphicsView, self).resizeEvent(event)
+        self.emit(SIGNAL("resizeEvent()"))
+    

+ 3 - 2
lib/ui/ecran_principal.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'mainwindow.ui'
 #
-# Created: Sat May 16 21:58:46 2015
+# Created: Mon May 18 12:15:54 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -326,7 +326,7 @@ class Ui_principal(object):
         self.layoutCombatCentre = QtGui.QVBoxLayout()
         self.layoutCombatCentre.setSpacing(0)
         self.layoutCombatCentre.setObjectName(_fromUtf8("layoutCombatCentre"))
-        self.cbt_vue = QtGui.QGraphicsView(self.Combats_tab)
+        self.cbt_vue = DmGraphicsView(self.Combats_tab)
         self.cbt_vue.setMinimumSize(QtCore.QSize(100, 0))
         self.cbt_vue.setAcceptDrops(True)
         self.cbt_vue.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
@@ -1523,6 +1523,7 @@ class Ui_principal(object):
         self.actionParam_tres.setText(_translate("principal", "Paramètres", None))
         self.actionLexique.setText(_translate("principal", "Lexique", None))
 
+from dm import DmGraphicsView
 
 if __name__ == "__main__":
     import sys

+ 8 - 1
lib/ui/mainwindow.ui

@@ -1005,7 +1005,7 @@
                <number>0</number>
               </property>
               <item>
-               <widget class="QGraphicsView" name="cbt_vue">
+               <widget class="DmGraphicsView" name="cbt_vue">
                 <property name="minimumSize">
                  <size>
                   <width>100</width>
@@ -3971,6 +3971,13 @@ selectionné</string>
    </property>
   </action>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>DmGraphicsView</class>
+   <extends>QGraphicsView</extends>
+   <header location="global">dm.h</header>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>

+ 30 - 0
modes.txt

@@ -0,0 +1,30 @@
+"standard"
+
+**** cp
+caseMajTerrain
+caseCopie
+caseMajEffet
+caseMajAltitude
+pionCreation
+pionSelectionne
+pionDecorCreation
+pionDecorSelectionne
+pionSupprimer
+cachePlacer
+combatDeplacement
+combatAttaqueCaC
+combatAttaqueDist
+placementEntreeSortie
+majZonePlacement
+
+
+cp_cl   couleur
+cp_tr   terrain
+cp_ef   effet
+cp_nc   nouveau cache
+cp_ 
+
+
+
+
+*** pi