(first message didn't appear within 8 hours, this is 2nd try)

Hi,

long time no see. I've been quite busy at school lately and has
thus not been able to code as much as I would like on Freevo. I
decided to try out freevo 2.0 cvs on my non-devel htpc, and found
a couple of bugs.

idlebar_fix_width.patch:
 - Replaced width with p.width when no changes has taken place.

audio_detach_fix_position_and_codeingguidelines.patch:
 - Fix position when overscan is used.
 - Fix some coding guidelines inconcistencies.

tiny_osd_consider_idlebar.patch:
 - Respect the idlebar when considering position of msgs.

controlpanel_addkey_fix_placement.patch:
 - Add key for toggling the control (set to 'T') in keymap.
 - Fix placement, centering didn't behave well with overscan.

If there I discover other trivial bugs like this, I will probably
try to fix them -- but unfortunately I do not have the time to do
more serious work atm.


Regards
Viggo Fredriksen

--
This is a good time to punt work.
diff -Naur freevo/src/audio/plugins/detach.py freevo_viggo/src/audio/plugins/detach.py
--- freevo/src/audio/plugins/detach.py	2005-01-11 16:07:29.714643597 +0100
+++ freevo_viggo/src/audio/plugins/detach.py	2005-01-11 16:16:33.894833415 +0100
@@ -92,7 +92,7 @@
         # eventhandler.register(self, PLAY_END)
         eventhandler.register(self, PLAY_START)
         eventhandler.register(self, DETACH_AUDIO_STOP)
-        
+
         self.visible    = False
         self.detached   = False
         self.animation  = None
@@ -108,7 +108,7 @@
     def draw(self, width, height):
         """
         Dummy method for the idlebar, only sets
-        our boundries for now
+        boundries for the detached bar to draw to.
         """
         if self.max_width > width:
             self.max_width = width
@@ -127,19 +127,27 @@
 
 
     def detach(self,a=None):
+        """
+        Shows or hides the detached view
+        according to its current status.
+        """
+
         p = audioplayer()
-        # hide the detached player show the player
+
         if self.visible:
+            # hide the detached player show the player
             self.hide()
             p.show()
             self.detached = False
 
-            #p.item.parent.menuw.show()
-
-        # hide the audioplayer and show the itemmenu
         else:
+            # hide the audioplayer and show the itemmenu
             p.hide()
-            #p.item.parent.menuw.show()
+
+            # hack to make it work properly with overscan
+            # resets the self.__x and self.__y variables
+            self.clear()
+
             self.detached = True
 
             # show the detachbar
@@ -148,23 +156,27 @@
 
 
     def show(self):
+        """
+        Shows the detached view.
+        """
 
         if self.visible:
             return
 
-
         # set up a controlbar
         # XXX FIXME: Add config-var for this
+        a_handler = audioplayer().eventhandler
         path = os.path.join(config.ICON_DIR, 'misc','audio_')
-        handlers = [('Prev',  '%sprev.png' % path,  audioplayer().eventhandler, PLAYLIST_PREV),
-                    ('Rew',   '%srew.png'  % path,  audioplayer().eventhandler, Event(SEEK, arg=-10)),
-                    ('Pause', '%spause.png'% path,  audioplayer().eventhandler, PAUSE ),
-                    ('Play',  '%splay.png' % path,  audioplayer().eventhandler, PLAY ),
-                    ('Stop',  '%sstop.png' % path,  self.eventhandler, STOP ),
-                    ('FFwd',  '%sffwd.png' % path,  audioplayer().eventhandler, Event(SEEK, arg=10)),
-                    ('Next',  '%snext.png' % path,  audioplayer().eventhandler, PLAYLIST_NEXT),
-                    ('Show Player',  '%sshow.png' % path,  self.detach, None) ]
 
+        handlers = [
+               (_('Prev'), '%sprev.png' % path, a_handler, PLAYLIST_PREV),
+               (_('Rew'), '%srew.png'  % path, a_handler, Event(SEEK, arg=-10)),
+               (_('Pause'), '%spause.png'% path, a_handler, PAUSE ),
+               (_('Play'), '%splay.png' % path, a_handler, PLAY ),
+               (_('Stop'), '%sstop.png' % path, self.eventhandler, STOP ),
+               (_('FFwd'), '%sffwd.png' % path, a_handler, Event(SEEK,arg=10)),
+               (_('Next'), '%snext.png' % path, a_handler, PLAYLIST_NEXT),
+               (_('Show Player'), '%sshow.png' % path,  self.detach, None) ]
 
         self.controlbar = ButtonPanel(handlers, default_action=3)
         controlpanel().register(self.controlbar)
@@ -176,11 +188,11 @@
         if not self.show_detachbar:
             return
 
-        width  = self.max_width  - 4
-        height = self.max_height - 4
+        width  = self.max_width  - 10
+        height = self.max_height - 10
 
         y1 = self.y1
-        x1 = 2
+        x1 = 5
 
         textinfo, image, item = self.format_info()
 
@@ -193,28 +205,32 @@
         # FIXME: Find a more suitable default image?
         if not image:
             image = os.path.join(config.IMAGE_DIR, 'gant', 'music.png')
+
         cover = gui.Image(gui.imagelib.load(image, (None, height)),(x1, y1))
         iw,ih = cover.get_size()
         self.objects.append(cover)
 
         # create a marquee for showing item info
-        info = mevas.image.CanvasImage((width-iw-6, fih))
-        info.set_pos((x1+iw+4, y1+ih-fih-2))
+        info = mevas.image.CanvasImage( (width - iw - 6, fih) )
+        info.set_pos( (x1 + iw + 4, y1 + ih - fih - 2) )
 
         # create text objects to be shown as
         # iteminfo on the detachbar
         tobjs = []
         for string in textinfo:
-            tobjs.append(gui.Text(string, (0,0),
-                                    (fi.stringsize(string), fih),
-                                    fi, align_v='top', align_h='left'))
+            tobjs.append(gui.Text(string,
+                                  (0, 0),
+                                  (fi.stringsize(string), fih),
+                                  fi,
+                                  align_v='top',
+                                  align_h='left') )
 
         self.objects.append(info)
 
         # create canvas for showing elapsed time
-        w = ft.stringsize('00:00')
+        w = ft.stringsize(u'00:00')
         elapsed = mevas.image.CanvasImage((w, fth))
-        elapsed.set_pos((x1+width-w, y1))
+        elapsed.set_pos( (x1 + width - w, y1) )
         self.objects.append(elapsed)
 
         self.animation = DetachbarAnimation(tobjs, info, item, elapsed, ft)
@@ -224,6 +240,10 @@
 
 
     def hide(self):
+        """
+        Hides the detached view.
+        """
+
         if not self.visible:
             return
 
@@ -259,14 +279,15 @@
             plugin.getbyname('idlebar').update()
             gui.get_display().update()
             return True
-        
-        elif event == PLAY_START and isinstance(event.arg, AudioItem) and self.detached:
-            # An audio item has started playing and we are in detached mode. This is our
-            # item and we should show ourself
+
+        elif event == PLAY_START and isinstance(event.arg, AudioItem) and \
+          self.detached:
+            # An audio item has started playing and we are in detached mode.
+            # This is our item and we should show ourself
             self.hide()
             self.show()
             return True
-        
+
         return False
 
 
@@ -284,22 +305,23 @@
 
         # trackno - title
         if info['trackno'] and info['title']:
-            textinfo.append( 'Title: %s - %s' % (info['trackno'], info['title'] ) )
+            textinfo.append( _('Title: %s - %s') % (info['trackno'],
+                                                    info['title']) )
         elif info['title']:
-            textinfo.append( 'Title: %s' % info['title'] )
+            textinfo.append( _('Title: %s') % info['title'] )
         else:
-            textinfo.append( 'Title: %s' % item.name)
+            textinfo.append( _('Title: %s') % item.name)
 
 
         # artist : album
         if info['artist']:
-            textinfo.append( 'Artist: %s' % info['artist'] )
+            textinfo.append( _('Artist: %s') % info['artist'] )
         if info['album']:
-            textinfo.append( 'Album: %s' % info['album'] )
-
+            textinfo.append( _('Album: %s') % info['album'] )
 
-        textinfo.append('Duration: %02i:%02i' % (item.length/60, item.length%60) )
 
+        textinfo.append(_('Duration: %02i:%02i') % (item.length / 60,
+                                                    item.length % 60) )
         self.item = item
 
         return textinfo, image, item
@@ -310,9 +332,10 @@
     """
     Animation intended for the text on the detached audioplayer
     """
-    def __init__(self, textobjects, textcanvas, item, itemcanvas, el_font, fps=15):
-        BaseAnimation.__init__(self, fps)
+    def __init__(self, textobjects, textcanvas, item,
+                       itemcanvas, el_font, fps=15):
 
+        BaseAnimation.__init__(self, fps)
 
         self.fps          = fps
         self.pobj         = -1
@@ -334,7 +357,7 @@
         """
         if not audioplayer().running:
             eventhandler.post(DETACH_AUDIO_STOP)
-            
+
         self.frame += 1
 
         # goto next text object
@@ -344,7 +367,8 @@
             if self.pobj == len(self.objects):
                 self.pobj = 0
 
-            self.max_frames = self.objects[self.pobj].get_size()[0] + self.sleep_frames
+            self.max_frames = self.objects[self.pobj].get_size()[0] \
+                              + self.sleep_frames
             self.frame = 0
 
         obj    = self.objects[self.pobj]
@@ -362,10 +386,15 @@
         # update the time elapsed
         if self.item.elapsed != self.last_elapsed:
             self.last_elapsed = self.item.elapsed
-            elapsed = '%02i:%02i' % (self.item.elapsed / 60, self.item.elapsed % 60)
-            size    = (self.elapsed_font.stringsize(elapsed), self.elapsed_font.height)
+            elapsed = u'%02i:%02i' % (self.item.elapsed / 60,
+                                      self.item.elapsed % 60)
+
+            size    = ( self.elapsed_font.stringsize(elapsed),
+                        self.elapsed_font.height)
 
             # XXX FIXME!! Causes "Fatal python error: Deallocating None"
             #             after a while!
-            self.itemcanvas.set_image(gui.Text(elapsed, (0,0), size, self.elapsed_font))
-
+            self.itemcanvas.set_image( gui.Text(elapsed,
+                                                (0, 0),
+                                                size,
+                                                self.elapsed_font) )
diff -Naur freevo/src/plugins/tiny_osd.py freevo_viggo/src/plugins/tiny_osd.py
--- freevo/src/plugins/tiny_osd.py	2005-01-11 16:07:31.601016834 +0100
+++ freevo_viggo/src/plugins/tiny_osd.py	2005-01-11 16:36:40.795937795 +0100
@@ -37,7 +37,7 @@
 #
 # -----------------------------------------------------------------------
 # Freevo - A Home Theater PC framework
-# Copyright (C) 2002 Krister Lagerstrom, et al. 
+# Copyright (C) 2002 Krister Lagerstrom, et al.
 # Please see the file freevo/Docs/CREDITS for a complete list of authors.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -88,7 +88,7 @@
         self.gui_object = None
         self._timer_id  = None
 
-        
+
     def update(self):
         """
         update the display
@@ -108,12 +108,19 @@
         # get the osd from from the settings
         font = gui.get_font('osd')
 
+        over_x = config.GUI_OVERSCAN_X
+        over_y = config.GUI_OVERSCAN_Y
+
         # create the text object
-        # FIXME: do respect the idlebar if active
+        y = over_y + 10
+        if plugin.getbyname('idlebar') != None:
+            y += 60
+
+
         self.gui_object = gui.Text(self.message,
-                                   (config.GUI_OVERSCAN_X, config.GUI_OVERSCAN_Y + 10),
-                                   (display.width - 10 - 2 * config.GUI_OVERSCAN_X,
-                                    config.GUI_OVERSCAN_Y + 10 + font.height), 
+                                   (over_x, y),
+                                   (display.width - 10 - 2 * over_x,
+                                    over_y + 10 + font.height),
                                    font, align_h='right')
 
         # make sure the object is on top of everything else
diff -Naur freevo/src/plugins/idlebar/__init__.py freevo_viggo/src/plugins/idlebar/__init__.py
--- freevo/src/plugins/idlebar/__init__.py	2005-01-11 16:07:31.773959372 +0100
+++ freevo_viggo/src/plugins/idlebar/__init__.py	2005-01-11 16:14:49.912382998 +0100
@@ -173,9 +173,9 @@
                         p.set_pos((x1, y1))
                     x1 = x1 + p.width
                 else:
-                    if changed:
-                        p.set_pos((x2 - width, y1))
                     x2 = x2 - p.width
+                    if changed:
+                        p.set_pos((x2, y1))
                 continue
 
             if width > x2 - x1:
@@ -306,8 +306,8 @@
         self.__x       = 0
         self.__y       = 0
         self.width     = 0
-        
-        
+
+
     def draw(self, width, height):
         return self.NO_CHANGE
 
diff -Naur freevo/src/controlpanel.py freevo_viggo/src/controlpanel.py
--- freevo/src/controlpanel.py	2005-01-11 16:07:28.530037192 +0100
+++ freevo_viggo/src/controlpanel.py	2005-01-11 16:54:31.224326969 +0100
@@ -113,11 +113,8 @@
             self.container.add_child(o)
 
         # TODO: support different placements
-        tw = display.width  - 2*config.GUI_OVERSCAN_X
-        th = display.height - 2*config.GUI_OVERSCAN_Y
-
-        x = int(tw/2) - int(w/2)
-        y = th - h
+        x = config.GUI_OVERSCAN_X + 10
+        y = display.height - config.GUI_OVERSCAN_Y - h
 
         self.container.set_pos((x,y))
 
diff -Naur freevo/src/input/keymap.py freevo_viggo/src/input/keymap.py
--- freevo/src/input/keymap.py	2005-01-11 16:07:31.343102528 +0100
+++ freevo_viggo/src/input/keymap.py	2005-01-11 16:54:13.837103623 +0100
@@ -44,6 +44,7 @@
     'PERIOD'      : 'EJECT',
     'L'           : 'SUBTITLE',
     'A'           : 'LANG',
+    'T'           : 'TOGGLE_CONTROL'
 }
 
 REMOTE_MAP = {

Reply via email to