gM.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. '''gestion des materiels pour le plateau'''
  2. from PyQt4.QtCore import SIGNAL, Qt
  3. from lib.EcranEditionMateriel import EcranEditionMateriel, nouveauCombattant, nouveauDecor
  4. from lib.EcranEditionTerrain import EcranEditionTerrain
  5. from lib.explorateurMat import importerMateriel
  6. from lib.mat import chargerMat
  7. class GestionMateriel(object):
  8. '''gestion du materiel'''
  9. def __init__(self):
  10. self._m = [] #liste des idM des materiels utilisees par le plateau
  11. def __getstate__(self):
  12. state = {key:value for key, value in self.__dict__.items() if not key in ["prog"]}
  13. return (state)
  14. def __setstate__(self, state):
  15. self.__dict__ = state
  16. def initialiser(self, prog):
  17. """charge les tables de materiel avec les mat enregistres"""
  18. self.prog = prog
  19. for typMat in ["tr", "dc", "cb"]:
  20. self.table(typMat).charger(self.chargerMateriels(typMat))
  21. self.prog.connect(self.prog.ui.cp_importTerrain, SIGNAL("clicked()"), self.importerTr, Qt.UniqueConnection)
  22. self.prog.connect(self.prog.ui.cp_importDecor, SIGNAL("clicked()"), self.importerDc, Qt.UniqueConnection)
  23. self.prog.connect(self.prog.ui.cp_importCombattant, SIGNAL("clicked()"), self.importerCb, Qt.UniqueConnection)
  24. self.prog.connect(self.prog.ui.cp_editerTerrain, SIGNAL("clicked()"), self.terrainEdit, Qt.UniqueConnection)
  25. self.prog.connect(self.prog.ui.cp_nouveauTerrain, SIGNAL("clicked()"), self.terrainNouveau, Qt.UniqueConnection)
  26. self.prog.connect(self.prog.ui.cp_retirerTerrain, SIGNAL("clicked()"), self.terrainRetirer, Qt.UniqueConnection)
  27. self.prog.connect(self.prog.ui.cp_editerCombattant, SIGNAL("clicked()"), self.creatureEdit, Qt.UniqueConnection)
  28. self.prog.connect(self.prog.ui.cp_nouveauCombattant, SIGNAL("clicked()"), self.creatureNouveau, Qt.UniqueConnection)
  29. self.prog.connect(self.prog.ui.cp_retirerCombattant, SIGNAL("clicked()"), self.creatureRetirer, Qt.UniqueConnection)
  30. self.prog.connect(self.prog.ui.cp_editerDecor, SIGNAL("clicked()"), self.decorEdit, Qt.UniqueConnection)
  31. self.prog.connect(self.prog.ui.cp_nouveauDecor, SIGNAL("clicked()"), self.decorNouveau, Qt.UniqueConnection)
  32. self.prog.connect(self.prog.ui.cp_retirerDecor, SIGNAL("clicked()"), self.decorRetirer, Qt.UniqueConnection)
  33. def vider(self):
  34. pass
  35. def ajouterMat(self, idR):
  36. if not idR in self._m: self._m.append(idR)
  37. def materiels(self, filtre=""):
  38. return [m for m in self._m if (m[:2] == filtre or len(filtre) == 0)]
  39. def chargerMateriels(self, filtre = ""):
  40. listeMat = []
  41. for idM in self.materiels(filtre):
  42. listeMat.append(chargerMat(idM))
  43. return listeMat
  44. def table(self, typ):
  45. """renvoie le nom de la table correspondant au type de mat demande"""
  46. tables = {"tr": self.prog.ui.cp_listeTerrains, \
  47. "dc": self.prog.ui.cp_listeDecors, \
  48. "cb":self.prog.ui.cp_listeCreatures}
  49. return tables[typ]
  50. def reinitModePlateau(self):
  51. """ramene le mode du plateau au mode creation standard"""
  52. if self.prog.plateau:
  53. self.prog.plateau.plateauModeCreation()
  54. def importerTr(self):
  55. self.importer(0)
  56. def importerDc(self):
  57. self.importer(1)
  58. def importerCb(self):
  59. self.importer(2)
  60. def importer(self, ongletInit = 0):
  61. listeMat = importerMateriel(ongletInit)
  62. for idMat in listeMat:
  63. self.ajouterMat(idMat)
  64. self.majTables()
  65. def majTables(self):
  66. self.majListeTerrains()
  67. self.majListeDecors()
  68. self.majListeCreatures()
  69. ### TERRAINS
  70. def majListeTerrains(self):
  71. """mise a jour de la liste des terrains depuis la sauvegarde"""
  72. self.prog.ui.cp_listeTerrains.vider()
  73. self.prog.ui.cp_listeTerrains.charger(self.chargerMateriels("tr"))
  74. def terrainEdit(self):
  75. """ouvre la fenetre 'terrains' en mode edition"""
  76. mat = chargerMat(self.prog.ui.cp_listeTerrains.selection())
  77. self.afficheEcranEditionTerrains(mat)
  78. self.reinitModePlateau()
  79. def terrainNouveau(self):
  80. """ouvre la fenetre 'terrains' en mode edition"""
  81. self.afficheEcranEditionTerrains()
  82. self.reinitModePlateau()
  83. def afficheEcranEditionTerrains(self, terrain = None):
  84. """affiche l'ecran d'edition/creation de terrains"""
  85. fen = EcranEditionTerrain(terrain)
  86. r = fen.exec_()
  87. if r == 1:
  88. terrain = fen.terrain
  89. if terrain: terrain.enregistrer()
  90. self.ajouterMat(terrain.idM())
  91. self.majListeTerrains()
  92. self.reinitModePlateau()
  93. del fen
  94. def terrainRetirer(self):
  95. """retire le terrain selectionne de la table"""
  96. idM = self.prog.ui.cp_listeTerrains.selection()
  97. if idM:
  98. self._m.remove(idM)
  99. self.majListeTerrains()
  100. ### CREATURES
  101. def majListeCreatures(self):
  102. """mise a jour de la liste des creatures depuis la sauvegarde"""
  103. self.prog.ui.cp_listeCreatures.vider()
  104. self.prog.ui.cp_listeCreatures.charger(self.chargerMateriels("cb"))
  105. def creatureEdit(self):
  106. """ouvre la fenetre 'creatures' en mode edition"""
  107. mat = chargerMat(self.prog.ui.cp_listeCreatures.selection())
  108. self.afficheEcranEditionCombattants(mat)
  109. self.reinitModePlateau()
  110. def creatureNouveau(self):
  111. """ouvre la fenetre 'creatures' en mode edition"""
  112. combattant = nouveauCombattant()
  113. self.afficheEcranEditionCombattants(combattant)
  114. self.reinitModePlateau()
  115. def afficheEcranEditionCombattants(self, combattant):
  116. """affiche l'ecran d'edition/creation de creatures"""
  117. fen = EcranEditionMateriel(combattant)
  118. fen.afficher()
  119. r = fen.exec_()
  120. if r == 1:
  121. combattant = fen.mat()
  122. if combattant: combattant.enregistrer()
  123. self.ajouterMat(combattant.idM())
  124. self.majListeCreatures()
  125. self.reinitModePlateau()
  126. del fen
  127. def creatureRetirer(self):
  128. """retire la creature selectionne de la table"""
  129. idM = self.prog.ui.cp_listeCreatures.selection()
  130. if idM:
  131. self._m.remove(idM)
  132. self.majListeCreatures()
  133. ### DECORS
  134. def majListeDecors(self):
  135. """mise a jour de la liste des decors depuis la sauvegarde"""
  136. self.prog.ui.cp_listeDecors.vider()
  137. self.prog.ui.cp_listeDecors.charger(self.chargerMateriels("dc"))
  138. def decorEdit(self):
  139. """ouvre la fenetre 'decors' en mode edition"""
  140. mat = chargerMat(self.prog.ui.cp_listeDecors.selection())
  141. self.afficheEcranEditionDecors(mat)
  142. self.reinitModePlateau()
  143. def decorNouveau(self):
  144. """ouvre la fenetre 'decors' en mode edition"""
  145. decor = nouveauDecor()
  146. self.afficheEcranEditionDecors(decor)
  147. self.reinitModePlateau()
  148. def afficheEcranEditionDecors(self, decor):
  149. """affiche l'ecran d'edition/creation de decors"""
  150. fen = EcranEditionMateriel(decor)
  151. fen.afficher()
  152. r = fen.exec_()
  153. if r == 1:
  154. decor = fen.mat()
  155. if decor: decor.enregistrer()
  156. self.ajouterMat(decor.idM())
  157. self.majListeDecors()
  158. self.reinitModePlateau()
  159. del fen
  160. def decorRetirer(self):
  161. """retire le decor selectionne de la table"""
  162. idM = self.prog.ui.cp_listeDecors.selection()
  163. if idM:
  164. self._m.remove(idM)
  165. self.majListeDecors()