Browse Source

Debut d'implementation du bouton d'etape
Acces en edition aux infos du plateau

olinox14 10 years ago
parent
commit
94d4754b09

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

@@ -10,6 +10,7 @@ encoding//lib/EcranChargerPlateau.py=utf-8
 encoding//lib/EcranCreerPlateau.py=utf-8
 encoding//lib/EcranEditionCombattant.py=utf-8
 encoding//lib/EcranEditionTerrain.py=utf-8
+encoding//lib/EcranFondPlateau.py=utf-8
 encoding//lib/EcranGestionCombat.py=utf-8
 encoding//lib/Modes.py=utf-8
 encoding//lib/Pion.py=utf-8
@@ -19,4 +20,5 @@ encoding//lib/framePj.py=utf-8
 encoding//lib/outilsSvg.py=latin1
 encoding//lib/ui/dm.py=utf-8
 encoding//lib/ui/ecran_altitude.py=utf-8
+encoding//lib/ui/ecran_creerPlateau.py=utf-8
 encoding/DMonde.py=utf-8

+ 24 - 17
DMonde.py

@@ -55,26 +55,33 @@ class DMonde(QMainWindow):
         self.ui.cbt_vue.resetTransform()
         self.ui.cbt_vue.setScene(ecranFondPlateau)
 
-    def afficherEcranCreerPlateau(self):
+    def nouveauPlateau(self):
         """ouvre la fenetre de creation de plateau"""
-        valide = True
         if self.plateau != None:
             if self.plateau.estCree() == True:
-                valide = False
-        if valide:
-            self.creationPlateau = EcranCreerPlateau(self)
-            self.creationPlateau.setWindowModality(Qt.ApplicationModal)
-            self.creationPlateau.show()
-            self.creationPlateau.raise_()
-
-    def creerPlateau(self, nom, chapitre, formeCases, largeur, hauteur, couleur):
-        """cree le plateau entre en parametre"""
-        nouvelId = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
-        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
-        self.plateau = Plateau(self)
-        self.plateau.creer(nouvelId, nom, chapitre, formeCases, largeur, hauteur, couleur)
-        QApplication.restoreOverrideCursor()
-        del self.creationPlateau
+                return 
+        
+        self.creationPlateau = EcranCreerPlateau()
+        idPlateau = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
+        plateau = Plateau(self)
+        plateau.id = idPlateau
+        self.creationPlateau.afficher(plateau)
+        r = self.creationPlateau.exec_()
+        if r == 1:
+            QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
+            self.plateau = self.creationPlateau.resultat()
+            self.plateau.creer()
+            QApplication.restoreOverrideCursor()
+        
+        
+#     def creerPlateau(self, nom, chapitre, formeCases, largeur, hauteur, couleur, description, presentation):
+#         """cree le plateau entre en parametre"""
+#         nouvelId = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
+#         QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
+#         self.plateau = Plateau(self)
+#         self.plateau.creer(nouvelId, nom, chapitre, formeCases, largeur, hauteur, couleur, description, presentation)
+#         QApplication.restoreOverrideCursor()
+#         del self.creationPlateau
 
     def afficherEcranChargerPlateau(self):
         """ouvre la fenetre de chargement de plateau"""

+ 53 - 27
lib/EcranCreerPlateau.py

@@ -1,31 +1,28 @@
 #from __future__ import unicode_literals
 # -*- coding: utf-8 -*-
 from __future__ import division
-from time import time, sleep, strftime, localtime
 
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
-
+from outilsSvg import afficheSvg
 from ui.ecran_creerPlateau import Ui_crp_fenetre
 
-from outilsSvg import *
-
 class EcranCreerPlateau(QDialog):
     """interface de creation/chargement de plateau"""
-    def __init__(self, fenetrePrincipale, terrain=None, parent=None):
+    def __init__(self, parent=None):
         """initialisation de la fenetre"""
         super (EcranCreerPlateau, self).__init__()
-        self.fenetre = fenetrePrincipale
         self.couleur = QColor(0, 255, 0, 80)
         self._majEnCours = False
+        self._resultat = None
         self.createWidgets()
-        self.majAffichage()
         
     def createWidgets(self):
         """construction de l'interface"""
         #construction de l'interface
         self.ui = Ui_crp_fenetre()
         self.ui.setupUi(self)
+        self.setWindowModality(Qt.ApplicationModal)
         self.ui.crp_couleur.setStyleSheet("QLabel {backGround:%s}" %(self.couleur))
         self.connect(self.ui.crp_couleur, SIGNAL("clicked()"), self.selectionCouleur)
         self.connect(self.ui.crp_listeDimensions, SIGNAL("activated(int)"), self.majDimensions)
@@ -34,31 +31,58 @@ class EcranCreerPlateau(QDialog):
         
         self.connect(self.ui.crp_nom, SIGNAL("textEdited(QString)"), self.majAffichage)
         
-        self.connect(self.ui.crp_ok, SIGNAL("clicked()"), self.creer)
+        self.connect(self.ui.crp_ok, SIGNAL("clicked()"), self.finir)
         self.ui.crp_ok.setShortcut("Enter") 
 
-    def creer(self):
-        nom = self.ui.crp_nom.texte()
-        largeur = self.ui.crp_largeur.value()
-        hauteur = self.ui.crp_hauteur.value()
-        chapitre = str(self.ui.crp_chapitre.value())
-        if self.ui.crp_formeHexa.isChecked():
-            formeCases = "H"
-        else:
-            formeCases = "C"
-        ok = True
-        if (largeur * hauteur) > 10000:
-            reponse = QMessageBox.question(self, 'Message',
-                                           "Attention ! \nLe nombre élevé de cases peut entrainer des ralentissements " \
-                                           "importants...\nVoulez vous continuer?", QMessageBox.Yes | 
-                                           QMessageBox.No, QMessageBox.No)
-            ok = (reponse != QMessageBox.No)
-        if ok == True:
-            self.fenetre.creerPlateau(nom, chapitre, formeCases, largeur, hauteur, self.couleur)
-            self.close()
+    def afficher(self, plateau):
+        """affiche la fenetre avec le plateau en parametre, ou un nouveau plateau sinon"""
+        self.ui.crp_nom.majTexte(plateau.nom)
+        self.ui.crp_chapitre.setValue(int(plateau.chapitre))
+        self.ui.crp_description.majTexte(plateau.description)
+        self.ui.crp_presentation.majTexte(plateau.presentation)
+        
+        nouveau = (plateau.nbCasesX == 0)
+        self.ui.crp_formes.setEnabled(nouveau)
+        self.ui.crp_hauteur.setEnabled(nouveau)
+        self.ui.crp_largeur.setEnabled(nouveau)
+        self.ui.crp_listeDimensions.setEnabled(nouveau)
+        self.ui.crp_couleur.setEnabled(nouveau)
+        
+        self._retour = plateau
+        self.majAffichage()
+        
+        self.show()
+
+
+    def resultat(self):
+        """renvoie le plateau ainsi parametre"""
+        self._retour.nom = self.ui.crp_nom.texte()
+        self._retour.chapitre = str(self.ui.crp_chapitre.value())
+        self._retour.description = self.ui.crp_description.texte()
+        self._retour.presentation = self.ui.crp_nom.texte()
+        self._retour.couleurInit = self.couleur
+        
+        if self.ui.crp_formes.isEnabled():
+            if self.ui.crp_formeHexa.isChecked():
+                self._retour.formeCases = "H"
+            else:
+                self._retour.formeCases = "C"
+            
+            self._retour.nbCasesX = self.ui.crp_largeur.value()
+            self._retour.nbCasesY = self.ui.crp_hauteur.value()
+            if (self._retour.nbCasesX * self._retour.nbCasesY) > 10000:
+                reponse = QMessageBox.question(self, 'Message',
+                                               "Attention ! \nLe nombre élevé de cases peut entrainer des ralentissements " \
+                                               "importants...\nVoulez vous continuer?", QMessageBox.Yes | 
+                                               QMessageBox.No, QMessageBox.No)
+                if reponse == QMessageBox.No: return
+
+        return self._retour
        
     def majAffichage(self):
         self.ui.crp_ok.setEnabled(len(self.ui.crp_nom.texte()) > 0)
+        self.ui.crp_ok.setDefault(len(self.ui.crp_nom.texte()) > 0)
+        
         
     def selectionCouleur(self):
         """selectionne la couleur dans la boite de dialogue dediee"""
@@ -88,3 +112,5 @@ class EcranCreerPlateau(QDialog):
             self.ui.crp_listeDimensions.setCurrentIndex(9)
             self._majEnCours = False
 
+    def finir(self):
+        self.done(1)

+ 1 - 1
lib/EcranFondPlateau.py

@@ -40,7 +40,7 @@ class EcranFondPlateau(QGraphicsScene):
     def clic(self, cmdId):
         """on a clique sur une des commandes"""
         if cmdId == "creer":
-            self.fenetre.afficherEcranCreerPlateau()
+            self.fenetre.nouveauPlateau()
         elif cmdId == "charger":
             self.fenetre.afficherEcranChargerPlateau()
         elif cmdId == "enCours":

+ 71 - 12
lib/Plateau.py

@@ -17,6 +17,7 @@ from ProjectionDep import ProjectionDep
 from Cache import Cache
 from Terrain import Terrain
 
+from EcranCreerPlateau import EcranCreerPlateau
 from EcranEditionCombattant import EcranEditionCombattant
 from EcranEditionDecor import EcranEditionDecor
 from EcranEditionTerrain import EcranEditionTerrain
@@ -48,18 +49,21 @@ class Plateau(QGraphicsScene):
         ##partie et infos plateau
         self.nom = ""
         self.chapitre = 0
-        self.tour = 1
+        self.tour = 0
         
         self.enCours = False
         self.public = False
         self.dateCreation = ""
         self.dateSvg = ""
         self.notes = ""
+        self.presentation = ""
+        self.description = ""
         
         #carac 
         self.nbCasesX = 0
         self.nbCasesY = 0
         self.hCase = 0
+        self.couleurInit = QColor(0, 255, 0, 80)
 
         #objets
         self.pinceau = Pinceau(self)
@@ -93,26 +97,22 @@ class Plateau(QGraphicsScene):
     def vue(self):
         return self.fenetre.ui.cbt_vue
 
-    def creer(self, idPlateau, nom, chapitre, formeCases, nbCasesX, nbCasesY, couleur = QColor(0, 255, 0, 80)):
+#     def creer(self, idPlateau, nom, chapitre, formeCases, nbCasesX, nbCasesY, \
+#               couleur = QColor(0, 255, 0, 80), description = "", presentation = ""):
+    def creer(self):
         """cree le plateau"""
-        self.id = idPlateau
-        self.nom = nom
-        self.chapitre = chapitre
         self.dateCreation = time()
         self.hCase = 120  #hauteur d'une case
-        self.nbCasesX = nbCasesX   #nb cases en x
-        self.nbCasesY = nbCasesY   #nb cases en y
-        self.formeCases = formeCases
         self.modeActif = Modes.ModeBase(self)
         self.gestionCombat = None
         self.initialisationGraphique()
         self.connexions()
         
         #cree les cases hexagonales
-        for x in range(nbCasesX):
-            for y in range(nbCasesY):
+        for x in range(self.nbCasesX):
+            for y in range(self.nbCasesY):
                 c = Case(self)
-                c.creer(x, y, couleur)
+                c.creer(x, y, self.couleurInit)
                 self.cases[(x,y)] = c
 
         self.plateauModeCreation()
@@ -180,7 +180,11 @@ class Plateau(QGraphicsScene):
         self.fenetre.connect(self.fenetre.ui.cbt_modeCombat, SIGNAL("clicked()"), self.plateauModeCombat, Qt.UniqueConnection)
 ##        self.fenetre.connect(self.fenetre.ui.modeAffichagePlateau, SIGNAL("currentIndexChanged(int)"), self.majModeAffichage, Qt.UniqueConnection)
 
+        #etapes du combat
+        self.fenetre.connect(self.fenetre.ui.cbt_etapeSuivante, SIGNAL("clicked()"), self.etapeSuivante, Qt.UniqueConnection)
+        
         #affichage de fenetres
+        self.fenetre.connect(self.fenetre.ui.cbt_nom, SIGNAL("clicked()"), self.afficherEcranPlateau, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.cbt_afficherGestion, SIGNAL("clicked()"), self.afficheEcranGestionCombat, Qt.UniqueConnection)
         self.fenetre.connect(self.fenetre.ui.pi_listeAttributs, SIGNAL("cellChanged(int,int)"), self.listeAttributCelluleModifiee, Qt.UniqueConnection)
 
@@ -255,7 +259,7 @@ class Plateau(QGraphicsScene):
   
         #mise a jour de l'interface de creation
         self.fenetre.afficherPanneauxPlateau(True)
-        self.fenetre.ui.cbt_nom.setText(QString().fromUtf8("   {}   ".format(self.nom)))
+        self.majNomPlateau()
         self.majBoutonsCouleursPerso()
         self.fenetre.ui.cp_listeTerrains.defFichier("lib\\biblio\\terrain")
         self.fenetre.ui.cp_listeTerrains.initAffichage()
@@ -270,6 +274,7 @@ class Plateau(QGraphicsScene):
         
         self.initListeOrdreJeu()
         self.initListeAttaques()
+        self.majBoutonEtape()
 
         self.fenetre.ui.pi_deplacement.setCheckable(True)
         self.fenetre.ui.pi_attaqueCac.setCheckable(True)
@@ -284,6 +289,58 @@ class Plateau(QGraphicsScene):
         """renvoie vrai si des cases ont ete creees"""
         return (len(self.cases) > 0)
 
+    def afficherEcranPlateau(self):
+        """affiche la fenetre de description du plateau"""
+        ecran = EcranCreerPlateau()
+        ecran.afficher(self)
+        r = ecran.exec_()
+        if r == 1:
+            res = ecran.resultat()
+            self.nom = res.nom
+            self.chapitre = res.chapitre
+            self.description = res.description
+            self.presentation = res.presentation
+            self.majNomPlateau()
+
+    def majNomPlateau(self):
+        """met a jour l'affichage du nom du plateau"""
+        txt = self.nom
+        if not self.public:
+            txt += "  [Non Publié]"
+        self.fenetre.ui.cbt_nom.setText(QString().fromUtf8("    {}    ".format(txt)))
+        
+    def majBoutonEtape(self):
+        """met a jour le label et l'effet du bouton d'etape (en bas a droite)"""
+        if not self.public:
+            self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Publier le plateau"))
+            return
+        
+        if not self.tour > 0:
+            self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Démarrer le combat"))
+            return            
+        
+        self.fenetre.ui.cbt_etapeSuivante.setText(QString().fromUtf8("Tour {}\nFinir son tour".format(self.tour)))
+
+    def etapeSuivante(self):
+        """apres clic sur le bouton d'etape, on passe a l'etape suivante (publication, demarrage du combat...)"""
+        if not self.public:
+            self.publier()
+            return
+        
+        if not self.tour > 0:
+            self.demarrer()
+            return            
+        
+        self.pionSuivant()   
+
+    def publier(self):
+        self.public = True
+        self.majBoutonEtape()
+    
+    def demarrer(self):
+        self.tour = 1
+        self.majBoutonEtape()    
+
     def majBoutonsCouleursPerso(self):
         """met a jour l'affichage des couleurs customisees dans la boite de dialogue de selection de couleur"""
         for i in range(0,18):
@@ -711,6 +768,8 @@ class Plateau(QGraphicsScene):
 
     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:

+ 8 - 3
lib/ui/creerPlateau.ui

@@ -325,7 +325,7 @@
     <number>1</number>
    </property>
   </widget>
-  <widget class="QGroupBox" name="groupBox">
+  <widget class="QGroupBox" name="crp_formes">
    <property name="geometry">
     <rect>
      <x>30</x>
@@ -556,7 +556,7 @@
     <enum>Qt::Horizontal</enum>
    </property>
   </widget>
-  <widget class="QTextEdit" name="crp_presentation">
+  <widget class="DmTextEdit" name="crp_presentation">
    <property name="geometry">
     <rect>
      <x>30</x>
@@ -621,7 +621,7 @@
     <string>Présentation (publique)</string>
    </property>
   </widget>
-  <widget class="QTextEdit" name="crp_description">
+  <widget class="DmTextEdit" name="crp_description">
    <property name="geometry">
     <rect>
      <x>30</x>
@@ -688,6 +688,11 @@
   </widget>
  </widget>
  <customwidgets>
+  <customwidget>
+   <class>DmTextEdit</class>
+   <extends>QTextEdit</extends>
+   <header location="global">dm.h</header>
+  </customwidget>
   <customwidget>
    <class>DmLineEdit</class>
    <extends>QLineEdit</extends>

+ 13 - 13
lib/ui/ecran_creerPlateau.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'creerPlateau.ui'
 #
-# Created: Fri Aug 28 12:18:40 2015
+# Created: Fri Aug 28 15:57:31 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -129,28 +129,28 @@ class Ui_crp_fenetre(object):
         self.crp_chapitre.setFont(font)
         self.crp_chapitre.setMinimum(1)
         self.crp_chapitre.setObjectName(_fromUtf8("crp_chapitre"))
-        self.groupBox = QtGui.QGroupBox(crp_fenetre)
-        self.groupBox.setGeometry(QtCore.QRect(30, 100, 311, 41))
+        self.crp_formes = QtGui.QGroupBox(crp_fenetre)
+        self.crp_formes.setGeometry(QtCore.QRect(30, 100, 311, 41))
         font = QtGui.QFont()
         font.setPointSize(10)
-        self.groupBox.setFont(font)
-        self.groupBox.setTitle(_fromUtf8(""))
-        self.groupBox.setFlat(True)
-        self.groupBox.setObjectName(_fromUtf8("groupBox"))
-        self.crp_formeHexa = QtGui.QRadioButton(self.groupBox)
+        self.crp_formes.setFont(font)
+        self.crp_formes.setTitle(_fromUtf8(""))
+        self.crp_formes.setFlat(True)
+        self.crp_formes.setObjectName(_fromUtf8("crp_formes"))
+        self.crp_formeHexa = QtGui.QRadioButton(self.crp_formes)
         self.crp_formeHexa.setGeometry(QtCore.QRect(80, 10, 111, 20))
         font = QtGui.QFont()
         font.setPointSize(9)
         self.crp_formeHexa.setFont(font)
         self.crp_formeHexa.setChecked(True)
         self.crp_formeHexa.setObjectName(_fromUtf8("crp_formeHexa"))
-        self.crp_formeCarree = QtGui.QRadioButton(self.groupBox)
+        self.crp_formeCarree = QtGui.QRadioButton(self.crp_formes)
         self.crp_formeCarree.setGeometry(QtCore.QRect(220, 10, 81, 21))
         font = QtGui.QFont()
         font.setPointSize(9)
         self.crp_formeCarree.setFont(font)
         self.crp_formeCarree.setObjectName(_fromUtf8("crp_formeCarree"))
-        self.label_2 = QtGui.QLabel(self.groupBox)
+        self.label_2 = QtGui.QLabel(self.crp_formes)
         self.label_2.setGeometry(QtCore.QRect(0, 10, 61, 21))
         self.label_2.setObjectName(_fromUtf8("label_2"))
         self.label_6 = QtGui.QLabel(crp_fenetre)
@@ -200,7 +200,7 @@ class Ui_crp_fenetre(object):
         self.line.setFrameShape(QtGui.QFrame.HLine)
         self.line.setFrameShadow(QtGui.QFrame.Sunken)
         self.line.setObjectName(_fromUtf8("line"))
-        self.crp_presentation = QtGui.QTextEdit(crp_fenetre)
+        self.crp_presentation = DmTextEdit(crp_fenetre)
         self.crp_presentation.setGeometry(QtCore.QRect(30, 160, 431, 41))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(249, 249, 249))
@@ -220,7 +220,7 @@ class Ui_crp_fenetre(object):
         font.setPointSize(8)
         self.label_3.setFont(font)
         self.label_3.setObjectName(_fromUtf8("label_3"))
-        self.crp_description = QtGui.QTextEdit(crp_fenetre)
+        self.crp_description = DmTextEdit(crp_fenetre)
         self.crp_description.setGeometry(QtCore.QRect(30, 228, 431, 31))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(249, 249, 249))
@@ -270,7 +270,7 @@ class Ui_crp_fenetre(object):
         self.label_3.setText(_translate("crp_fenetre", "Présentation (publique)", None))
         self.label_4.setText(_translate("crp_fenetre", "Description (créateur seulement)", None))
 
-from dm import DmLineEdit
+from dm import DmTextEdit, DmLineEdit
 import ressource_rc
 
 if __name__ == "__main__":

+ 3 - 2
lib/ui/ecran_principal.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'principal.ui'
 #
-# Created: Fri Aug 28 14:13:15 2015
+# Created: Fri Aug 28 16:19:45 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -1192,6 +1192,7 @@ class Ui_principal(object):
         self.grp_deroulement.setFont(font)
         self.grp_deroulement.setAutoFillBackground(True)
         self.grp_deroulement.setFrameShape(QtGui.QFrame.NoFrame)
+        self.grp_deroulement.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
         self.grp_deroulement.setWidgetResizable(True)
         self.grp_deroulement.setObjectName(_fromUtf8("grp_deroulement"))
         self.grp_deroulement_contenu = QtGui.QWidget()
@@ -1542,7 +1543,7 @@ class Ui_principal(object):
         self.menubar.addAction(self.menuAide.menuAction())
 
         self.retranslateUi(principal)
-        self.dm_panneauCentre.setCurrentIndex(2)
+        self.dm_panneauCentre.setCurrentIndex(0)
         self.cbt_panneauHaut.setCurrentIndex(1)
         self.cbt_panneauGauche.setCurrentIndex(1)
         self.cbt_panneauBas.setCurrentIndex(1)

+ 2 - 3
parties/Partie1/svg/infos_sauvegarde

@@ -1,3 +1,2 @@
-€}q(U1}q(UnomqUtest depqUdateCreationqGAÕj/¹³×
-UdateSvgqGAÕj5’•�UchapitreqU1UenCoursq‰Upublicq	‰uU0}q
-(UnomUForêtUdateCreationGAÕiÜb«"ÑUdateSvgGAÕiÜÊiXUchapitreU1UenCours‰Upublic‰uu.
+€}q(U1}q(UnomqULa chambre noireqUdateCreationqGAÕxwäÌÍUdateSvgqGAÕxÿ¿®UchapitreqU1UenCoursq‰Upublicq	‰uU0}q
+(UnomUtestUdateCreationGAÕxemãTUdateSvgGAÕxh:°!UchapitreU1UenCours‰Upublic‰uu.