| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- #from __future__ import unicode_literals
- # -*- coding: utf-8 -*-
- """Interface principale du programme DMonde
- """
- import os
- from sys import exit, argv
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- from lib.EcranChargerPlateau import EcranChargerPlateau
- from lib.EcranCreerPlateau import EcranCreerPlateau
- from lib.EcranEditionCombattant import EcranEditionCombattant
- from lib.EcranFondPlateau import EcranFondPlateau
- from lib.Plateau import Plateau
- from lib.framePj import FramePj
- from lib.outilsSvg import *
- from lib.ui.ecran_principal import Ui_principal
- from lib.Actions import Ligne
- from lib.commun import rep
- from lib.rsc import RImage
- class DMonde(QMainWindow):
- """interface comprenant: chat ecrit, fenetre d'infos, lancer de des, echange de fichiers, lancement du chat vocal"""
- def __init__(self, parent=None):
- """initialisation de la fenetre"""
- super (DMonde, self).__init__()
- self.plateau = None
- self.profil = "Joueur"
- self.partie = ""
- self.regles = ""
- self.idPlateauEnCours = ""
- self.plateauConnecte = False
- self._compteurPj = 0
- self.createWidgets()
- def createWidgets(self):
- """construction de l'interface"""
- self.ui = Ui_principal()
- self.ui.setupUi(self)
- self.afficherPanneauxPlateau(False)
- self.connect(self.ui.cbt_sauver, SIGNAL("clicked()"), self.sauverPlateau)
- self.connect(self.ui.cbt_fermer, SIGNAL("clicked()"), self.fermerPlateau)
- self.connect(self.ui.grp_nouveauPj, SIGNAL("clicked()"), self.nouveauPj)
- self.ui.cbt_vue.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
- self.ui.cp_ongletsListes.setStyleSheet("QTabBar::tab { width: 38px; }")
- self.ui.pi_ongletsListes.setStyleSheet("QTabBar::tab { width: 38px; }")
- self.creerEcranFondPlateau()
-
- self.chargerPartie("")
-
- # self.showMaximized()
- def chargerPartie(self, idPartie):
- """charge la partie"""
- self.profil = "olivier"
- self.partie = "partie1"
- self.regles = "dd35"
-
- self.majFichierInfosSvg()
- self.chargerListePj()
- ########## onglet plateau
- def creerEcranFondPlateau(self):
- ecranFondPlateau = EcranFondPlateau(self)
- self.ui.cbt_vue.resetTransform()
- self.ui.cbt_vue.setScene(ecranFondPlateau)
- def nouveauPlateau(self):
- """ouvre la fenetre de creation de plateau"""
- if self.plateau != None:
- if self.plateau.estCree() == True:
- 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"""
- valide = True
- if self.plateau != None:
- if self.plateau.estCree() == True:
- valide = False
- if valide:
- self.chargementPlateau = EcranChargerPlateau(self)
- self.chargementPlateau.setWindowModality(Qt.ApplicationModal)
- self.chargementPlateau.show()
- self.chargementPlateau.raise_()
- def chargerPlateau(self, nomFichierSvg):
- if self.plateau != None:
- if self.plateau.estCree() == True:
- self.fermerPlateau()
- QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
- self.plateau = chargerUnique("parties\\{}\\svg\\{}.p".format(self.partie, nomFichierSvg))
- if self.plateau:
- self.plateau.recreer(self)
- else:
- self.plateau = Plateau(self)
- QApplication.restoreOverrideCursor()
- def chargerDernierPlateau(self):
- """charge le dernier plateau sauvegarde"""
- infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
- dernier = None
- for id_svg in infosSvg:
- if not dernier or infosSvg[id_svg]["dateSvg"] > infosSvg[dernier]["dateSvg"]:
- dernier = id_svg
- if dernier:
- self.chargerPlateau(dernier)
-
- def sauverPlateau(self):
- QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
- if self.plateau.id in afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie)):
- idPlateau = self.plateau.id
- else:
- idPlateau = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
- enregistrerUnique(self.plateau, "parties\\{}\\svg\\{}.p".format(self.partie, idPlateau))
- infos = {"nom": self.plateau.nom, "chapitre": self.plateau.chapitre, "dateCreation":self.plateau.dateCreation, "dateSvg":self.plateau.dateSvg, \
- "public": self.plateau.public, "enCours": self.plateau.enCours}
- enregistrer(str(idPlateau), infos, "parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
- QApplication.restoreOverrideCursor()
-
- def fermerPlateau(self):
- self.plateau.fermer()
- self.plateau = None
- self.creerEcranFondPlateau()
- self.afficherPanneauxPlateau(False)
- def majFichierInfosSvg(self):
- """construit/maj le fichier contenant la liste des
- plateaux sauvegardes et leurs informations"""
- #on parcourt les fichiers de sauvegarde
- f = []
- lstFichiersSvg = []
- for (dirpath, dirnames, filenames) in os.walk("parties\\{}\\svg\\".format(self.partie)):
- f.extend(filenames)
- break
- for fichier in f:
- fileName, fileExtension = os.path.splitext(fichier)
- if fileExtension == ".p":
- lstFichiersSvg.append(fileName)
-
- #on verifie leur presence dans le fichier 'infos_sauvegarde'
- infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
- index = len(infosSvg)
- #on ajoute les sauvegardes manquantes si besoin
- for fichier in lstFichiersSvg:
- if not fichier in infosSvg:
- plateau = chargerUnique("parties\\{}\\svg\\{}.p".format(self.partie, fichier))
- enregistrer(fichier, {"nom": plateau.nom, "chapitre": plateau.chapitre, "dateCreation":plateau.dateCreation, "dateSvg":plateau.dateSvg, \
- "public": plateau.public, "enCours": plateau.enCours}, "svg\\infos_sauvegarde")
- index += 1
- #on supprime ceux qui ne sont plus trouves
- for fichier in infosSvg:
- if not fichier in lstFichiersSvg:
- supprSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie), fichier)
- ########## apparence de l'onglet plateau
- def afficherPanneauxPlateau(self, actif):
- index = int(actif) # 0 si faux, 1 si vrai
- self.ui.cbt_panneauBas.setCurrentIndex(index)
- self.ui.cbt_panneauHaut.setCurrentIndex(index)
- self.ui.cbt_panneauDroite.setCurrentIndex(index)
- self.ui.cbt_panneauGauche.setCurrentIndex(index)
- self.ui.cbt_etapeSuivante.setVisible(actif)
- def reinitialiserPanneauxPlateau(self):
- """remet a neuf les commandes liees au plateau"""
- for panneau in [self.ui.cbt_panneauHaut, \
- self.ui.cbt_panneauBas, \
- self.ui.cbt_panneauGauche, \
- self.ui.cbt_panneauDroite]:
- #listes
- for liste in panneau.findChildren(QTableWidget):
- while liste.rowCount() > 0:
- liste.removeRow(0)
- #textes
- for texte in panneau.findChildren(QLineEdit):
- texte.clear()
- for texte in panneau.findChildren(QTextEdit):
- texte.clear()
- #a cocher
- for bouton in panneau.findChildren(QToolButton):
- if bouton.isCheckable():
- bouton.setChecked(False)
- #autre
- for item in panneau.findChildren(QSlider):
- item.setValue(1)
- for item in panneau.findChildren(QDoubleSpinBox):
- item.setValue(0)
- ########## onglet groupe
- def chargerListePj(self):
- listePj = chargerUnique("parties\\{}\\groupe".format(self.partie))
- if not listePj: listePj = []
- self.ui.grp_deroulement_layout.setAlignment(Qt.AlignTop)
-
- for pj in listePj:
- self.pjAjouterAListe(pj)
- def pjAjouterAListe(self, pj = None):
- colonne = (self._compteurPj % 3) * 2
- ligne = int(self._compteurPj / 3)
- self._compteurPj += 1
- panneau = FramePj(self._compteurPj)
- if pj:
- panneau.chargerPj(pj)
- panneau.setObjectName(QString("pj_panneau_{}".format(self._compteurPj)))
- self.connect(panneau, SIGNAL("pjModifie(int)"), self.pjEnregistrer)
- self.ui.grp_deroulement_layout.addWidget(panneau, ligne, colonne)
- ## pour l'espacement entre les panneaux
- w = QWidget()
- self.ui.grp_deroulement_layout.addWidget(w, ligne, colonne + 1)
- def pjSupprimer(self, index):
- panneau = self.findChild(QFrame, "pj_panneau_{}".format(index))
- self.ui.grp_deroulement_layout.removeWidget(panneau)
- def nouveauPj(self):
- self.editionPj = EcranEditionCombattant()
- self.editionPj.setAttribute(Qt.WA_DeleteOnClose)
- self.editionPj.exec_()
- pj = self.editionPj.combattant
- self.pjAjouterAListe(pj)
- self.pjEnregistrer(self._compteurPj)
- def pjEnregistrer(self, idPj):
- listePj = chargerUnique("parties\\{}\\groupe".format(self.partie))
- if not listePj: listePj = []
- panneau = self.findChild(QFrame, "pj_panneau_{}".format(idPj))
- pj = panneau.pj()
- listePj.append(pj)
- enregistrerUnique(listePj, "parties\\{}\\groupe".format(self.partie))
- def resizeEvent(self, event):
- val = (self.ui.dm_panneauCentre.width() - 20) / 3
- self.ui.dm_panneauCentre.setStyleSheet("QTabBar::tab { height: 25; width: "+str(val)+"px; }")
-
-
- if __name__ == "__main__":
- app = QApplication(argv)
- #settrace(trace_calls)
- dm = DMonde()
- dm.show()
- r = app.exec_()
- exit(r)
-
|