coquille--
[minwii.git] / src / minwii / widgets / songfilebrowser.py
index cfa3022..aa34c65 100755 (executable)
@@ -17,6 +17,8 @@ import pgu.gui.table as table
 import pgu.gui.area as area
 from pgu.gui.const import *
 from pgu.gui.dialog import Dialog
+from pgu.gui.app import Desktop
+import types
 
 import os
 import tempfile
@@ -26,6 +28,27 @@ from minwii.musicxml import musicXml2Song
 INDEX_TXT = 'index.txt'
 PICTURE_ITEM_SIZE = 64
 
+def appEventFactory(app, dlg) :
+    # monkey patch de la méthode gestionnaire d'événements :
+    # l'ensemble du Desktop écoute les événements de la roulette de la souris
+    # et les redirige sur la liste déroulante.
+    def _appEvent(self, e) :
+        
+        if dlg.list.vscrollbar:
+            if not hasattr(dlg.list.vscrollbar,'value'): 
+                return False
+
+            if e.type == pygame.locals.MOUSEBUTTONDOWN:
+                if e.button == 4: #wheel up
+                    dlg.list.vscrollbar._click(-1)
+                    return True
+                elif e.button == 5: #wheel down
+                    dlg.list.vscrollbar._click(1)
+                    return True
+        return Desktop.event(self, e)
+
+    return types.MethodType(_appEvent, app)
+
 class FileOpenDialog(FileDialog):
     
     
@@ -36,11 +59,13 @@ class FileOpenDialog(FileDialog):
         else: self.curdir = path
         self.dir_img = basic.Image(
             pguglobals.app.theme.get(cls1+'.folder', '', 'image'))
+        self.soundfile_img = basic.Image(
+            pguglobals.app.theme.get(cls1+'.soundfile', '', 'image'))
         td_style = {'padding_left': 4,
                     'padding_right': 4,
                     'padding_top': 2,
                     'padding_bottom': 2}
-        self.title = basic.Label("Ouvrir un chanson", cls="dialog.title.label")
+        self.title = basic.Label("Ouvrir une chanson", cls="dialog.title.label")
         self.body = table.Table()
         self.list = area.List(width=700, height=250)
         self.input_dir = input.Input()
@@ -70,6 +95,17 @@ class FileOpenDialog(FileDialog):
         self.value = None
         Dialog.__init__(self, self.title, self.body)
         
+        # monkey patch
+        app = pguglobals.app
+        self.__regularEventMethod = app.event
+        app.event = appEventFactory(app, self)
+    
+    def close(self, w=None) :
+        FileDialog.close(self, w)
+        # retrait du monkey patch
+        app = pguglobals.app
+        app.event = self.__regularEventMethod
+        
             
     def _list_dir_(self):
         self.input_dir.value = self.curdir
@@ -109,15 +145,15 @@ class FileOpenDialog(FileDialog):
                     style = {}
                     if iw > ih :
                         style['width'] = PICTURE_ITEM_SIZE
-                        style['height'] = PICTURE_ITEM_SIZE * float(ih) / iw
+                        style['height'] = int(round(PICTURE_ITEM_SIZE * float(ih) / iw))
                     else :
                         style['heigth'] = PICTURE_ITEM_SIZE
-                        style['width'] = PICTURE_ITEM_SIZE * float(iw) / ih
+                        style['width'] = int(round(PICTURE_ITEM_SIZE * float(iw) / ih))
                         
                     img = basic.Image(img, style=style)
-                    self.list.add(l[0], value = l[1], image = img)
                 else :
-                    self.list.add(l[0], value = l[1])
+                    img = self.soundfile_img
+                self.list.add(l[0], value = l[1], image = img)
  
         self.list.set_vertical_scroll(0)