gM.py 7.8 KB

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