DMonde.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. from __future__ import division
  4. import os
  5. from sys import exit, argv, getsizeof, settrace
  6. from time import time, sleep, strftime, localtime
  7. from PyQt4.QtCore import *
  8. from PyQt4.QtGui import *
  9. from lib.ui.ecran_principal import Ui_principal
  10. from lib.EcranCreationPlateau import EcranCreationPlateau
  11. from lib.EcranFondPlateau import EcranFondPlateau
  12. from lib.Plateau import Plateau
  13. from lib.outilsSvg import *
  14. from lib.Case import Case
  15. from lib.Pion import Pion
  16. from lib.PionDecor import PionDecor
  17. from lib.Decor import Decor
  18. from lib.Terrain import Terrain
  19. from lib.Creature import Creature
  20. from lib.Attaque import Attaque
  21. from lib.Cache import Cache
  22. from lib.EntreeSortie import EntreeSortie
  23. #fonction ci dessous: deboguage, suit les appels faits aux fonctions
  24. #settrace(trace_calls)
  25. def trace_calls(frame, event, arg):
  26. if event != 'call':
  27. return
  28. co = frame.f_code
  29. func_name = co.co_name
  30. if func_name == 'write':
  31. # Ignore write() calls from print statements
  32. return
  33. func_line_no = frame.f_lineno
  34. func_filename = co.co_filename
  35. caller = frame.f_back
  36. caller_line_no = caller.f_lineno
  37. caller_filename = caller.f_code.co_filename
  38. #print 'Call to %s on line %s of %s from line %s of %s' % \
  39. # (func_name, func_line_no, func_filename,
  40. # caller_line_no, caller_filename)
  41. print("{} ({})".format(func_name, func_filename))
  42. return
  43. class DMonde(QMainWindow):
  44. """interface comprenant: chat ecrit, fenetre d'infos, lancer de des, echange de fichiers, lancement du chat vocal"""
  45. def __init__(self, parent=None):
  46. """initialisation de la fenetre"""
  47. super (DMonde, self).__init__()
  48. self.plateau = None
  49. self.partie = "partie1"
  50. self.idPlateauEnCours = ""
  51. self.plateauConnecte = False
  52. self.createWidgets()
  53. def createWidgets(self):
  54. """construction de l'interface"""
  55. self.ui = Ui_principal()
  56. self.ui.setupUi(self)
  57. self.majVisibilitePanneauxPlateau("")
  58. self.connect(self.ui.sauverPlateau, SIGNAL("clicked()"), self.sauverPlateau)
  59. self.connect(self.ui.fermerPlateau, SIGNAL("clicked()"), self.fermerPlateau)
  60. self.ui.vuePlateau.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
  61. self.majFichierInfosSvg()
  62. self.creerEcranFondPlateau()
  63. def creerEcranFondPlateau(self):
  64. ecranFondPlateau = EcranFondPlateau(self)
  65. self.ui.vuePlateau.resetTransform()
  66. self.ui.vuePlateau.setScene(ecranFondPlateau)
  67. def afficherEcranCreationPlateau(self):
  68. """ouvre la fenetre de creation de plateau"""
  69. valide = True
  70. if self.plateau != None:
  71. if self.plateau.estCree() == True:
  72. valide = False
  73. if valide:
  74. self.creationPlateau = EcranCreationPlateau(self)
  75. self.creationPlateau.setWindowModality(Qt.ApplicationModal)
  76. self.creationPlateau.show()
  77. self.creationPlateau.raise_()
  78. def creerPlateau(self, nom, chapitre, formeCases, largeur, hauteur, couleur):
  79. """cree le plateau entre en parametre"""
  80. nouvelId = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
  81. QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
  82. self.plateau = Plateau(self)
  83. self.plateau.creer(nouvelId, nom, chapitre, formeCases, largeur, hauteur, couleur)
  84. QApplication.restoreOverrideCursor()
  85. del self.creationPlateau
  86. def sauverPlateau(self):
  87. QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
  88. if self.plateau.id in afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie)):
  89. idPlateau = self.plateau.id
  90. else:
  91. idPlateau = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
  92. enregistrerUnique(self.plateau, "parties\\{}\\svg\\{}.p".format(self.partie, idPlateau))
  93. infos = {"nom": self.plateau.nom, "chapitre": self.plateau.chapitre, "dateCreation":self.plateau.dateCreation, "dateSvg":self.plateau.dateSvg, \
  94. "public": self.plateau.public, "enCours": self.plateau.enCours}
  95. enregistrer(str(idPlateau), infos, "parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
  96. QApplication.restoreOverrideCursor()
  97. def chargerPlateau(self, nomFichierSvg):
  98. if self.plateau != None:
  99. if self.plateau.estCree() == True:
  100. self.fermerPlateau()
  101. QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
  102. self.plateau = chargerUnique("parties\\{}\\svg\\{}.p".format(self.partie, nomFichierSvg))
  103. if self.plateau:
  104. self.plateau.recreer(self)
  105. else:
  106. self.plateau = Plateau(self)
  107. QApplication.restoreOverrideCursor()
  108. def fermerPlateau(self):
  109. self.plateau.fermer()
  110. self.plateau = None
  111. self.creerEcranFondPlateau()
  112. ## self.majVisibilitePanneauxPlateau("")
  113. def majFichierInfosSvg(self):
  114. """construit/maj le fichier contenant la liste des
  115. plateaux sauvegardes et leurs informations"""
  116. #on parcourt les fichiers de sauvegarde
  117. index = 0
  118. f = []
  119. lstFichiersSvg = []
  120. for (dirpath, dirnames, filenames) in os.walk("parties\\{}\\svg\\".format(self.partie)):
  121. f.extend(filenames)
  122. break
  123. for fichier in f:
  124. fileName, fileExtension = os.path.splitext(fichier)
  125. if fileExtension == ".p":
  126. lstFichiersSvg.append(fileName)
  127. #on verifie leur presence dans le fichier 'infos_sauvegarde'
  128. infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
  129. index = len(infosSvg)
  130. #on ajoute les sauvegardes manquantes si besoin
  131. for fichier in lstFichiersSvg:
  132. if not fichier in infosSvg:
  133. plateau = chargerUnique("parties\\{}\\svg\\{}.p".format(self.partie, fichier))
  134. enregistrer(fichier, {"nom": plateau.nom, "chapitre": plateau.chapitre, "dateCreation":plateau.dateCreation, "dateSvg":plateau.dateSvg, \
  135. "public": plateau.public, "enCours": plateau.enCours}, "svg\\infos_sauvegarde")
  136. index += 1
  137. #on supprime ceux qui ne sont plus trouves
  138. for fichier in infosSvg:
  139. if not fichier in lstFichiersSvg:
  140. supprSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie), fichier)
  141. def majVisibilitePanneauxPlateau(self, mode):
  142. """affiche ou cache les panneaux d'edition, d'information et de gestion du plateau"""
  143. #self.ui.panneauInfosPlateau.setVisible(False)
  144. conditionPlateau = (len(mode) > 0)
  145. conditionModeCreation = (len(mode) > 0 and mode == "creation")
  146. conditionModeCombat = (len(mode) > 0 and mode == "combat")
  147. #panneaux d'infos
  148. self.ui.infoOrdreJeu.setVisible(conditionPlateau)
  149. self.ui.infoPion.setVisible(conditionPlateau)
  150. self.ui.infoDecor.setVisible(conditionPlateau)
  151. self.ui.infoCase.setVisible(conditionPlateau)
  152. #autre
  153. self.ui.nomPlateau.setVisible(conditionPlateau)
  154. self.ui.sauverPlateau.setVisible(conditionPlateau)
  155. self.ui.fermerPlateau.setVisible(conditionPlateau)
  156. self.ui.etiquetteModeAffichagePlateau.setVisible(conditionPlateau)
  157. self.ui.modeAffichagePlateau.setVisible(conditionPlateau)
  158. self.ui.combatTour.setVisible(conditionPlateau)
  159. #barre de combat:
  160. if len(mode) > 0:
  161. self.majVisibiliteBarreCombat("menu")
  162. else:
  163. self.majVisibiliteBarreCombat("aucun")
  164. self.ui.combatPasserTour.setVisible(conditionPlateau)
  165. self.ui.combatInventaire.setVisible(conditionPlateau)
  166. #modes creation/combat
  167. self.ui.modeCombatPlateau.setVisible(conditionModeCreation)
  168. self.ui.outilsEditionPlateau.setVisible(conditionModeCreation)
  169. self.ui.outilsCombatPlateau.setVisible(conditionModeCombat)
  170. self.ui.modeCreationPlateau.setVisible(conditionModeCombat)
  171. def reinitialiserPanneauxPlateau(self):
  172. """remet a neuf les commandes liees au plateau"""
  173. for panneau in [self.ui.panneauInfosPlateau, \
  174. self.ui.outilsEditionPlateau, \
  175. self.ui.outilsCombatPlateau]:
  176. #listes
  177. for liste in panneau.findChildren(QTableWidget):
  178. while liste.rowCount() > 0:
  179. liste.removeRow(0)
  180. #textes
  181. for texte in panneau.findChildren(QLineEdit):
  182. texte.clear()
  183. for texte in panneau.findChildren(QTextEdit):
  184. texte.clear()
  185. #a cocher
  186. for bouton in panneau.findChildren(QToolButton):
  187. if bouton.isCheckable():
  188. bouton.setChecked(False)
  189. #autre
  190. for item in panneau.findChildren(QSlider):
  191. item.setValue(1)
  192. for item in panneau.findChildren(QDoubleSpinBox):
  193. item.setValue(0)
  194. def barreCombatMenu(self):
  195. self.majVisibiliteBarreCombat("menu")
  196. def barreCombatVol(self):
  197. self.majVisibiliteBarreCombat("vol")
  198. def barreCombatZone(self):
  199. self.majVisibiliteBarreCombat("zone")
  200. def majVisibiliteBarreCombat(self, mode = ""):
  201. """affiche ou cache les commandes de la barre de combat"""
  202. #modes : "aucun", "menu", "vol", "zone"
  203. for item in self.ui.barreBasCombat.children():
  204. try:
  205. item.setVisible(False)
  206. except:
  207. pass
  208. if mode != "aucun":
  209. self.ui.combatPionSelectionne.setVisible(True)
  210. self.ui.combatPionSelectionne_img.setVisible(True)
  211. self.ui.combatPionSelectionne_img.setPixmap(QPixmap())
  212. self.ui.combatPasserTour.setVisible(True)
  213. self.ui.combatInventaire.setVisible(True)
  214. if mode == "menu" or mode == "":
  215. self.ui.combatDeplacement.setVisible(True)
  216. self.ui.combatAttaqueCaC.setVisible(True)
  217. self.ui.combatAttaqueDist.setVisible(True)
  218. self.ui.combatAttaqueZone.setVisible(True)
  219. self.ui.combatVol.setVisible(True)
  220. elif mode == "vol":
  221. self.ui.combatVol.setVisible(True)
  222. self.ui.combatVol_altitude.setVisible(True)
  223. self.ui.combatRetour.setVisible(True)
  224. elif mode == "zone":
  225. self.ui.combatZone_ligne.setVisible(True)
  226. self.ui.combatZone_disque.setVisible(True)
  227. self.ui.combatZone_disqueRayon.setVisible(True)
  228. self.ui.combatZone_cone.setVisible(True)
  229. self.ui.combatRetour.setVisible(True)
  230. if __name__ == "__main__":
  231. app = QApplication(argv)
  232. #settrace(trace_calls)
  233. dm = DMonde()
  234. dm.show()
  235. r = app.exec_()
  236. exit(r)