| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- #from __future__ import unicode_literals
- # -*- coding: utf-8 -*-
- """controle l'acces aux ressources variables (sons, images, sauvegardes)"""
- import os
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- from ui.ecran_explorateur import Ui_exr_fenetre
- from ui.panneauImage import Ui_exi_panneau
- #le repertoire de l'application
- ppal = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))
- def repApp():
- return ppal
- def repRessources():
- return ["ressources\\commun", \
- "ressources\\dd35", \
- "parties\\Partie1\\ressources"]
- def selectionImage():
- retour = None
- expl = ExplorateurRessources()
- expl.charger("I")
- expl.show()
- expl.exec_()
- img = expl.selection()
- if img:
- if img.estValide():
- retour = img
- del expl
- return retour
- class Ressource(object):
- """classe de base des ressources utilisees"""
- def __init__(self, cheminR = ""):
- self._cheminR = cheminR
- def cheminR(self):
- return self._cheminR
- def chemin(self):
- """renvoie le chemin absolu vers le fichier"""
- return os.path.join(repApp(), self._cheminR)
- def nom(self):
- #on vire l'extension
- nom = ""
- for car in reversed(self._cheminR):
- if car in ["\\", "/"]:
- break
- else:
- nom = car + nom
- nom = os.path.splitext(nom)[0]
- return nom
- def repR(self):
- """renvoie le repertoire, presente de maniere relative"""
- return os.path.dirname(self._cheminR)
-
- def extension(self):
- return os.path.splitext(self._cheminR)[1]
- def definition(self):
- return self._cheminR
-
- def existe(self):
- return os.path.isfile(self.chemin())
- def estValide(self):
- return self.existe()
- class RImage(Ressource):
- """classe de base des ressources utilisees"""
- def __init__(self, cheminR = ""):
- super(RImage, self).__init__(cheminR)
- def pix(self, l = 0, h = 0):
- pix = QPixmap(self.chemin())
- if not pix.isNull():
- if l > 0 and h > 0:
- pix = pix.scaled(l, h, Qt.KeepAspectRatio, Qt.SmoothTransformation)
- elif l > 0 and h == 0:
- pix = pix.scaledToWidth(l, Qt.SmoothTransformation)
- elif l == 0 and h > 0:
- pix = pix.scaledToHeight(h, Qt.SmoothTransformation)
- return pix
- def estValide(self):
- return self.existe() and \
- self.extension() in [".png", ".jpg", ".gif"]
- class ExplorateurRessources(QDialog):
- def __init__(self, parent=None):
- """initialisation de la fenetre"""
- super (ExplorateurRessources, self).__init__(parent)
- self.createWidgets()
- self._selection = None
- self._panneaux = []
- self._panneauSelectionne = None
- def createWidgets(self):
- """construction de l'interface"""
- self.ui = Ui_exr_fenetre()
- self.ui.setupUi(self)
-
- self.connect(self.ui.exr_ok, SIGNAL("clicked()"), self.valider)
- self.connect(self.ui.exr_annuler, SIGNAL("clicked()"), self.annuler)
- self.connect(self.ui.exr_filtreNom, SIGNAL("textEdited(QString)"), self.majFiltre)
- self.connect(self.ui.exr_filtreRep, SIGNAL("currentIndexChanged(int)"), self.majFiltre)
- self.majLayout()
- def charger(self, typeRessource = "I"):
- """ressource vaut I ou S, pour image et sons"""
- fichiers = []
- for repR in repRessources():
- repAbs = os.path.join(repApp(), repR)
- for (dirpath, dirnames, filenames) in os.walk(repAbs):
- for f in filenames:
- if typeRessource == "I":
- r = RImage(os.path.join(repR, f))
- else:
- r = RSon(os.path.join(repR, f))
- if r.estValide():
- fichiers.append(r)
- for f in fichiers:
- self.ajouterImage(f)
-
- def ajouterImage(self, img):
- """ajoute un panneau image a la liste deroulante"""
- panneau = PanneauImage(self)
- panneau.chargerImage(img)
- self._panneaux.append(panneau)
- self.ui.exr_layout.addWidget(panneau)
- def selection(self):
- return self._selection
- def majSelection(self, panneau):
- if self._panneauSelectionne:
- self._panneauSelectionne.selectionner(False)
- self._panneauSelectionne = panneau
- self.majAffichage()
- def majAffichage(self):
- self.ui.exr_ok.setEnabled(self._panneauSelectionne != None)
- def majFiltre(self):
- filtreRep = ""
- if self.ui.exr_filtreRep.currentIndex() > 0:
- filtreRep = repRessources()[(self.ui.exr_filtreRep.currentIndex()-1)]
- filtreNom = self.ui.exr_filtreNom.texte()
- for panneau in self._panneaux:
- panneau.appliquerFiltre(filtreRep, filtreNom)
- def majLayout(self):
- self.ui.exr_layout.setColumnMinimumWidth(0, 140)
- self.ui.exr_layout.setColumnStretch(0, 1)
- self.ui.exr_layout.setColumnMinimumWidth(1, 140)
- self.ui.exr_layout.setColumnStretch(1, 1)
- self.ui.exr_layout.setColumnMinimumWidth(2, 140)
- self.ui.exr_layout.setColumnStretch(2, 1)
- self.ui.exr_layout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
- def valider(self):
- self._selection = self._panneauSelectionne.image()
- self.done(1)
- def annuler(self):
- self.done(0)
- class PanneauImage(QFrame):
- def __init__(self, fenetre, parent=None):
- """initialisation de la fenetre"""
- self.fenetre = fenetre
- super (PanneauImage, self).__init__(parent)
- self.createWidgets()
- self._image = None
- self._selectionnee = False
- def createWidgets(self):
- """construction de l'interface"""
- self.ui = Ui_exi_panneau()
- self.ui.setupUi(self)
- self.connect(self.ui.exi_image, SIGNAL("clicked()"), self.clic)
- self.connect(self.ui.exi_nom, SIGNAL("clicked()"), self.clic)
- self.connect(self.ui.exi_details, SIGNAL("clicked()"), self.clic)
- self.connect(self.ui.exi_situ, SIGNAL("clicked()"), self.clic)
- self.connect(self.ui.exi_image, SIGNAL("doubleClicked()"), self.doubleClic)
- self.connect(self.ui.exi_nom, SIGNAL("doubleClicked()"), self.doubleClic)
- self.connect(self.ui.exi_details, SIGNAL("doubleClicked()"), self.doubleClic)
- self.connect(self.ui.exi_situ, SIGNAL("doubleClicked()"), self.doubleClic)
-
- def selectionner(self, 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 chargerImage(self, image):
- self.ui.exi_image.chargerImage(image)
- self.ui.exi_nom.majTexte(image.nom())
- self.ui.exi_details.majTexte((image.extension().replace(".", "")).upper())
- self.ui.exi_situ.majTexte(image.repR())
- self._image = image
- def image(self):
- return self._image
- def appliquerFiltre(self, filtreRep, filtreNom):
- if len(filtreRep) > 0:
- self.setVisible(filtreNom in self._image.nom() and \
- self._image.repR() == filtreRep)
- else:
- self.setVisible(filtreNom in self._image.nom())
- def clic(self):
- if not self._selectionnee:
- self.fenetre.majSelection(self)
- self.selectionner(True)
- def doubleClic(self):
- self.fenetre.valider()
-
- def mousePressEvent(self, event):
- if event.button() == 1:
- self.clic()
- def mouseDoubleClickEvent(self, event):
- if event.button() == 1:
- self.doubleClic()
|