| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- # -*- coding: utf-8 -*-
- '''
- Fenetre d'exploration des materiels du jeu
- '''
- from os.path import os
- from PyQt4.QtCore import SIGNAL, QString, Qt
- from PyQt4.QtGui import QDialog, QFrame, QColor, QPalette, QApplication
- from lib.EcranEditionMateriel import EcranEditionMateriel
- from lib.EcranEditionTerrain import EcranEditionTerrain
- from lib.commun import rep, charger, Session
- from lib.dialogues import dmConfirmer
- from lib.mat import supprimerMat
- from ui.ecran_explorateurMat import Ui_exm_fenetre
- from ui.panneauMateriel import Ui_pem_panneau
- def importerMateriel(ongletInit = 0):
- expl = ExplorateurMateriel(ongletInit)
- expl.charger()
- expl.exec_()
- listeMat = expl.selection()
- del expl
- return listeMat
- class ExplorateurMateriel(QDialog):
- def __init__(self, ongletInit = 0, parent=None):
- """initialisation de la fenetre"""
- super (ExplorateurMateriel, self).__init__(parent)
- self.createWidgets()
- self._selection = []
- self.ui.exm_onglets.setCurrentIndex(ongletInit)
- def createWidgets(self):
- """construction de l'interface"""
- self.ui = Ui_exm_fenetre()
- self.ui.setupUi(self)
- self.connect(self.ui.exm_ok, SIGNAL("clicked()"), self.valider)
- self.connect(self.ui.exm_annuler, SIGNAL("clicked()"), self.annuler)
- self.connect(self.ui.exm_filtreNom, SIGNAL("textEdited(QString)"), self.majFiltre)
- self.initLayout()
- def layout(self, typMat):
- dico = {"tr" : self.ui.exm_layout_tr, \
- "cb" : self.ui.exm_layout_cb, \
- "dc" : self.ui.exm_layout_dc}
- return dico[typMat]
-
- def charger(self):
- """charge les images disponibles dans l'explorateur"""
- listeMat = []
- for attributsFichier in os.walk(rep("jeu")):
- for f in attributsFichier[2]:
- if os.path.splitext(f)[1] == ".dm":
- mat = charger(os.path.join(rep("jeu"), f))
- listeMat.append(mat)
- listeMat.sort(key=lambda x: x.nom)
- for mat in listeMat:
- self.ajouterMat(mat)
-
- def ajouterMat(self, mat):
- """ajoute un panneau materiel a la liste deroulante correspondante"""
- panneau = PanneauMateriel(self)
- panneau.chargerMat(mat)
- self.layout(mat.idM()[:2]).addWidget(panneau)
- def selection(self):
- return self._selection
- def majSelection(self, idMat):
- if idMat in self._selection:
- self._selection.remove(idMat)
- else:
- self._selection.append(idMat)
- self.majAffichage()
- def majAffichage(self):
- self.ui.exm_ok.setEnabled((len(self._selection) > 0))
- self.ui.exm_ok.setText(QString("Importer ({})".format(len(self._selection))))
- def retirerPanneau(self, panneau):
- idM = panneau.mat().idM()
- if idM in self._selection: self._selection.remove(idM)
- layout = self.layout(idM[:2])
- layout.removeWidget(panneau)
- panneau.setParent(None)
- layout.update()
- def majFiltre(self):
- filtreNom = self.ui.exm_filtreNom.text()
- self.emit(SIGNAL("majFiltre(QString)"), filtreNom)
- def initLayout(self):
- for layout in [self.ui.exm_layout_tr, self.ui.exm_layout_cb, self.ui.exm_layout_dc]:
- layout.setColumnMinimumWidth(0, 140)
- layout.setColumnStretch(0, 1)
- layout.setColumnMinimumWidth(1, 140)
- layout.setColumnStretch(1, 1)
- layout.setColumnMinimumWidth(2, 140)
- layout.setColumnStretch(2, 1)
- layout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
-
- def valider(self):
- self.done(1)
- def annuler(self):
- self._selection = []
- self.done(0)
- class PanneauMateriel(QFrame):
- def __init__(self, fenetre, parent=None):
- """initialisation de la fenetre"""
- self.fenetre = fenetre
- super (PanneauMateriel, self).__init__(parent)
- self.createWidgets()
- self._mat = None
- self._selectionnee = False
- def createWidgets(self):
- """construction de l'interface"""
- self.ui = Ui_pem_panneau()
- self.ui.setupUi(self)
- self.ui.pem_editer.setVisible(False)
- self.ui.pem_supprimer.setVisible(False)
- self.connect(self.fenetre, SIGNAL("majFiltre(QString)"), self.appliquerFiltre)
- self.connect(self.ui.pem_image, SIGNAL("clicked()"), self.clic)
- self.connect(self.ui.pem_nom, SIGNAL("clicked()"), self.clic)
- self.connect(self.ui.pem_editer, SIGNAL("clicked()"), self.editer)
- self.connect(self.ui.pem_supprimer, SIGNAL("clicked()"), self.supprimer)
- self.setMouseTracking(True)
- def selectionner(self, actif):
- self._selectionnee = actif
- if actif:
- couleur = QColor(250, 250, 250, 250)
- else:
- couleur = QColor(240, 240, 240, 240)
- palette = QPalette()
- palette.setColor(QPalette.Window, couleur)
- self.setPalette(palette)
- def mat(self):
- return self._mat
-
- def chargerMat(self, mat):
- self._mat = mat
- self.maj()
- def maj(self):
- self.ui.pem_image.chargerImage(self._mat.icone())
- self.ui.pem_nom.majTexte(self._mat.nom())
-
- def editer(self):
- if self._mat.typ() == "tr":
- fen = EcranEditionTerrain(self._mat)
- else:
- fen = EcranEditionMateriel(self._mat)
- fen.afficher()
- r = fen.exec_()
- if r == 1:
- mat = fen.mat()
- if mat:
- mat.enregistrer()
- self._mat = mat
- del fen
-
- def supprimer(self):
- msg = "Êtes-vous sûr de vouloir supprimer définitivement: \n\n{}".format(self._mat.nom())
- if not dmConfirmer(msg): return
- supprimerMat(self._mat.idM())
- self.fenetre.retirerPanneau(self)
- def appliquerFiltre(self, filtreNom):
- self.setVisible(str(filtreNom.toUtf8()).lower() in self._mat.nom().lower())
- def clic(self):
- self.selectionner(not self._selectionnee)
- self.fenetre.majSelection(self.mat().idM())
-
- def mousePressEvent(self, event):
- if event.button() == 1:
- self.clic()
- def enterEvent(self, event):
- self.ui.pem_editer.setVisible(True)
- self.ui.pem_supprimer.setVisible(True)
- def leaveEvent(self, event):
- self.ui.pem_editer.setVisible(False)
- self.ui.pem_supprimer.setVisible(False)
-
-
- if __name__ == "__main__":
- s = Session()
- print "exploMat"
- arg = ["DMonde", s.idS()]
- app = QApplication(arg)
- listeMat = importerMateriel()
- print listeMat
- s.fin()
- exit()
|