explorateurMat.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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.EcranEditionMateriel import EcranEditionMateriel
  9. from lib.EcranEditionTerrain import EcranEditionTerrain
  10. from lib.commun import rep, charger, Session
  11. from lib.dialogues import dmConfirmer
  12. from lib.mat import supprimerMat
  13. from ui.ecran_explorateurMat import Ui_exm_fenetre
  14. from ui.panneauMateriel import Ui_pem_panneau
  15. def importerMateriel(ongletInit = 0):
  16. expl = ExplorateurMateriel(ongletInit)
  17. expl.charger()
  18. expl.exec_()
  19. listeMat = expl.selection()
  20. del expl
  21. return listeMat
  22. class ExplorateurMateriel(QDialog):
  23. def __init__(self, ongletInit = 0, parent=None):
  24. """initialisation de la fenetre"""
  25. super (ExplorateurMateriel, self).__init__(parent)
  26. self.createWidgets()
  27. self._selection = []
  28. self.ui.exm_onglets.setCurrentIndex(ongletInit)
  29. def createWidgets(self):
  30. """construction de l'interface"""
  31. self.ui = Ui_exm_fenetre()
  32. self.ui.setupUi(self)
  33. self.connect(self.ui.exm_ok, SIGNAL("clicked()"), self.valider)
  34. self.connect(self.ui.exm_annuler, SIGNAL("clicked()"), self.annuler)
  35. self.connect(self.ui.exm_filtreNom, SIGNAL("textEdited(QString)"), self.majFiltre)
  36. self.initLayout()
  37. def layout(self, typMat):
  38. dico = {"tr" : self.ui.exm_layout_tr, \
  39. "cb" : self.ui.exm_layout_cb, \
  40. "dc" : self.ui.exm_layout_dc}
  41. return dico[typMat]
  42. def charger(self):
  43. """charge les images disponibles dans l'explorateur"""
  44. listeMat = []
  45. for attributsFichier in os.walk(rep("jeu")):
  46. for f in attributsFichier[2]:
  47. if os.path.splitext(f)[1] == ".dm":
  48. mat = charger(os.path.join(rep("jeu"), f))
  49. listeMat.append(mat)
  50. listeMat.sort(key=lambda x: x.nom)
  51. for mat in listeMat:
  52. self.ajouterMat(mat)
  53. def ajouterMat(self, mat):
  54. """ajoute un panneau materiel a la liste deroulante correspondante"""
  55. panneau = PanneauMateriel(self)
  56. panneau.chargerMat(mat)
  57. self.layout(mat.idM()[:2]).addWidget(panneau)
  58. def selection(self):
  59. return self._selection
  60. def majSelection(self, idMat):
  61. if idMat in self._selection:
  62. self._selection.remove(idMat)
  63. else:
  64. self._selection.append(idMat)
  65. self.majAffichage()
  66. def majAffichage(self):
  67. self.ui.exm_ok.setEnabled((len(self._selection) > 0))
  68. self.ui.exm_ok.setText(QString("Importer ({})".format(len(self._selection))))
  69. def retirerPanneau(self, panneau):
  70. idM = panneau.mat().idM()
  71. if idM in self._selection: self._selection.remove(idM)
  72. layout = self.layout(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. else:
  134. fen = EcranEditionMateriel(self._mat)
  135. fen.afficher()
  136. r = fen.exec_()
  137. if r == 1:
  138. mat = fen.mat()
  139. if mat:
  140. mat.enregistrer()
  141. self._mat = mat
  142. del fen
  143. def supprimer(self):
  144. msg = "Êtes-vous sûr de vouloir supprimer définitivement: \n\n{}".format(self._mat.nom())
  145. if not dmConfirmer(msg): return
  146. supprimerMat(self._mat.idM())
  147. self.fenetre.retirerPanneau(self)
  148. def appliquerFiltre(self, filtreNom):
  149. self.setVisible(str(filtreNom.toUtf8()).lower() in self._mat.nom().lower())
  150. def clic(self):
  151. self.selectionner(not self._selectionnee)
  152. self.fenetre.majSelection(self.mat().idM())
  153. def mousePressEvent(self, event):
  154. if event.button() == 1:
  155. self.clic()
  156. def enterEvent(self, event):
  157. self.ui.pem_editer.setVisible(True)
  158. self.ui.pem_supprimer.setVisible(True)
  159. def leaveEvent(self, event):
  160. self.ui.pem_editer.setVisible(False)
  161. self.ui.pem_supprimer.setVisible(False)
  162. if __name__ == "__main__":
  163. s = Session()
  164. print "exploMat"
  165. arg = ["DMonde", s.idS()]
  166. app = QApplication(arg)
  167. listeMat = importerMateriel()
  168. print listeMat
  169. s.fin()
  170. exit()