Jelajahi Sumber

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

unknown 10 tahun lalu
induk
melakukan
20d92ddf0c
16 mengubah file dengan 213 tambahan dan 23 penghapusan
  1. 2 0
      a faire.txt
  2. 2 0
      combat_commandes manquantes.txt
  3. 0 0
      doc/docPlateau.txt
  4. 0 0
      doc/legende orga.xlsx
  5. 0 0
      doc/orga.ep
  6. 0 0
      doc/restructuration.txt
  7. TEMPAT SAMPAH
      img/cmdVue_cbt.png
  8. TEMPAT SAMPAH
      img/cmdVue_ouvrir.png
  9. TEMPAT SAMPAH
      img/cmdVue_plus.png
  10. 54 0
      lib/Boucle.py
  11. 81 6
      lib/EcranFondPlateau.py
  12. 19 14
      lib/Plateau.py
  13. 14 0
      lib/ui/dm.py
  14. 3 2
      lib/ui/ecran_principal.py
  15. 8 1
      lib/ui/mainwindow.ui
  16. 30 0
      modes.txt

+ 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


TEMPAT SAMPAH
img/cmdVue_cbt.png


TEMPAT SAMPAH
img/cmdVue_ouvrir.png


TEMPAT SAMPAH
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