explorateurMat.py 6.9 KB

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