DMonde.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. """Interface principale du programme DMonde
  4. """
  5. import os
  6. from PyQt4.QtCore import SIGNAL, Qt, QSignalMapper
  7. from PyQt4.QtGui import QMainWindow, QApplication, QGraphicsView
  8. from lib.EcranChargerPartie import EcranChargerPartie
  9. from lib.FenetreEditionPartie import FenetreEditionPartie
  10. from lib.Partie import Partie
  11. from lib.Profil import Profil
  12. from lib.commun import Session, sessionEnCours, rep
  13. from lib.mat import chargerMat
  14. from lib.ui.ecran_principal import Ui_principal
  15. class DMonde(QMainWindow):
  16. """interface principale de DMonde"""
  17. def __init__(self, parent=None):
  18. """initialisation de la fenetre"""
  19. super (DMonde, self).__init__()
  20. self.profil = Profil()
  21. self.partie = None
  22. self.createWidgets()
  23. self.mapper = QSignalMapper()
  24. def createWidgets(self):
  25. """construction de l'interface"""
  26. self.ui = Ui_principal()
  27. self.ui.setupUi(self)
  28. self.connect(self.ui.dm_panneauCentre, SIGNAL("currentChanged(int)"), self.rafraichir)
  29. ### DM
  30. self.connect( self.ui.pt_nouvelle, SIGNAL("clicked()"), self.nouvellePartie)
  31. self.connect( self.ui.pt_editer, SIGNAL("clicked()"), self.editerPartie)
  32. self.connect( self.ui.pt_fermer, SIGNAL("clicked()"), self.fermerPartie)
  33. self.connect( self.ui.pt_charger, SIGNAL("clicked()"), self.afficherEcranChargerPartie)
  34. ### partie
  35. ### plateau
  36. self.ui.cbt_vue.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
  37. self.ui.cp_ongletsListes.setStyleSheet("QTabBar::tab { width: 41px; }")
  38. self.ui.pi_ongletsListes.setStyleSheet("QTabBar::tab { width: 38px; }")
  39. self.ouverture()
  40. def connexionsPartie(self):
  41. return [
  42. ( self.ui.pt_enregistrer , "clicked()" ,self.partie.enregistrer , None ), \
  43. ( self.ui.cbt_enCours , "clicked()" ,self.partie.chargerDernierPlateau , None ), \
  44. ( self.ui.cbt_charger , "clicked()" ,self.partie.afficherEcranChargerPlateau , None ), \
  45. ( self.ui.cbt_creer , "clicked()" ,self.partie.nouveauPlateau , None ), \
  46. ( self.ui.cbt_sauver , "clicked()" ,self.partie.enregistrerPlateau , None ), \
  47. ( self.ui.cbt_fermer , "clicked()" ,self.partie.fermerPlateau , None ), \
  48. ( self.ui.grp_nouveauPj , "clicked()" ,self.partie.nouveauPj , None )
  49. ]
  50. def connecterPartie(self, actif = True):
  51. if not self.partie: return
  52. for w, s, f, p in self.connexionsPartie():
  53. if actif:
  54. self.connect(w, SIGNAL(s), f, Qt.UniqueConnection)
  55. if p != None: pass
  56. else:
  57. self.disconnect(w, SIGNAL(s))
  58. def connexionsPlateau(self):
  59. return [
  60. (self.ui.cbt_modeCreation , "clicked()" , self.partie.plateau.plateauModeCreation , None ), \
  61. (self.ui.cbt_modeCombat , "clicked()" , self.partie.plateau.plateauModeCombat , None ), \
  62. (self.ui.cbt_etapeSuivante , "clicked()" , self.partie.plateau.etapeSuivante , None ), \
  63. (self.ui.pc_listePJ , "cellClicked(int, int)" , self.partie.plateau.ajouterPj , None ), \
  64. (self.ui.cbt_nom , "clicked()" , self.partie.plateau.afficherEcranPlateau , None ), \
  65. (self.ui.cbt_afficherGestion , "clicked()" , self.partie.plateau.afficheEcranGestionCombat , None ), \
  66. (self.ui.pi_listeAttributs , "cellChanged(int,int)" , self.partie.plateau.listeAttributCelluleModifiee , None ), \
  67. (self.ui.cp_dialogueCouleurs , "clicked()" , self.partie.plateau.modePeintureCase , None ), \
  68. (self.ui.cp_afficherNotes , "clicked()" , self.partie.plateau.agrandirNotesMjPlateau , None ), \
  69. (self.ui.pi_fiche , "clicked()" , self.partie.plateau.afficherFichePion , None ), \
  70. (self.ui.cp_listeTerrains , "cellClicked(int,int)" , self.partie.plateau.modeMajTerrainCase , None ), \
  71. (self.ui.cp_listeCreatures , "cellClicked(int,int)" , self.partie.plateau.modeCreationCombattant , None ), \
  72. (self.ui.cp_listeDecors , "cellClicked(int,int)" , self.partie.plateau.modeCreationDecor , None ), \
  73. (self.ui.cp_epaisseurPinceau , "valueChanged(int)" , self.partie.plateau.majEpaisseurPinceau , None ), \
  74. (self.ui.cp_pipetteCouleur , "clicked()" , self.partie.plateau.modeCopieTerrain , None ), \
  75. (self.ui.cp_effets , "activated(int)" , self.partie.plateau.modeCaseEffet , None ), \
  76. (self.ui.cp_gomme , "clicked()" , self.partie.plateau.majModeSupprimerPions , None ), \
  77. (self.ui.cp_placerEntree , "clicked()" , self.partie.plateau.majModeDefinirEntree , None ), \
  78. (self.ui.cp_placerCache , "clicked()" , self.partie.plateau.majModePlacerCache , None ), \
  79. (self.ui.cp_placerSortie , "clicked()" , self.partie.plateau.majModeDefinirSortie , None ), \
  80. (self.ui.cp_defPlacement , "clicked()" , self.partie.plateau.majModeZonePlacement , None ), \
  81. (self.ui.pi_notes , "textChanged()" , self.partie.plateau.majNotesCombattant , None ), \
  82. (self.ui.cp_formeSimple , "clicked()" , self.partie.plateau.majModeForme , None ), \
  83. (self.ui.cp_formeLigne , "clicked()" , self.partie.plateau.majModeForme , None ), \
  84. (self.ui.cp_formeLigneOrientee , "clicked()" , self.partie.plateau.majModeForme , None ), \
  85. (self.ui.cp_formePot , "clicked()" , self.partie.plateau.majModeForme , None ), \
  86. (self.ui.cp_formeRectVide , "clicked()" , self.partie.plateau.majModeForme , None ), \
  87. (self.ui.cp_formeRectPlein , "clicked()" , self.partie.plateau.majModeForme , None ), \
  88. (self.ui.act_deplacement , "clicked()" , self.partie.plateau.majModeCombatDeplacement , None ), \
  89. (self.ui.act_attaqueCac , "clicked()" , self.partie.plateau.majModeCombatAttaqueCaC , None ), \
  90. (self.ui.act_attaqueDist , "clicked()" , self.partie.plateau.majModeCombatAttaqueDist , None ), \
  91. (self.ui.act_attaqueZone , "clicked()" , self.partie.plateau.majModeCombatZone , None )
  92. ]
  93. def connecterPlateau(self, actif = True):
  94. if not self.partie: return
  95. if not self.partie.plateau: return
  96. for w, s, f, p in self.connexionsPlateau():
  97. if actif:
  98. self.connect(w, SIGNAL(s), f, Qt.UniqueConnection)
  99. if p != None:
  100. self.mapper.setMapping( w, p )
  101. else:
  102. self.disconnect(w, SIGNAL(s))
  103. def ouverture(self):
  104. """operations menees a l'ouverture de la fenetre principale"""
  105. self.majAffichage()
  106. def rafraichir(self):
  107. """fonction utilisee pour forcer le repaint"""
  108. self.majLargeurOnglets()
  109. def majAffichage(self):
  110. actif = (self.partie != None)
  111. if not actif: self.ui.dm_panneauCentre.setCurrentIndex(0)
  112. self.ui.dm_panneauCentre.setTabEnabled(1, actif)
  113. self.ui.dm_panneauCentre.setTabEnabled(2, actif)
  114. self.ui.dm_panneauCentre.setTabEnabled(3, actif)
  115. self.ui.pt_page.setCurrentIndex( (1 if actif else 0) )
  116. def majLargeurOnglets(self):
  117. val = (self.ui.dm_panneauCentre.width() - 20) / 4
  118. self.ui.dm_panneauCentre.setStyleSheet("QTabBar::tab { height: 25; width: "+str(val)+"px; }")
  119. ### gestion partie
  120. def majPartie(self, partie):
  121. if partie:
  122. self.partie = partie
  123. s = sessionEnCours()
  124. idM = self.partie.idM() if self.partie else "defaut"
  125. s.majPartie(idM)
  126. s.enregistrer()
  127. self.connecterPartie()
  128. self.partie.afficher(self)
  129. self.majAffichage()
  130. else:
  131. self.partie = None
  132. def nouvellePartie(self):
  133. fen = FenetreEditionPartie()
  134. fen.nouvelle()
  135. fen.show()
  136. r = fen.exec_()
  137. if r == 1:
  138. self.majPartie( fen.resultat() )
  139. del fen
  140. def editerPartie(self):
  141. if not self.partie: return
  142. fen = FenetreEditionPartie()
  143. fen.charger(self.partie)
  144. fen.show()
  145. r = fen.exec_()
  146. if r == 1:
  147. self.majPartie( fen.resultat() )
  148. del fen
  149. def fermerPartie(self):
  150. if self.partie != None:
  151. self.partie.fermer()
  152. self.partie = None
  153. self.majAffichage()
  154. def afficherEcranChargerPartie(self):
  155. fen = EcranChargerPartie(self)
  156. fen.show()
  157. r = fen.exec_()
  158. if r == 1:
  159. idM = fen.resultat()
  160. self.chargerPartie(idM)
  161. del fen
  162. def chargerPartie(self, idPartie):
  163. """charge la partie"""
  164. repParties = os.path.join( rep("app"), "parties\\" )
  165. chemin = os.path.join( os.path.join( repParties, "{}\\".format(idPartie) ), "{}.dm".format(idPartie) )
  166. partie = chargerMat( chemin )
  167. if partie:
  168. self.majPartie( partie )
  169. ### evenements
  170. def resizeEvent(self, event):
  171. self.majLargeurOnglets()
  172. if __name__ == "__main__":
  173. s = Session()
  174. arg = ["DMonde", s.idS()]
  175. app = QApplication(arg)
  176. #settrace(trace_calls)
  177. dm = DMonde()
  178. dm.show()
  179. dm.rafraichir()
  180. r = app.exec_()
  181. s.fin()
  182. exit(r)