DMonde.py 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. """Interface principale du programme DMonde
  4. """
  5. from sys import exit, argv
  6. from PyQt4.QtCore import *
  7. from PyQt4.QtGui import *
  8. from lib.ui.ecran_principal import Ui_principal
  9. from lib.EcranCreerPlateau import EcranCreerPlateau
  10. from lib.EcranChargerPlateau import EcranChargerPlateau
  11. from lib.EcranFondPlateau import EcranFondPlateau
  12. from lib.EcranEditionCombattant import EcranEditionCombattant
  13. from lib.framePj import FramePj
  14. from lib.Plateau import Plateau
  15. from lib.outilsSvg import *
  16. class DMonde(QMainWindow):
  17. """interface comprenant: chat ecrit, fenetre d'infos, lancer de des, echange de fichiers, lancement du chat vocal"""
  18. def __init__(self, parent=None):
  19. """initialisation de la fenetre"""
  20. super (DMonde, self).__init__()
  21. self.plateau = None
  22. self.partie = "partie1"
  23. self.idPlateauEnCours = ""
  24. self.plateauConnecte = False
  25. self._compteurPj = 0
  26. self.createWidgets()
  27. def createWidgets(self):
  28. """construction de l'interface"""
  29. self.ui = Ui_principal()
  30. self.ui.setupUi(self)
  31. self.afficherPanneauxPlateau(False)
  32. self.connect(self.ui.cbt_sauver, SIGNAL("clicked()"), self.sauverPlateau)
  33. self.connect(self.ui.cbt_fermer, SIGNAL("clicked()"), self.fermerPlateau)
  34. self.ui.cbt_vue.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
  35. self.ui.cp_ongletsListes.setStyleSheet("QTabBar::tab { width: 38px; }")
  36. self.ui.pi_ongletsListes.setStyleSheet("QTabBar::tab { width: 38px; }")
  37. self.majFichierInfosSvg()
  38. self.creerEcranFondPlateau()
  39. self.chargerListePj()
  40. self.connect(self.ui.grp_nouveauPj, SIGNAL("clicked()"), self.nouveauPj)
  41. ## self.showMaximized()
  42. ########## onglet plateau
  43. def creerEcranFondPlateau(self):
  44. ecranFondPlateau = EcranFondPlateau(self)
  45. self.ui.cbt_vue.resetTransform()
  46. self.ui.cbt_vue.setScene(ecranFondPlateau)
  47. def afficherEcranCreerPlateau(self):
  48. """ouvre la fenetre de creation de plateau"""
  49. valide = True
  50. if self.plateau != None:
  51. if self.plateau.estCree() == True:
  52. valide = False
  53. if valide:
  54. self.creationPlateau = EcranCreerPlateau(self)
  55. self.creationPlateau.setWindowModality(Qt.ApplicationModal)
  56. self.creationPlateau.show()
  57. self.creationPlateau.raise_()
  58. def creerPlateau(self, nom, chapitre, formeCases, largeur, hauteur, couleur):
  59. """cree le plateau entre en parametre"""
  60. nouvelId = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
  61. QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
  62. self.plateau = Plateau(self)
  63. self.plateau.creer(nouvelId, nom, chapitre, formeCases, largeur, hauteur, couleur)
  64. QApplication.restoreOverrideCursor()
  65. del self.creationPlateau
  66. def afficherEcranChargerPlateau(self):
  67. """ouvre la fenetre de chargement de plateau"""
  68. valide = True
  69. if self.plateau != None:
  70. if self.plateau.estCree() == True:
  71. valide = False
  72. if valide:
  73. self.chargementPlateau = EcranChargerPlateau(self)
  74. self.chargementPlateau.setWindowModality(Qt.ApplicationModal)
  75. self.chargementPlateau.show()
  76. self.chargementPlateau.raise_()
  77. def chargerPlateau(self, nomFichierSvg):
  78. if self.plateau != None:
  79. if self.plateau.estCree() == True:
  80. self.fermerPlateau()
  81. QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
  82. self.plateau = chargerUnique("parties\\{}\\svg\\{}.p".format(self.partie, nomFichierSvg))
  83. if self.plateau:
  84. self.plateau.recreer(self)
  85. else:
  86. self.plateau = Plateau(self)
  87. QApplication.restoreOverrideCursor()
  88. def chargerDernierPlateau(self):
  89. """charge le dernier plateau sauvegarde"""
  90. infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
  91. dernier = None
  92. for id_svg in infosSvg:
  93. if not dernier or infosSvg[id_svg]["dateSvg"] > infosSvg[dernier]["dateSvg"]:
  94. dernier = id_svg
  95. if dernier:
  96. self.chargerPlateau(dernier)
  97. def sauverPlateau(self):
  98. QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
  99. if self.plateau.id in afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie)):
  100. idPlateau = self.plateau.id
  101. else:
  102. idPlateau = str(len(afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))))
  103. enregistrerUnique(self.plateau, "parties\\{}\\svg\\{}.p".format(self.partie, idPlateau))
  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(str(idPlateau), infos, "parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
  107. QApplication.restoreOverrideCursor()
  108. def fermerPlateau(self):
  109. self.plateau.fermer()
  110. self.plateau = None
  111. self.creerEcranFondPlateau()
  112. self.afficherPanneauxPlateau(False)
  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. f = []
  118. lstFichiersSvg = []
  119. for (dirpath, dirnames, filenames) in os.walk("parties\\{}\\svg\\".format(self.partie)):
  120. f.extend(filenames)
  121. break
  122. for fichier in f:
  123. fileName, fileExtension = os.path.splitext(fichier)
  124. if fileExtension == ".p":
  125. lstFichiersSvg.append(fileName)
  126. #on verifie leur presence dans le fichier 'infos_sauvegarde'
  127. infosSvg = afficheSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie))
  128. index = len(infosSvg)
  129. #on ajoute les sauvegardes manquantes si besoin
  130. for fichier in lstFichiersSvg:
  131. if not fichier in infosSvg:
  132. plateau = chargerUnique("parties\\{}\\svg\\{}.p".format(self.partie, fichier))
  133. enregistrer(fichier, {"nom": plateau.nom, "chapitre": plateau.chapitre, "dateCreation":plateau.dateCreation, "dateSvg":plateau.dateSvg, \
  134. "public": plateau.public, "enCours": plateau.enCours}, "svg\\infos_sauvegarde")
  135. index += 1
  136. #on supprime ceux qui ne sont plus trouves
  137. for fichier in infosSvg:
  138. if not fichier in lstFichiersSvg:
  139. supprSvg("parties\\{}\\svg\\infos_sauvegarde".format(self.partie), fichier)
  140. ########## apparence de l'onglet plateau
  141. def afficherPanneauxPlateau(self, actif):
  142. index = int(actif) # 0 si faux, 1 si vrai
  143. self.ui.cbt_panneauBas.setCurrentIndex(index)
  144. self.ui.cbt_panneauHaut.setCurrentIndex(index)
  145. self.ui.cbt_panneauDroite.setCurrentIndex(index)
  146. self.ui.cbt_panneauGauche.setCurrentIndex(index)
  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. listePj = chargerUnique("parties\\{}\\groupe".format(self.partie))
  174. if not listePj: listePj = []
  175. self.ui.grp_deroulement_layout.setAlignment(Qt.AlignTop)
  176. for pj in listePj:
  177. self.pjAjouterAListe(pj)
  178. def pjAjouterAListe(self, pj = None):
  179. self._compteurPj += 1
  180. panneau = FramePj(self._compteurPj)
  181. if pj:
  182. panneau.chargerPj(pj)
  183. panneau.setObjectName(QString("pj_panneau_{}".format(self._compteurPj)))
  184. self.connect(panneau, SIGNAL("pjModifie(int)"), self.pjEnregistrer)
  185. self.ui.grp_deroulement_layout.addWidget(panneau)
  186. def pjSupprimer(self, index):
  187. panneau = self.findChild(QFrame, "pj_panneau_{}".format(index))
  188. self.ui.grp_deroulement_layout.removeWidget(panneau)
  189. def nouveauPj(self):
  190. self.editionPj = EcranEditionCombattant()
  191. self.editionPj.setAttribute(Qt.WA_DeleteOnClose)
  192. self.editionPj.exec_()
  193. pj = self.editionPj.combattant
  194. self.pjAjouterAListe(pj)
  195. self.pjEnregistrer(self._compteurPj)
  196. def pjEnregistrer(self, idPj):
  197. listePj = chargerUnique("parties\\{}\\groupe".format(self.partie))
  198. if not listePj: listePj = []
  199. panneau = self.findChild(QFrame, "pj_panneau_{}".format(idPj))
  200. pj = panneau.pj()
  201. listePj.append(pj)
  202. enregistrerUnique(listePj, "parties\\{}\\groupe".format(self.partie))
  203. def resizeEvent(self, event):
  204. val = (self.ui.dm_panneauCentre.width() - 20) / 3
  205. self.ui.dm_panneauCentre.setStyleSheet("QTabBar::tab { height: 25; width: "+str(val)+"px; }")
  206. if __name__ == "__main__":
  207. app = QApplication(argv)
  208. #settrace(trace_calls)
  209. dm = DMonde()
  210. dm.show()
  211. r = app.exec_()
  212. exit(r)