EcranExplorateur.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. """ecran d'exploration des ressources (images, sons)"""
  2. from PyQt4.QtCore import *
  3. from PyQt4.QtGui import *
  4. from ui.ecran_explorateur import Ui_exr_fenetre
  5. from ui.panneauImage import Ui_exi_panneau
  6. import os
  7. from sys import argv
  8. from ressources import *
  9. class EcranExplorateur(QDialog):
  10. def __init__(self, parent=None):
  11. """initialisation de la fenetre"""
  12. super (EcranExplorateur, self).__init__(parent)
  13. self.createWidgets()
  14. self._selection = None
  15. self._panneaux = []
  16. self._panneauSelectionne = None
  17. def createWidgets(self):
  18. """construction de l'interface"""
  19. self.ui = Ui_exr_fenetre()
  20. self.ui.setupUi(self)
  21. self.connect(self.ui.exr_ok, SIGNAL("clicked()"), self.valider)
  22. self.connect(self.ui.exr_annuler, SIGNAL("clicked()"), self.annuler)
  23. self.connect(self.ui.exr_filtreNom, SIGNAL("textEdited(QString)"), self.majFiltre)
  24. self.connect(self.ui.exr_filtreRep, SIGNAL("currentIndexChanged(int)"), self.majFiltre)
  25. self.ui.exr_layout.setColumnMinimumWidth(0, 140)
  26. self.ui.exr_layout.setColumnStretch(0, 1)
  27. self.ui.exr_layout.setColumnMinimumWidth(1, 140)
  28. self.ui.exr_layout.setColumnStretch(1, 1)
  29. self.ui.exr_layout.setColumnMinimumWidth(2, 140)
  30. self.ui.exr_layout.setColumnStretch(2, 1)
  31. def charger(self, typeRessource = "I"):
  32. """ressource vaut I ou S, pour image et sons"""
  33. fichiers = []
  34. for repR in repRessources():
  35. repAbs = os.path.join(repApp(), repR)
  36. for (dirpath, dirnames, filenames) in os.walk(repAbs):
  37. for f in filenames:
  38. if typeRessource == "I":
  39. r = Image(os.path.join(repR, f))
  40. else:
  41. r = Son(os.path.join(repR, f))
  42. if r.estValide():
  43. fichiers.append(r)
  44. for f in fichiers:
  45. self.ajouterImage(f)
  46. def ajouterImage(self, img):
  47. """ajoute un panneau image a la liste deroulante"""
  48. panneau = PanneauImage(self)
  49. panneau.chargerImage(img)
  50. self._panneaux.append(panneau)
  51. self.ui.exr_layout.addWidget(panneau)
  52. def selection(self):
  53. return self._selection
  54. def majSelection(self, panneau):
  55. if self._panneauSelectionne:
  56. self._panneauSelectionne.selectionner(False)
  57. self._panneauSelectionne = panneau
  58. self.majAffichage()
  59. def majAffichage(self):
  60. self.ui.exr_ok.setEnabled(self._panneauSelectionne != None)
  61. def majFiltre(self):
  62. filtreRep = ""
  63. if self.ui.exr_filtreRep.currentIndex() > 0:
  64. filtreRep = repRessources()[(self.ui.exr_filtreRep.currentIndex()-1)]
  65. filtreNom = self.ui.exr_filtreNom.texte()
  66. for panneau in self._panneaux:
  67. panneau.appliquerFiltre(filtreRep, filtreNom)
  68. def valider(self):
  69. self._selection = self._panneauSelectionne.image()
  70. self.done(1)
  71. def annuler(self):
  72. self.done(0)
  73. class PanneauImage(QFrame):
  74. def __init__(self, fenetre, parent=None):
  75. """initialisation de la fenetre"""
  76. self.fenetre = fenetre
  77. super (PanneauImage, self).__init__(parent)
  78. self.createWidgets()
  79. self._image = ""
  80. self._selectionnee = False
  81. def createWidgets(self):
  82. """construction de l'interface"""
  83. self.ui = Ui_exi_panneau()
  84. self.ui.setupUi(self)
  85. def selectionner(self, actif):
  86. if actif:
  87. couleur = QColor(250, 250, 250, 250)
  88. else:
  89. couleur = QColor(240, 240, 240, 240)
  90. palette = QPalette()
  91. palette.setColor(QPalette.Window, couleur)
  92. self.setPalette(palette)
  93. def chargerImage(self, image):
  94. self.ui.exi_image.chargerImage(image.chemin())
  95. self.ui.exi_nom.majTexte(image.nom())
  96. self.ui.exi_details.majTexte((image.extension().replace(".", "")).upper())
  97. self.ui.exi_situ.majTexte(image.repR())
  98. self._image = image
  99. def image(self):
  100. return self._image
  101. def appliquerFiltre(self, filtreRep, filtreNom):
  102. if len(filtreRep) > 0:
  103. self.setVisible(filtreNom in self._image.nom() and \
  104. self._image.repR() == filtreRep)
  105. else:
  106. self.setVisible(filtreNom in self._image.nom())
  107. def mousePressEvent(self, event):
  108. if event.button() == 1:
  109. if not self._selectionnee:
  110. self.fenetre.majSelection(self)
  111. self.selectionner(True)
  112. def mouseDoubleClickEvent(self, event):
  113. if event.button() == 1:
  114. self.fenetre.valider()
  115. if __name__ == "__main__":
  116. app = QApplication(argv)
  117. #settrace(trace_calls)
  118. exp = EcranExplorateur()
  119. exp.show()
  120. exp.charger()
  121. r = app.exec_()
  122. ressource = exp.selection()
  123. if ressource:
  124. print ressource.nom()
  125. exit(r)