explorateurMat.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. # -*- coding: utf-8 -*-
  2. '''
  3. Fenetre d'exploration des materiels du jeu
  4. '''
  5. from os.path import os
  6. from PyQt4.QtCore import SIGNAL, QString, Qt
  7. from PyQt4.QtGui import QDialog, QFrame, QColor, QPalette, QApplication
  8. from lib.EcranEditionCombattant import EcranEditionCombattant
  9. from lib.EcranEditionDecor import EcranEditionDecor
  10. from lib.EcranEditionTerrain import EcranEditionTerrain
  11. from lib.commun import rep, charger, Session
  12. from lib.dialogues import dmConfirmer
  13. from lib.mat import supprimerMat
  14. from ui.ecran_explorateurMat import Ui_exm_fenetre
  15. from ui.panneauMateriel import Ui_pem_panneau
  16. def importerMateriel(ongletInit = 0):
  17. expl = ExplorateurMateriel(ongletInit)
  18. expl.charger()
  19. expl.exec_()
  20. listeMat = expl.selection()
  21. del expl
  22. return listeMat
  23. class ExplorateurMateriel(QDialog):
  24. def __init__(self, ongletInit = 0, parent=None):
  25. """initialisation de la fenetre"""
  26. super (ExplorateurMateriel, self).__init__(parent)
  27. self.createWidgets()
  28. self._selection = []
  29. self.ui.exm_onglets.setCurrentIndex(ongletInit)
  30. def createWidgets(self):
  31. """construction de l'interface"""
  32. self.ui = Ui_exm_fenetre()
  33. self.ui.setupUi(self)
  34. self.connect(self.ui.exm_ok, SIGNAL("clicked()"), self.valider)
  35. self.connect(self.ui.exm_annuler, SIGNAL("clicked()"), self.annuler)
  36. self.connect(self.ui.exm_filtreNom, SIGNAL("textEdited(QString)"), self.majFiltre)
  37. self.initLayout()
  38. def layout(self, typMat):
  39. dico = {"tr" : self.ui.exm_layout_tr, \
  40. "cb" : self.ui.exm_layout_cb, \
  41. "dc" : self.ui.exm_layout_dc}
  42. return dico[typMat]
  43. def charger(self):
  44. """charge les images disponibles dans l'explorateur"""
  45. listeMat = []
  46. for attributsFichier in os.walk(rep("jeu")):
  47. for f in attributsFichier[2]:
  48. if os.path.splitext(f)[1] == ".dm":
  49. mat = charger(os.path.join(rep("jeu"), f))
  50. listeMat.append(mat)
  51. listeMat.sort(key=lambda x: x.nom)
  52. for mat in listeMat:
  53. self.ajouterMat(mat)
  54. def ajouterMat(self, mat):
  55. """ajoute un panneau materiel a la liste deroulante correspondante"""
  56. panneau = PanneauMateriel(self)
  57. panneau.chargerMat(mat)
  58. self.layout(mat.idM()[:2]).addWidget(panneau)
  59. def selection(self):
  60. return self._selection
  61. def majSelection(self, idMat):
  62. if idMat in self._selection:
  63. self._selection.remove(idMat)
  64. else:
  65. self._selection.append(idMat)
  66. self.majAffichage()
  67. def majAffichage(self):
  68. self.ui.exm_ok.setEnabled((len(self._selection) > 0))
  69. self.ui.exm_ok.setText(QString("Importer ({})".format(len(self._selection))))
  70. def retirerPanneau(self, panneau):
  71. idM = panneau.mat().idM()
  72. if idM in self._selection: self._selection.remove(idM)
  73. layout = self.layout(idM[:2])
  74. layout.removeWidget(panneau)
  75. panneau.setParent(None)
  76. layout.update()
  77. def majFiltre(self):
  78. filtreNom = self.ui.exm_filtreNom.text()
  79. self.emit(SIGNAL("majFiltre(QString)"), filtreNom)
  80. def initLayout(self):
  81. for layout in [self.ui.exm_layout_tr, self.ui.exm_layout_cb, self.ui.exm_layout_dc]:
  82. layout.setColumnMinimumWidth(0, 140)
  83. layout.setColumnStretch(0, 1)
  84. layout.setColumnMinimumWidth(1, 140)
  85. layout.setColumnStretch(1, 1)
  86. layout.setColumnMinimumWidth(2, 140)
  87. layout.setColumnStretch(2, 1)
  88. layout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
  89. def valider(self):
  90. self.done(1)
  91. def annuler(self):
  92. self._selection = []
  93. self.done(0)
  94. class PanneauMateriel(QFrame):
  95. def __init__(self, fenetre, parent=None):
  96. """initialisation de la fenetre"""
  97. self.fenetre = fenetre
  98. super (PanneauMateriel, self).__init__(parent)
  99. self.createWidgets()
  100. self._mat = None
  101. self._selectionnee = False
  102. def createWidgets(self):
  103. """construction de l'interface"""
  104. self.ui = Ui_pem_panneau()
  105. self.ui.setupUi(self)
  106. self.ui.pem_editer.setVisible(False)
  107. self.ui.pem_supprimer.setVisible(False)
  108. self.connect(self.fenetre, SIGNAL("majFiltre(QString)"), self.appliquerFiltre)
  109. self.connect(self.ui.pem_image, SIGNAL("clicked()"), self.clic)
  110. self.connect(self.ui.pem_nom, SIGNAL("clicked()"), self.clic)
  111. self.connect(self.ui.pem_editer, SIGNAL("clicked()"), self.editer)
  112. self.connect(self.ui.pem_supprimer, SIGNAL("clicked()"), self.supprimer)
  113. self.setMouseTracking(True)
  114. def selectionner(self, actif):
  115. self._selectionnee = actif
  116. if actif:
  117. couleur = QColor(250, 250, 250, 250)
  118. else:
  119. couleur = QColor(240, 240, 240, 240)
  120. palette = QPalette()
  121. palette.setColor(QPalette.Window, couleur)
  122. self.setPalette(palette)
  123. def mat(self):
  124. return self._mat
  125. def chargerMat(self, mat):
  126. self._mat = mat
  127. self.maj()
  128. def maj(self):
  129. self.ui.pem_image.chargerImage(self._mat.icone())
  130. self.ui.pem_nom.majTexte(self._mat.nom())
  131. def editer(self):
  132. if self._mat.typ() == "tr":
  133. fen = EcranEditionTerrain(self._mat)
  134. elif self.mat().typ() == "cb":
  135. fen = EcranEditionCombattant(self._mat)
  136. elif self.mat().typ() == "dc":
  137. fen = EcranEditionDecor(self._mat)
  138. r = fen.exec_()
  139. if r == 1:
  140. mat = fen.mat()
  141. if mat:
  142. mat.enregistrer()
  143. self._mat = mat
  144. del fen
  145. def supprimer(self):
  146. msg = "Êtes-vous sûr de vouloir supprimer définitivement: \n\n{}".format(self._mat.nom())
  147. if not dmConfirmer(msg): return
  148. supprimerMat(self._mat.idM())
  149. self.fenetre.retirerPanneau(self)
  150. def appliquerFiltre(self, filtreNom):
  151. self.setVisible(str(filtreNom.toUtf8()).lower() in self._mat.nom().lower())
  152. def clic(self):
  153. self.selectionner(not self._selectionnee)
  154. self.fenetre.majSelection(self.mat().idM())
  155. def mousePressEvent(self, event):
  156. if event.button() == 1:
  157. self.clic()
  158. def enterEvent(self, event):
  159. self.ui.pem_editer.setVisible(True)
  160. self.ui.pem_supprimer.setVisible(True)
  161. def leaveEvent(self, event):
  162. self.ui.pem_editer.setVisible(False)
  163. self.ui.pem_supprimer.setVisible(False)
  164. if __name__ == "__main__":
  165. s = Session()
  166. print "exploMat"
  167. arg = ["DMonde", s.idS()]
  168. app = QApplication(arg)
  169. listeMat = importerMateriel()
  170. print listeMat
  171. s.fin()
  172. exit()