| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- #from __future__ import unicode_literals
- # -*- coding: utf-8 -*-
- from __future__ import division
- import os
- from sys import exit, argv, getsizeof, settrace
- from time import time, sleep, strftime, localtime
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- from lib.ui.ecran_principal import Ui_principal
- from lib.EcranCreationPlateau import EcranCreationPlateau
- from lib.EcranFondPlateau import EcranFondPlateau
- from lib.Plateau import Plateau
- from lib.outilsSvg import *
- from lib.Case import Case
- from lib.Pion import Pion
- from lib.PionDecor import PionDecor
- from lib.Cache import Cache
- from lib.EntreeSortie import EntreeSortie
- #fonction ci dessous: deboguage, suit les appels faits aux fonctions
- #settrace(trace_calls)
- def trace_calls(frame, event, arg):
- if event != 'call':
- return
- co = frame.f_code
- func_name = co.co_name
- if func_name == 'write':
- # Ignore write() calls from print statements
- return
- func_line_no = frame.f_lineno
- func_filename = co.co_filename
- caller = frame.f_back
- caller_line_no = caller.f_lineno
- caller_filename = caller.f_code.co_filename
- #print 'Call to %s on line %s of %s from line %s of %s' % \
- # (func_name, func_line_no, func_filename,
- # caller_line_no, caller_filename)
- print("{} ({})".format(func_name, func_filename))
- return
- 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.partie = "partie1"
- self.idPlateauEnCours = ""
- self.plateauConnecte = False
- self.createWidgets()
-
- def createWidgets(self):
- """construction de l'interface"""
- self.ui = Ui_principal()
- self.ui.setupUi(self)
- self.majVisibilitePanneauxPlateau("")
- self.connect(self.ui.sauverPlateau, SIGNAL("clicked()"), self.sauverPlateau)
- self.connect(self.ui.fermerPlateau, SIGNAL("clicked()"), self.fermerPlateau)
- self.ui.vuePlateau.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
- self.majFichierInfosSvg()
- self.creerEcranFondPlateau()
-
- def creerEcranFondPlateau(self):
- ecranFondPlateau = EcranFondPlateau(self)
- self.ui.vuePlateau.resetTransform()
- self.ui.vuePlateau.setScene(ecranFondPlateau)
-
- def afficherEcranCreationPlateau(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 = EcranCreationPlateau(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
-
- def sauverPlateau(self, plateau):
- 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 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()
- return plateau
-
- def fermerPlateau(self):
- self.plateau.fermer()
- self.plateau = None
- self.creerEcranFondPlateau()
- ## self.majVisibilitePanneauxPlateau("")
- def majFichierInfosSvg(self):
- """construit/maj le fichier contenant la liste des
- plateaux sauvegardes et leurs informations"""
- #on parcourt les fichiers de sauvegarde
- index = 0
- 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)
- def majVisibilitePanneauxPlateau(self, mode):
- """affiche ou cache les panneaux d'edition, d'information et de gestion du plateau"""
- #self.ui.panneauInfosPlateau.setVisible(False)
- conditionPlateau = (len(mode) > 0)
- conditionModeCreation = (len(mode) > 0 and mode == "creation")
- conditionModeCombat = (len(mode) > 0 and mode == "combat")
- #panneaux d'infos
- self.ui.infoOrdreJeu.setVisible(conditionPlateau)
- self.ui.infoPion.setVisible(conditionPlateau)
- self.ui.infoDecor.setVisible(conditionPlateau)
- self.ui.infoCase.setVisible(conditionPlateau)
- #autre
- self.ui.nomPlateau.setVisible(conditionPlateau)
- self.ui.sauverPlateau.setVisible(conditionPlateau)
- self.ui.fermerPlateau.setVisible(conditionPlateau)
- self.ui.etiquetteModeAffichagePlateau.setVisible(conditionPlateau)
- self.ui.modeAffichagePlateau.setVisible(conditionPlateau)
- self.ui.combatTour.setVisible(conditionPlateau)
-
- #barre de combat:
- if len(mode) > 0:
- self.majVisibiliteBarreCombat("menu")
- else:
- self.majVisibiliteBarreCombat("aucun")
- self.ui.combatPasserTour.setVisible(conditionPlateau)
- self.ui.combatInventaire.setVisible(conditionPlateau)
- #modes creation/combat
- self.ui.modeCombatPlateau.setVisible(conditionModeCreation)
- self.ui.outilsEditionPlateau.setVisible(conditionModeCreation)
- self.ui.outilsCombatPlateau.setVisible(conditionModeCombat)
- self.ui.modeCreationPlateau.setVisible(conditionModeCombat)
- def reinitialiserPanneauxPlateau(self):
- """remet a neuf les commandes liees au plateau"""
- for panneau in [self.ui.panneauInfosPlateau, \
- self.ui.outilsEditionPlateau, \
- self.ui.outilsCombatPlateau]:
- #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)
- def barreCombatMenu(self):
- self.majVisibiliteBarreCombat("menu")
- def barreCombatVol(self):
- self.majVisibiliteBarreCombat("vol")
- def barreCombatZone(self):
- self.majVisibiliteBarreCombat("zone")
- def majVisibiliteBarreCombat(self, mode = ""):
- """affiche ou cache les commandes de la barre de combat"""
- #modes : "aucun", "menu", "vol", "zone"
- for item in self.ui.barreBasCombat.children():
- try:
- item.setVisible(False)
- except:
- pass
-
- if mode != "aucun":
- self.ui.combatPionSelectionne.setVisible(True)
- self.ui.combatPionSelectionne_img.setVisible(True)
- self.ui.combatPionSelectionne_img.setPixmap(QPixmap())
- self.ui.combatPasserTour.setVisible(True)
- self.ui.combatInventaire.setVisible(True)
-
- if mode == "menu" or mode == "":
- self.ui.combatDeplacement.setVisible(True)
- self.ui.combatAttaqueCaC.setVisible(True)
- self.ui.combatAttaqueDist.setVisible(True)
- self.ui.combatAttaqueZone.setVisible(True)
- self.ui.combatVol.setVisible(True)
-
- elif mode == "vol":
- self.ui.combatVol.setVisible(True)
- self.ui.combatVol_altitude.setVisible(True)
- self.ui.combatRetour.setVisible(True)
-
- elif mode == "zone":
- self.ui.combatZone_ligne.setVisible(True)
- self.ui.combatZone_disque.setVisible(True)
- self.ui.combatZone_disqueRayon.setVisible(True)
- self.ui.combatZone_cone.setVisible(True)
- self.ui.combatRetour.setVisible(True)
-
- if __name__ == "__main__":
- app = QApplication(argv)
- #settrace(trace_calls)
- dm = DMonde()
- dm.show()
- r = app.exec_()
- exit(r)
|