Here is a set of patches for enabling favorites from the OSD. It reuses
most of the code that exists already but was not in use, with some
modifications to make it useable :)

I have made some changes to the GUI objects too (bugfixes) and to the
recordserver.

Matthieu
-- 
 (~._.~)        Matthieu Weber - Université de Jyväskylä         (~._.~)
  ( ? )                email : [EMAIL PROTECTED]                  ( ? ) 
 ()- -()               public key id : 452AE0AD                  ()- -()
 (_)-(_)  "Humor ist, wenn man trotzdem lacht (Germain Muller)"  (_)-(_)
Index: tv/edit_favorite.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/edit_favorite.py,v
retrieving revision 1.5
diff -u -r1.5 edit_favorite.py
--- tv/edit_favorite.py 16 Nov 2003 17:38:48 -0000      1.5
+++ tv/edit_favorite.py 8 Jan 2004 08:11:02 -0000
@@ -44,7 +44,7 @@
 #
 # ----------------------------------------------------------------------
 
-import time
+from time import gmtime, strftime
 
 import config, tv.epg_xmltv, tv.view_favorites
 import tv.record_client as record_client
@@ -53,6 +53,7 @@
 from tv.record_types import Favorite
 import tv.record_types
 from tv.epg_types import TvProgram
+from tv.view_favorites  import ViewFavorites
 
 from gui.GUIObject      import *
 from gui.Border         import *
@@ -60,6 +61,7 @@
 from gui.AlertBox       import *
 from gui.OptionBox      import *
 from gui.LetterBoxGroup import *
+from gui.ConfirmBox     import ConfirmBox
 
 DEBUG = 1
 TRUE = 1
@@ -73,15 +75,20 @@
     top       y coordinate. Integer
     width     Integer
     height    Integer
+    context   Context in which the object is instanciated
     """
     
     def __init__(self, parent=None, subject=None, left=None, top=None, width=500,
-                 height=350):
+                 height=350, context=None):
 
         self.oldname = None
+        if context:
+            self.context = context
+        else:
+            context = 'guide'
 
-        print 'DEBUG::subject: %s' % dir(subject)
-        print 'DEBUG::subject::__module__ %s' % subject.__module__
+        #print 'DEBUG::subject: %s' % dir(subject)
+        #print 'DEBUG::subject::__module__ %s' % subject.__module__
         #if isinstance(subject, tv.record_types.Favorite):
         #    print 'DEBUG::subject: FUCK'
         #    self.fav = subject
@@ -116,110 +123,114 @@
 
         guide = tv.epg_xmltv.get_guide()
 
-        name = Label(_('Name:\t'), self, Align.LEFT)
+        name = Label(_('Name:'), self, Align.LEFT)
         self.name_input = LetterBoxGroup(text=self.fav.name)
         self.name_input.h_align = Align.NONE
         self.add_child(self.name_input)
 
 
-        title = Label(_('Title:\t%s') % self.fav.title, self, Align.LEFT)
+        title = Label(_('Title:%s') % self.fav.title, self, Align.LEFT)
 
-        chan = Label(_('Channel:\t'), self, Align.LEFT)
+        chan = Label(_('Channel:'), self, Align.LEFT)
 
         self.chan_box = OptionBox('ANY')
         self.chan_box.h_align = Align.NONE
         self.chan_box.add_item(text='ANY', value='ANY')
       
-        i = 0
+        i = 1
         chan_index = 0
         for ch in guide.chan_list:
-            if ch.id == self.fav.channel_id:
+            #if ch.id == self.fav.channel_id:
+            if ch.displayname == self.fav.channel:
                 chan_index = i
             i += 1
-            self.chan_box.add_item(text=ch.id, value=ch.id)
+            self.chan_box.add_item(text=ch.displayname, value=ch.displayname)
 
 
         self.chan_box.toggle_selected_index(chan_index)
+        # This is a hack for setting the OptionBox's label to the current
+        # value. It should be done by OptionBox when drawing, but it doesn't
+        # work :(
+        self.chan_box.change_item(None)
         self.add_child(self.chan_box)
 
-        dow = Label(_('Day of Week:\t'), self, Align.LEFT)
+        dow = Label(_('Day of Week:'), self, Align.LEFT)
         self.dow_box = OptionBox('ANY DAY')
         self.dow_box.h_align = Align.NONE
 
         self.dow_box.add_item(text=_('ANY DAY'), value='ANY')
-        self.dow_box.add_item(text=_('Mon'), value=0)
-        self.dow_box.add_item(text=_('Tues'), value=1)
-        self.dow_box.add_item(text=_('Wed'), value=2)
-        self.dow_box.add_item(text=_('Thurs'), value=3)
-        self.dow_box.add_item(text=_('Fri'), value=4)
-        self.dow_box.add_item(text=_('Sat'), value=5)
-        self.dow_box.add_item(text=_('Sun'), value=6)
 
-        self.dow_box.toggle_selected_index(0)
+        i=1
+        dow_index = 0
+        for dow in ('Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun'):
+            val = "%d" % (i-1)
+            self.dow_box.add_item(text=_(dow), value=val )
+            if val == self.fav.dow:
+                dow_index = i
+            i += 1
+        self.dow_box.toggle_selected_index(dow_index)
+        # This is a hack for setting the OptionBox's label to the current
+        # value. It should be done by OptionBox when drawing, but it doesn't
+        # work :(
+        self.dow_box.change_item(None)
         self.add_child(self.dow_box)
 
-        tod = Label(_('Time of Day:\t'), self, Align.LEFT)
+        tod = Label(_('Time of Day:'), self, Align.LEFT)
         self.tod_box = OptionBox('ANY')
         self.tod_box.h_align = Align.NONE
         self.tod_box.add_item(text=_('ANY TIME'), value='ANY')
-        self.tod_box.add_item(text='12:00 AM', value=0)
-        self.tod_box.add_item(text='11:30 AM', value=30)
-        self.tod_box.add_item(text='1:00 AM', value=60)
-        self.tod_box.add_item(text='1:30 AM', value=90)
-        self.tod_box.add_item(text='2:00 AM', value=120)
-        self.tod_box.add_item(text='2:30 AM', value=150)
-        self.tod_box.add_item(text='3:00 AM', value=180)
-        self.tod_box.add_item(text='3:30 AM', value=210)
-        self.tod_box.add_item(text='4:00 AM', value=240)
-        self.tod_box.add_item(text='4:30 AM', value=270)
-        self.tod_box.add_item(text='5:00 AM', value=300)
-        self.tod_box.add_item(text='5:30 AM', value=330)
-        self.tod_box.add_item(text='6:00 AM', value=360)
-        self.tod_box.add_item(text='6:30 AM', value=390)
-        self.tod_box.add_item(text='7:00 AM', value=420)
-        self.tod_box.add_item(text='7:30 AM', value=450)
-        self.tod_box.add_item(text='8:00 AM', value=480)
-        self.tod_box.add_item(text='8:30 AM', value=510)
-        self.tod_box.add_item(text='9:00 AM', value=540)
-        self.tod_box.add_item(text='9:30 AM', value=570)
-        self.tod_box.add_item(text='10:00 AM', value=600)
-        self.tod_box.add_item(text='10:30 AM', value=630)
-        self.tod_box.add_item(text='11:00 AM', value=660)
-        self.tod_box.add_item(text='11:30 AM', value=690)
-        self.tod_box.add_item(text='12:00 PM', value=720)
-        self.tod_box.add_item(text='12:30 PM', value=750)
-        self.tod_box.add_item(text='1:00 PM', value=780)
-        self.tod_box.add_item(text='1:30 PM', value=810)
-        self.tod_box.add_item(text='2:00 PM', value=840)
-        self.tod_box.add_item(text='2:30 PM', value=870)
-        self.tod_box.add_item(text='3:00 PM', value=900)
-        self.tod_box.add_item(text='3:30 PM', value=930)
-        self.tod_box.add_item(text='4:00 PM', value=960)
-        self.tod_box.add_item(text='4:30 PM', value=990)
-        self.tod_box.add_item(text='5:00 PM', value=1020)
-        self.tod_box.add_item(text='5:30 PM', value=1050)
-        self.tod_box.add_item(text='6:00 PM', value=1080)
-        self.tod_box.add_item(text='6:30 PM', value=1110)
-        self.tod_box.add_item(text='7:00 PM', value=1140)
-        self.tod_box.add_item(text='7:30 PM', value=1170)
-        self.tod_box.add_item(text='8:00 PM', value=1200)
-        self.tod_box.add_item(text='8:30 PM', value=1230)
-        self.tod_box.add_item(text='9:00 PM', value=1260)
-        self.tod_box.add_item(text='9:30 PM', value=1290)
-        self.tod_box.add_item(text='10:00 PM', value=1320)
-        self.tod_box.add_item(text='10:30 PM', value=1350)
-        self.tod_box.add_item(text='11:00 PM', value=1380)
-        self.tod_box.add_item(text='11:30 PM', value=1410)
-      
-        self.tod_box.toggle_selected_index(0)
+
+        i = 0
+        tod_index = 0
+        
+        for h in range(0,24):
+            for m in (00, 30):
+                val = i*30
+                # Little hack: we calculate the hours from Jan 1st, 1970 GMT,
+                # and then use strftime to get the string representation
+                text = strftime(config.TV_TIMEFORMAT, gmtime(h * 3600 + 60 * m))
+                self.tod_box.add_item(text=text, value=val)
+                if val == self.fav.mod:
+                    tod_index = i+1
+                i += 1
+        self.tod_box.toggle_selected_index(tod_index)
+        # This is a hack for setting the OptionBox's label to the current
+        # value. It should be done by OptionBox when drawing, but it doesn't
+        # work :(
+        self.tod_box.change_item(None)
         self.add_child(self.tod_box)
 
         self.save = Button(_('Save'))
         self.add_child(self.save)
-
+        if self.oldname:
+            self.remove = Button(_('Remove'))
+            self.add_child(self.remove)
+        else:
+            self.remove = None
+        self.cancel = Button(_('CANCEL'))
+        self.add_child(self.cancel)
+
+    def removeFavorite(self):
+       (result, msg) = record_client.removeFavorite(self.oldname) 
+       if result:
+           searcher = None
+           if self.parent and self.context == 'favorites':
+               for child in self.parent.children:
+                   if isinstance(child, ViewFavorites):
+                       searcher = child
+                       break 
+               if searcher:
+                   searcher.refreshList()
+               self.destroy()
+               if searcher:
+                   searcher.draw()
+                   self.osd.update()
+       else:
+           AlertBox(parent=self,
+                    text=_('Remove Failed: %s') % msg).show()
 
     def eventhandler(self, event, menuw=None):
-        print 'SELECTED CHILD: %s' % self.get_selected_child()
+        #print 'SELECTED CHILD: %s' % self.get_selected_child()
         if self.get_selected_child() == self.name_input:
             if event == em.INPUT_LEFT:
                 self.name_input.change_selected_box('left')
@@ -262,7 +273,7 @@
                 self.draw()
             elif event == em.INPUT_ENTER:
                 if self.chan_box.selected or self.chan_box.list.is_visible():
-                    if DEBUG: print '  Want to toggle_box'
+                    #if DEBUG: print '  Want to toggle_box'
                     self.chan_box.toggle_box()
                     self.draw()
             elif event in (em.INPUT_LEFT, em.MENU_PAGEUP):
@@ -330,24 +341,66 @@
                 (result, msg) = record_client.addEditedFavorite(
                              self.name_input.get_word(), 
                              self.fav.title, 
-                             self.fav.channel_id, 
+                             self.chan_box.list.get_selected_item().value,
                              self.dow_box.list.get_selected_item().value, 
                              self.tod_box.list.get_selected_item().value, 
                              self.fav.priority)
                 if result:
-                    tv.view_favorites.ViewFavorites(parent=self.parent, 
text='Favorites').show()
+                    #tv.view_favorites.ViewFavorites(parent=self.parent, 
text='Favorites').show()
                     self.destroy()
+                    AlertBox(parent='osd', text=_('Favorite %s has been saved') % 
self.name_input.get_word()).show()
                 else:
-                    AlertBox(parent=self, text=_('Failed: %s') % msg)
+                    AlertBox(parent=self, text=_('Failed: %s') % msg).show()
                 return
             elif event in (em.INPUT_LEFT, em.MENU_PAGEUP):
                 self.save.toggle_selected()
                 self.tod_box.toggle_selected()
                 self.draw()
+            elif event in (em.INPUT_RIGHT, em.MENU_PAGEDOWN):
+                self.save.toggle_selected()
+                if self.remove:
+                    self.remove.toggle_selected()
+                else:
+                    self.cancel.toggle_selected()
+                self.draw()
             elif event == em.INPUT_EXIT:
                 self.destroy()
                 return
+            self.osd.update(self.get_rect())
+            return
 
+        elif self.get_selected_child() == self.remove:
+            if event == em.INPUT_ENTER:
+                ConfirmBox(text=_('Do you want to remove %s?') % 
self.name_input.get_word(),
+                           handler=self.removeFavorite).show()
+                return
+            elif event in (em.INPUT_LEFT, em.MENU_PAGEUP):
+                self.save.toggle_selected()
+                self.remove.toggle_selected()
+                self.draw()
+            elif event in (em.INPUT_RIGHT, em.MENU_PAGEDOWN):
+                self.remove.toggle_selected()
+                self.cancel.toggle_selected()
+                self.draw()
+            elif event in (em.INPUT_ENTER, em.INPUT_EXIT):
+                self.destroy()
+                return
+            self.osd.update(self.get_rect())
+            return
+        
+        elif self.get_selected_child() == self.cancel:
+            if event in (em.INPUT_LEFT, em.MENU_PAGEUP):
+                if self.remove:
+                    self.remove.toggle_selected()
+                else:
+                    self.save.toggle_selected()
+                self.cancel.toggle_selected()
+                self.draw()
+            elif event in (em.INPUT_ENTER, em.INPUT_EXIT):
+                self.destroy()
+                return
+            self.osd.update(self.get_rect())
+            return
         if event == em.INPUT_EXIT:
             self.destroy()
             return
Index: tv/program_display.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/program_display.py,v
retrieving revision 1.23
diff -u -r1.23 program_display.py
--- tv/program_display.py       28 Nov 2003 20:08:58 -0000      1.23
+++ tv/program_display.py       8 Jan 2004 08:11:02 -0000
@@ -177,22 +177,29 @@
 
         used_height += chan.font.height + start.font.height + stop.font.height + \
                        (4 *self.v_spacing)
-
+        
+        self.buttons = []
+        all_buttons = { 'record': 'Record',
+                        'search': 'Search for more of this program',
+                        'favorites': 'Add to favorites',
+                        'remove': 'Remove',
+                        'cancel': 'CANCEL',
+                      }
+        self.button_config = []
         if self.context == 'guide':
-            self.b0 = Button(_('Record'), width=(width-60)/2)
-            # self.options.add_item(text='Search for more of this program', value=2)
-            # self.options.add_item(text='Add "%s" to favorites' % prog.title, 
value=3)
+            self.button_config = ['record', 'favorites', 'cancel']
         else:
-            self.b0 = Button(_('Remove'), width=(width-60)/2)
+            self.button_config = ['remove', 'cancel']
+            
+        for bname in self.button_config:
+            b = Button(_(all_buttons[bname]), width=(width-60)/2)
+            b.set_h_align(Align.CENTER)
+            self.add_child(b)
+            self.buttons.append(b)
 
-        self.b0.set_h_align(Align.CENTER)
-        self.add_child(self.b0)
-        self.b0.toggle_selected()
+        self.buttons[0].toggle_selected()
+        self.current_button = 0
         
-        self.b1 = Button(_('CANCEL'), width=(width-60)/2)
-        self.b1.set_h_align(Align.CENTER)
-        self.add_child(self.b1)
-
         if desc:
             desc.width  = self.width - 30
             desc.height = self.height - used_height - 100
@@ -217,9 +224,21 @@
         #    return
 
 
-        if event in (em.INPUT_UP, em.INPUT_DOWN):
-            self.b0.toggle_selected()
-            self.b1.toggle_selected()
+        #if event in (em.INPUT_UP, em.INPUT_DOWN):
+        if event == em.INPUT_UP:
+            if self.current_button > 0:
+                self.buttons[self.current_button].toggle_selected()
+                self.current_button -= 1
+                self.buttons[self.current_button].toggle_selected()
+            self.draw()
+            self.osd.update(self.get_rect())
+            return
+
+        elif event == em.INPUT_DOWN:
+            if self.current_button < len(self.buttons) - 1:
+                self.buttons[self.current_button].toggle_selected()
+                self.current_button += 1
+                self.buttons[self.current_button].toggle_selected()
             self.draw()
             self.osd.update(self.get_rect())
             return
@@ -235,7 +254,7 @@
         #        return
 
         elif event == em.INPUT_ENTER:
-            if self.b0.selected and self.context == 'guide':
+            if self.button_config[self.current_button] == 'record' and self.context 
== 'guide':
                 (result, msg) = record_client.scheduleRecording(self.prog)
                 if result:
                     AlertBox(parent=self, 
@@ -251,12 +270,13 @@
                                              search=self.prog.title).show()
 
             # XXX: add to favorites - should go to an edit favorites screen
-            elif 0:
+            elif self.button_config[self.current_button] == 'favorites' and 
self.context == 'guide':
+                self.destroy()
                 tv.edit_favorite.EditFavorite(parent=self, 
                                            subject=self.prog).show()
 
             # next will only happen if we are not viewing from the guide
-            elif self.b0.selected:
+            elif self.button_config[self.current_button] == 'remove':
                 (result, msg) = record_client.removeScheduledRecording(self.prog)
                 if result:
                     # This is confusing, I wanted to click but it's no
@@ -288,7 +308,7 @@
                     AlertBox(parent=self, 
                              text=_('Remove Failed: %s') % msg).show()
 
-            elif self.b1.selected:
+            elif self.button_config[self.current_button] == 'cancel':
                 self.destroy()
 
         elif event == em.INPUT_EXIT:
Index: tv/record_client.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/record_client.py,v
retrieving revision 1.11
diff -u -r1.11 record_client.py
--- tv/record_client.py 30 Nov 2003 16:30:58 -0000      1.11
+++ tv/record_client.py 8 Jan 2004 08:11:02 -0000
@@ -184,7 +184,9 @@
 
 def addEditedFavorite(name, title, chan, dow, mod, priority):
     try:
-        (status, message) = server.addEditedFavorite(name, title, chan, dow, mod, 
priority)
+        (status, message) = \
+            server.addEditedFavorite(marmalade.jellyToXML(name), \
+            marmalade.jellyToXML(title), chan, dow, mod, priority)
     except:
         return (FALSE, _('record_client: connection error'))
 
Index: tv/record_types.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/record_types.py,v
retrieving revision 1.6
diff -u -r1.6 record_types.py
--- tv/record_types.py  20 Oct 2003 01:41:55 -0000      1.6
+++ tv/record_types.py  8 Jan 2004 08:11:02 -0000
@@ -142,7 +142,27 @@
     def __init__(self, name=None, prog=None, exactchan=FALSE, exactdow=FALSE, 
                  exacttod=FALSE, priority=0):
         self.TYPES_VERSION = TYPES_VERSION
+        translation_table = \
+                            '                ' \
+                            + '                ' \
+                            + ' !"#$%&' + "'" + '()*+,-./' \
+                            + '0123456789:;<=>?' \
+                            + '@ABCDEFGHIJKLMNO' \
+                            + 'PQRSTUVWXYZ[\]^_' \
+                            + '`abcdefghijklmno' \
+                            + 'pqrstuvwxyz{|}~ ' \
+                            + '                ' \
+                            + '                ' \
+                            + '                ' \
+                            + '                ' \
+                            + 'AAAAAAACEEEEIIII' \
+                            + 'DNOOOOOxOUUUUYPS' \
+                            + 'aaaaaaaceeeeiiii' \
+                            + 'dnooooo/ouuuuypy'
+
         self.name = name
+        if name:
+            self.name = name.translate(translation_table)
         self.priority = priority
 
         if prog:
Index: tv/tvguide.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/tvguide.py,v
retrieving revision 1.21
diff -u -r1.21 tvguide.py
--- tv/tvguide.py       4 Dec 2003 21:48:11 -0000       1.21
+++ tv/tvguide.py       8 Jan 2004 08:11:02 -0000
@@ -197,7 +197,12 @@
             self.event_PageDown()
             self.menuw.refresh()
 
-        elif event == em.MENU_SUBMENU or event == em.TV_START_RECORDING:
+        #elif event == em.MENU_SUBMENU or event == em.TV_START_RECORDING:
+        elif event == em.MENU_SUBMENU:
+            
+            pass
+
+        elif event == em.TV_START_RECORDING:
             if self.selected.scheduled:
                 program_display.ProgramDisplay(parent=self, context='recording',
                                                   prog=self.selected).show()
Index: tv/tvmenu.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/tvmenu.py,v
retrieving revision 1.10
diff -u -r1.10 tvmenu.py
--- tv/tvmenu.py        31 Dec 2003 16:10:30 -0000      1.10
+++ tv/tvmenu.py        8 Jan 2004 08:11:02 -0000
@@ -194,7 +194,7 @@
         items.append(menu.MenuItem(_('Scheduled Recordings'), 
                                    action=self.view_schedule))
         items.append(menu.MenuItem(_('Search Guide'), action=self.show_search))
-        # items.append(menu.MenuItem('View Favorites', action=self.show_favorites))
+        items.append(menu.MenuItem('View Favorites', action=self.show_favorites))
 
         plugins_list = plugin.get('mainmenu_tv')
         for p in plugins_list:
Index: tv/view_favorites.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/view_favorites.py,v
retrieving revision 1.5
diff -u -r1.5 view_favorites.py
--- tv/view_favorites.py        16 Nov 2003 17:38:48 -0000      1.5
+++ tv/view_favorites.py        8 Jan 2004 08:11:02 -0000
@@ -43,7 +43,7 @@
 # ----------------------------------------------------------------------- */
 #endif
 
-import time
+from time import gmtime, strftime
 
 import config, record_client, edit_favorite
 import event as em
@@ -75,7 +75,7 @@
 
         
     def __init__(self, parent='osd', text=None, search=None, handler=None, 
-                 left=None, top=None, width=600, height=520, bg_color=None, 
+                 left=None, top=None, width=600, height=400, bg_color=None, 
                  fg_color=None, icon=None, border=None, bd_color=None, 
                  bd_width=None):
 
@@ -93,10 +93,11 @@
 
         self.internal_h_align = Align.CENTER
 
-        legend = Label(_('Name\tTitle\tChannel\tDOW\tTOD'), self, Align.CENTER)
+        #legend = Label(_('Name Title Channel DOW TOD'), self, Align.CENTER)
 
-        items_height = 40
-        self.num_shown_items = 7
+        #items_height = 40
+        items_height = Button('foo').height + 2
+        self.num_shown_items = 8
         self.results = ListBox(width=(self.width-2*self.h_margin),
                                height=self.num_shown_items*items_height,
                                show_v_scrollbar=0)
@@ -106,10 +107,18 @@
         self.results.set_h_align(Align.CENTER)
         self.add_child(self.results)
 
-        (result, favorites) = record_client.getFavorites()
+        self.refreshList()
 
-        if result:
+    def refreshList(self):
+        (self.result, favorites) = record_client.getFavorites()
+        if not self.result:
+            errormsg = Label(_('Get favorites failed: %s') % recordings,
+                             self, Align.CENTER)
+            return
+
+        if self.result:
             i = 0
+            self.results.items = []
 
             if len(favorites) > self.num_shown_items:
                 self.results.show_v_scrollbar = 1
@@ -121,12 +130,26 @@
             favorites.sort(f)
             for fav in favorites:
                 i += 1
-                self.results.add_item(text='%s : %s : %s : %s : %s' % \
+                if fav.channel == 'ANY':
+                    chan = 'any channel'
+                else:
+                    chan = fav.channel
+                if fav.dow == 'ANY':
+                    dow = 'any day'
+                else:
+                    week_days = ('Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun')
+                    dow = week_days[int(fav.dow)]
+                if fav.mod == 'ANY':
+                    mod = 'any time'
+                else:
+                    mod = strftime(config.TV_TIMEFORMAT, gmtime(fav.mod * 60))
+                self.results.add_item(text='%s: %s (%s, %s, %s)' % \
                                         (fav.name, 
                                          fav.title,
-                                         fav.channel_id,
-                                         fav.dow,
-                                         fav.mod),
+                                         #fav.channel_id,
+                                         chan,
+                                         dow,
+                                         mod),
                                       value=fav)
 
             space_left = self.num_shown_items - i
@@ -145,9 +168,11 @@
         if event in (em.INPUT_UP, em.INPUT_DOWN, em.INPUT_LEFT, em.INPUT_RIGHT):
             return self.results.eventhandler(event)
         elif event == em.INPUT_ENTER:
-            edit_favorite.EditFavorite(parent=self.parent,
-                           subject=self.results.get_selected_item().value).show()
-            # self.destroy()
+            subject = self.results.get_selected_item().value
+            if subject == ' ': subject = None
+            if subject:
+                edit_favorite.EditFavorite(parent=self, subject=subject,
+                context='favorites').show()
             return
         elif event == em.INPUT_EXIT:
             self.destroy()
Index: helpers/recordserver.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/helpers/recordserver.py,v
retrieving revision 1.20
diff -u -r1.20 recordserver.py
--- helpers/recordserver.py     30 Nov 2003 16:30:58 -0000      1.20
+++ helpers/recordserver.py     8 Jan 2004 08:14:12 -0000
@@ -721,7 +721,9 @@
 
 
     def xmlrpc_addEditedFavorite(self, name, title, chan, dow, mod, priority):
-        (status, response) = self.addEditedFavorite(name, title, chan, dow, mod, 
priority)
+        (status, response) = \
+            self.addEditedFavorite(marmalade.unjellyFromXML(name), \
+            marmalade.unjellyFromXML(title), chan, dow, mod, priority)
 
         return (status, 'RecordServer::addEditedFavorite: %s' % response)
 
Index: gui/Button.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/gui/Button.py,v
retrieving revision 1.16
diff -u -r1.16 Button.py
--- gui/Button.py       12 Oct 2003 10:56:19 -0000      1.16
+++ gui/Button.py       8 Jan 2004 08:09:43 -0000
@@ -222,15 +222,21 @@
             raise TypeError, type(text)
 
         if not self.label:
-            self.label = Label()
+            self.label = Label(h_align = Align.CENTER, v_align = Align.CENTER,
+                               text_prop = {
+                                             'align_h': 'center',
+                                             'align_v': 'center',
+                                             'mode': 'hard',
+                                           }
+                              )
             self.label.set_text(text)
             self.label.set_background_color(None)
             self.add_child(self.label)
         else:
             self.label.set_text(text)
 
-        self.label.set_v_align(Align.CENTER)
-        self.label.set_h_align(Align.CENTER)
+        #self.label.set_v_align(Align.CENTER)
+        #self.label.set_h_align(Align.CENTER)
 
         self.surface_changed = 1
 
Index: gui/Label.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/gui/Label.py,v
retrieving revision 1.22
diff -u -r1.22 Label.py
--- gui/Label.py        12 Oct 2003 10:56:19 -0000      1.22
+++ gui/Label.py        8 Jan 2004 08:09:43 -0000
@@ -223,8 +223,8 @@
         else:
             raise TypeError, type(text)
 
-        # self.width = -1
-        # self.height = -1
+        self.width = -1
+        self.height = -1
         self.surface_changed = 1
 
 
Index: gui/LetterBox.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/gui/LetterBox.py,v
retrieving revision 1.13
diff -u -r1.13 LetterBox.py
--- gui/LetterBox.py    12 Oct 2003 10:56:19 -0000      1.13
+++ gui/LetterBox.py    8 Jan 2004 08:09:43 -0000
@@ -142,6 +142,8 @@
         self.v_spacing          = 0
         self.set_v_align(Align.BOTTOM)
         self.set_h_align(Align.CENTER)
+        self.label.set_v_align(Align.CENTER)
+        self.label.set_h_align(Align.CENTER)
 
 
     def set_text(self, text):
@@ -149,6 +151,8 @@
         Button.set_text(self, text)
         self.label.width = self.width
         self.label.height = self.height
+        self.label.set_v_align(Align.CENTER)
+        self.label.set_h_align(Align.CENTER)
 
 
     def charUp(self):
@@ -161,7 +165,7 @@
         self.set_text(self.ourChars[charNext])
 
         # XXX: should not have to draw here but it fixes an align problem.
-        self.draw()
+        #self.draw()
 
 
     def charDown(self):
@@ -174,7 +178,7 @@
         self.set_text(self.ourChars[charNext])
 
         # XXX: should not have to draw here but it fixes an align problem.
-        self.draw()
+        #self.draw()
 
 
     def cycle_phone_char(self, command):

Reply via email to