DMonde.py 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. """Interface principale du programme DMonde
  4. """
  5. import os
  6. from sys import exit
  7. from PyQt4.QtCore import SIGNAL, Qt, QString
  8. from PyQt4.QtGui import QMainWindow, QGraphicsView, QTableWidget, QLineEdit, \
  9. QTextEdit, QToolButton, QSlider, QDoubleSpinBox, QWidget, QFrame, \
  10. QApplication
  11. from lib.Actions import Ligne
  12. from lib.Combattant import PJ
  13. from lib.EcranChargerPlateau import EcranChargerPlateau
  14. from lib.EcranCreerPlateau import EcranCreerPlateau
  15. from lib.EcranEditionMateriel import EcranEditionMateriel
  16. from lib.EcranFondPlateau import EcranFondPlateau
  17. from lib.Plateau import Plateau
  18. from lib.commun import rep, Session
  19. from lib.framePj import FramePj
  20. from lib.mat import chargerMat, supprimerMat
  21. from lib.outilsSvg import afficheSvg, enregistrer, chargerUnique, supprSvg
  22. from lib.rsc import RImage
  23. from lib.ui.ecran_principal import Ui_principal
  24. class DMonde(QMainWindow):
  25. """interface principale de DMonde"""
  26. def __init__(self, parent=None):
  27. """initialisation de la fenetre"""
  28. super (DMonde, self).__init__()
  29. self.plateau = None
  30. self.util = "Joueur"
  31. self.partie = ""
  32. self.regles = ""
  33. self.idPlateauEnCours = ""
  34. self.plateauConnecte = False
  35. self.pjs = [] #liste des idM des personnages du groupe
  36. self.createWidgets()
  37. def createWidgets(self):
  38. """construction de l'interface"""
  39. self.ui = Ui_principal()
  40. self.ui.setupUi(self)
  41. self.afficherPanneauxPlateau(False)
  42. self.connect(self.ui.cbt_sauver, SIGNAL("clicked()"), self.enregistrerPlateau)
  43. self.connect(self.ui.cbt_fermer, SIGNAL("clicked()"), self.fermerPlateau)
  44. self.connect(self.ui.grp_nouveauPj, SIGNAL("clicked()"), self.nouveauPj)
  45. self.ui.cbt_vue.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
  46. self.ui.cp_ongletsListes.setStyleSheet("QTabBar::tab { width: 38px; }")
  47. self.ui.pi_ongletsListes.setStyleSheet("QTabBar::tab { width: 38px; }")
  48. self.creerEcranFondPlateau()
  49. self.chargerPartie("")
  50. # self.showMaximized()
  51. def estMj(self):
  52. return True
  53. def chargerPartie(self, idPartie):
  54. """charge la partie"""
  55. self.profil = "olivier"
  56. self.partie = "partie1"
  57. self.regles = "dd35"
  58. self.majFichierInfosSvg()
  59. self.chargerListePj()
  60. ########## onglet plateau
  61. def creerEcranFondPlateau(self):
  62. ecranFondPlateau = EcranFondPlateau(self)
  63. self.ui.cbt_vue.resetTransform()
  64. self.ui.cbt_vue.setScene(ecranFondPlateau)
  65. def nouveauPlateau(self):
  66. """ouvre la fenetre de creation de plateau"""
  67. if self.plateau != None:
  68. if self.plateau.estCree() == True:
  69. return
  70. self.creationPlateau = EcranCreerPlateau()
  71. plateau = Plateau(self)
  72. self.creationPlateau.afficher(plateau)
  73. r = self.creationPlateau.exec_()
  74. if r == 1:
  75. self.plateau = self.creationPlateau.resultat()
  76. self.plateau.creer()
  77. def afficherEcranChargerPlateau(self):
  78. """ouvre la fenetre de chargement de plateau"""
  79. if self.plateau != None:
  80. if self.plateau.estCree(): return
  81. fen = EcranChargerPlateau(self)
  82. fen.show()
  83. r = fen.exec_()
  84. if r == 1:
  85. idM = fen.resultat()
  86. del fen
  87. self.chargerPlateau(idM)
  88. def chargerPlateau(self, idM):
  89. if self.plateau:
  90. if self.plateau.estCree(): self.fermerPlateau()
  91. self.plateau = chargerMat(idM, "cbt")
  92. self.plateau.recreer(self)
  93. def chargerDernierPlateau(self):
  94. """charge le dernier plateau sauvegarde"""
  95. infosSvg = afficheSvg(os.path.join(rep("cbt"), "infos_sauvegarde"))
  96. dernier = None
  97. for id_svg in infosSvg:
  98. if not dernier or infosSvg[id_svg]["dateSvg"] > infosSvg[dernier]["dateSvg"]:
  99. dernier = id_svg
  100. if dernier:
  101. self.chargerPlateau(dernier)
  102. def enregistrerPlateau(self):
  103. self.plateau.enregistrer("cbt")
  104. infos = {"nom": self.plateau.nom(), "chapitre": self.plateau.chapitre, "dateCreation":self.plateau.dateCreation, "dateSvg":self.plateau.dateSvg, \
  105. "public": self.plateau.public, "enCours": self.plateau.enCours}
  106. enregistrer(self.plateau.idM(), infos, os.path.join(rep("cbt"), "infos_sauvegarde"))
  107. def fermerPlateau(self):
  108. self.plateau.fermer()
  109. self.plateau = None
  110. self.creerEcranFondPlateau()
  111. self.afficherPanneauxPlateau(False)
  112. def majFichierInfosSvg(self):
  113. """construit/maj le fichier contenant la liste des
  114. plateaux sauvegardes et leurs informations"""
  115. #on parcourt les fichiers de sauvegarde
  116. f = []
  117. lstFichiersSvg = []
  118. for (dirpath, dirnames, filenames) in os.walk(rep("cbt")):
  119. f.extend(filenames)
  120. break
  121. for fichier in f:
  122. fileName, fileExtension = os.path.splitext(fichier)
  123. if fileExtension == ".dm":
  124. lstFichiersSvg.append(fileName)
  125. #on verifie leur presence dans le fichier 'infos_sauvegarde'
  126. infosSvg = afficheSvg(os.path.join(rep("cbt"), "infos_sauvegarde"))
  127. index = len(infosSvg)
  128. #on ajoute les sauvegardes manquantes si besoin
  129. for fichier in lstFichiersSvg:
  130. if not fichier in infosSvg:
  131. plateau = chargerUnique(os.path.join(rep("cbt"), "{}.dm".format(fichier)))
  132. enregistrer(fichier, {"nom": plateau.nom(), "chapitre": plateau.chapitre, "dateCreation":plateau.dateCreation, "dateSvg":plateau.dateSvg, \
  133. "public": plateau.public, "enCours": plateau.enCours}, "svg\\infos_sauvegarde")
  134. index += 1
  135. #on supprime ceux qui ne sont plus trouves
  136. for fichier in infosSvg:
  137. if not fichier in lstFichiersSvg:
  138. supprSvg(os.path.join(rep("cbt"), "infos_sauvegarde"), fichier)
  139. ########## apparence de l'onglet plateau
  140. def afficherPanneauxPlateau(self, actif):
  141. index = int(actif) # 0 si faux, 1 si vrai
  142. self.ui.cbt_panneauBas.setCurrentIndex(index)
  143. self.ui.cbt_panneauHaut.setCurrentIndex(index)
  144. self.ui.cbt_panneauDroite.setCurrentIndex(index)
  145. self.ui.cbt_panneauGauche.setCurrentIndex(index)
  146. self.ui.cbt_etapeSuivante.setVisible(actif)
  147. def reinitialiserPanneauxPlateau(self):
  148. """remet a neuf les commandes liees au plateau"""
  149. for panneau in [self.ui.cbt_panneauHaut, \
  150. self.ui.cbt_panneauBas, \
  151. self.ui.cbt_panneauGauche, \
  152. self.ui.cbt_panneauDroite]:
  153. #listes
  154. for liste in panneau.findChildren(QTableWidget):
  155. while liste.rowCount() > 0:
  156. liste.removeRow(0)
  157. #textes
  158. for texte in panneau.findChildren(QLineEdit):
  159. texte.clear()
  160. for texte in panneau.findChildren(QTextEdit):
  161. texte.clear()
  162. #a cocher
  163. for bouton in panneau.findChildren(QToolButton):
  164. if bouton.isCheckable():
  165. bouton.setChecked(False)
  166. #autre
  167. for item in panneau.findChildren(QSlider):
  168. item.setValue(1)
  169. for item in panneau.findChildren(QDoubleSpinBox):
  170. item.setValue(0)
  171. ########## onglet groupe
  172. def chargerListePj(self):
  173. for attributsFichier in os.walk(rep("grp")):
  174. for f in attributsFichier[2]:
  175. pj = chargerMat(os.path.join(attributsFichier[0], f))
  176. self.pjAjouterAListe(pj)
  177. self.ui.grp_deroulement_layout.setAlignment(Qt.AlignTop)
  178. def pjAjouterAListe(self, pj = None):
  179. compteur = len(self.pjs)
  180. colonne = (compteur % 3) * 2
  181. ligne = int(compteur / 3)
  182. self.pjs.append(pj.idM())
  183. panneau = FramePj(compteur)
  184. if pj:
  185. panneau.chargerPj(pj)
  186. panneau.setObjectName(QString("pj_panneau_{}".format(compteur)))
  187. self.connect(panneau, SIGNAL("pjModifie(int)"), self.pjEnregistrer)
  188. self.ui.grp_deroulement_layout.addWidget(panneau, ligne, colonne)
  189. ## pour l'espacement entre les panneaux
  190. w = QWidget()
  191. self.ui.grp_deroulement_layout.addWidget(w, ligne, colonne + 1)
  192. def pjSupprimer(self, index):
  193. panneau = self.findChild(QFrame, "pj_panneau_{}".format(index))
  194. pj = panneau.pj()
  195. supprimerMat(pj.idM(), "grp")
  196. self.ui.grp_deroulement_layout.removeWidget(panneau)
  197. def nouveauPj(self):
  198. fen = EcranEditionMateriel(PJ())
  199. fen.afficher()
  200. fen.exec_()
  201. pj = fen.mat()
  202. del fen
  203. pj.enregistrer("grp")
  204. self.pjAjouterAListe(pj)
  205. def pjEnregistrer(self, idPj):
  206. panneau = self.findChild(QFrame, "pj_panneau_{}".format(idPj))
  207. pj = panneau.pj()
  208. pj.enregistrer("grp")
  209. def resizeEvent(self, event):
  210. val = (self.ui.dm_panneauCentre.width() - 20) / 3
  211. self.ui.dm_panneauCentre.setStyleSheet("QTabBar::tab { height: 25; width: "+str(val)+"px; }")
  212. if __name__ == "__main__":
  213. s = Session()
  214. arg = ["DMonde", s.idS()]
  215. app = QApplication(arg)
  216. #settrace(trace_calls)
  217. dm = DMonde()
  218. dm.show()
  219. r = app.exec_()
  220. s.fin()
  221. exit(r)