take care of scrollbar size when build movielist and timerlist entries
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Tue, 31 Jul 2007 10:16:08 +0000 (10:16 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Tue, 31 Jul 2007 10:16:08 +0000 (10:16 +0000)
i dont understand how it could work ever

lib/python/Components/MovieList.py
lib/python/Components/TimerList.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/TimerEdit.py

index d43b510646c5251a43eae542b9084ac1bc1cacbc..993e2eeb0dedcca88f028c0b9e54027c3f33fb6c 100644 (file)
@@ -25,6 +25,7 @@ class MovieList(GUIComponent):
        def buildMovieListEntry(self, serviceref, info, begin, len):
                if serviceref.flags & eServiceReference.mustDescent:
                        return None
        def buildMovieListEntry(self, serviceref, info, begin, len):
                if serviceref.flags & eServiceReference.mustDescent:
                        return None
+               width = self.entry_width
 
                if len <= 0: #recalc len when not already done
                        cur_idx = self.l.getCurrentSelectionIndex()
 
                if len <= 0: #recalc len when not already done
                        cur_idx = self.l.getCurrentSelectionIndex()
@@ -39,10 +40,10 @@ class MovieList(GUIComponent):
 
                res = [ None ]
 
 
                res = [ None ]
 
-               res.append(MultiContentEntryText(pos=(0, 0), size=(420, 30), font = 0, flags = RT_HALIGN_LEFT, text = info.getName(serviceref)))
+               res.append(MultiContentEntryText(pos=(0, 0), size=(width-140, 30), font = 0, flags = RT_HALIGN_LEFT, text = info.getName(serviceref)))
                service = ServiceReference(info.getInfoString(serviceref, iServiceInformation.sServiceref))
                if service is not None:
                service = ServiceReference(info.getInfoString(serviceref, iServiceInformation.sServiceref))
                if service is not None:
-                       res.append(MultiContentEntryText(pos=(420, 0), size=(140, 30), font = 2, flags = RT_HALIGN_RIGHT, text = service.getServiceName()))
+                       res.append(MultiContentEntryText(pos=(width-140, 0), size=(140, 30), font = 2, flags = RT_HALIGN_RIGHT, text = service.getServiceName()))
 
                description = info.getInfoString(serviceref, iServiceInformation.sDescription)
 
 
                description = info.getInfoString(serviceref, iServiceInformation.sDescription)
 
@@ -51,9 +52,9 @@ class MovieList(GUIComponent):
                        t = FuzzyTime(begin)
                        begin_string = t[0] + ", " + t[1]
 
                        t = FuzzyTime(begin)
                        begin_string = t[0] + ", " + t[1]
 
-               res.append(MultiContentEntryText(pos=(0, 30), size=(560, 20), font=1, flags=RT_HALIGN_LEFT, text=description))
-               res.append(MultiContentEntryText(pos=(0, 50), size=(270, 20), font=1, flags=RT_HALIGN_LEFT, text=begin_string))
-               res.append(MultiContentEntryText(pos=(290, 50), size=(270, 20), font=1, flags=RT_HALIGN_RIGHT, text=len))
+               res.append(MultiContentEntryText(pos=(0, 30), size=(width, 20), font=1, flags=RT_HALIGN_LEFT, text=description))
+               res.append(MultiContentEntryText(pos=(0, 50), size=(width-270, 20), font=1, flags=RT_HALIGN_LEFT, text=begin_string))
+               res.append(MultiContentEntryText(pos=(width, 50), size=(270, 20), font=1, flags=RT_HALIGN_RIGHT, text=len))
 
                return res
 
 
                return res
 
@@ -75,19 +76,22 @@ class MovieList(GUIComponent):
        
        def postWidgetCreate(self, instance):
                instance.setContent(self.l)
        
        def postWidgetCreate(self, instance):
                instance.setContent(self.l)
-       
+               self.entry_width = self.l.getItemSize().width()
+
        def reload(self, root = None, filter_tags = None):
                if root is not None:
                        self.load(root, filter_tags)
                else:
                        self.load(self.root, filter_tags)
                self.l.setList(self.list)
        def reload(self, root = None, filter_tags = None):
                if root is not None:
                        self.load(root, filter_tags)
                else:
                        self.load(self.root, filter_tags)
                self.l.setList(self.list)
+               self.entry_width = self.l.getItemSize().width()
 
        def removeService(self, service):
                for l in self.list[:]:
                        if l[0] == service:
                                self.list.remove(l)
                self.l.setList(self.list)
 
        def removeService(self, service):
                for l in self.list[:]:
                        if l[0] == service:
                                self.list.remove(l)
                self.l.setList(self.list)
+               self.entry_width = self.l.getItemSize().width()
 
        def __len__(self):
                return len(self.list)
 
        def __len__(self):
                return len(self.list)
index e31a0f4a46664c1a199dcc62a0cc32aa519f3dcd..53442f5022822de0a87e5d3a96075ce83f1b8146 100644 (file)
@@ -8,72 +8,73 @@ from enigma import eListboxPythonMultiContent, eListbox, gFont, loadPNG, \
 from timer import TimerEntry
 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
 
 from timer import TimerEntry
 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
 
+class TimerList(HTMLComponent, GUIComponent, object):
 #
 #  | <Service>     <Name of the Timer>  |
 #  | <start, end>              <state>  |
 #
 #
 #  | <Service>     <Name of the Timer>  |
 #  | <start, end>              <state>  |
 #
-def TimerEntryComponent(timer, processed):
-       res = [ timer ]
-       
-       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 560, 30, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, timer.service_ref.getServiceName()))
-       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 30, 560, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, timer.name))
-       
-       repeatedtext = ""
-       days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ]
-       if timer.repeated:
-               flags = timer.repeated
-               count = 0
-               for x in range(0, 7):
-                               if (flags & 1 == 1):
-                                       if (count != 0):
-                                               repeatedtext += ", "
-                                       repeatedtext += days[x]
-                                       count += 1
-                               flags = flags >> 1
-               if timer.justplay:
-                       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s "+ _("(ZAP)")) % (FuzzyTime(timer.begin)[1]))))
-               else:
-                       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s ... %s (%d " + _("mins") + ")") % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1], (timer.end - timer.begin) / 60))))
-       else:
-               if timer.justplay:
-                       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s " + _("(ZAP)")) % (FuzzyTime(timer.begin)))))
-               else:
-                       res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s ... %s (%d " + _("mins") + ")") % (FuzzyTime(timer.begin) + FuzzyTime(timer.end)[1:] + ((timer.end - timer.begin) / 60,)))))
+       def buildTimerEntry(self, timer, processed):
+               width = self.l.getItemSize().width()
+               res = [ None ]
+               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0, width, 30, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, timer.service_ref.getServiceName()))
+               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 30, width, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, timer.name))
 
 
-       if not processed:
-               if timer.state == TimerEntry.StateWaiting:
-                       state = _("waiting")
-               elif timer.state == TimerEntry.StatePrepared:
-                       state = _("about to start")
-               elif timer.state == TimerEntry.StateRunning:
+               repeatedtext = ""
+               days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ]
+               if timer.repeated:
+                       flags = timer.repeated
+                       count = 0
+                       for x in range(0, 7):
+                                       if (flags & 1 == 1):
+                                               if (count != 0):
+                                                       repeatedtext += ", "
+                                               repeatedtext += days[x]
+                                               count += 1
+                                       flags = flags >> 1
                        if timer.justplay:
                        if timer.justplay:
-                               state = _("zapped")
+                               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s "+ _("(ZAP)")) % (FuzzyTime(timer.begin)[1]))))
                        else:
                        else:
-                               state = _("recording...")
+                               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s ... %s (%d " + _("mins") + ")") % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1], (timer.end - timer.begin) / 60))))
                else:
                else:
-                       state = _("<unknown>")
-       else:
-               state = _("done!")
-       
-       res.append((eListboxPythonMultiContent.TYPE_TEXT, 320, 50, 240, 20, 1, RT_HALIGN_RIGHT|RT_VALIGN_CENTER, state))
+                       if timer.justplay:
+                               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s " + _("(ZAP)")) % (FuzzyTime(timer.begin)))))
+                       else:
+                               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s ... %s (%d " + _("mins") + ")") % (FuzzyTime(timer.begin) + FuzzyTime(timer.end)[1:] + ((timer.end - timer.begin) / 60,)))))
 
 
-       if timer.disabled:
-               png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "redx.png"))
-               res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 490, 5, 40, 40, png))
-       
-       return res
+               if not processed:
+                       if timer.state == TimerEntry.StateWaiting:
+                               state = _("waiting")
+                       elif timer.state == TimerEntry.StatePrepared:
+                               state = _("about to start")
+                       elif timer.state == TimerEntry.StateRunning:
+                               if timer.justplay:
+                                       state = _("zapped")
+                               else:
+                                       state = _("recording...")
+                       else:
+                               state = _("<unknown>")
+               else:
+                       state = _("done!")
+
+               res.append((eListboxPythonMultiContent.TYPE_TEXT, width-240, 50, 240, 20, 1, RT_HALIGN_RIGHT|RT_VALIGN_CENTER, state))
+
+               if timer.disabled:
+                       png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "redx.png"))
+                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 490, 5, 40, 40, png))
+               return res
 
 
-class TimerList(HTMLComponent, GUIComponent, object):
        def __init__(self, list):
                GUIComponent.__init__(self)
                self.l = eListboxPythonMultiContent()
        def __init__(self, list):
                GUIComponent.__init__(self)
                self.l = eListboxPythonMultiContent()
-               self.l.setList(list)
+               self.l.setBuildFunc(self.buildTimerEntry)
                self.l.setFont(0, gFont("Regular", 20))
                self.l.setFont(1, gFont("Regular", 18))
                self.l.setItemHeight(70)
                self.l.setFont(0, gFont("Regular", 20))
                self.l.setFont(1, gFont("Regular", 18))
                self.l.setItemHeight(70)
+               self.l.setList(list)
        
        def getCurrent(self):
        
        def getCurrent(self):
-               return self.l.getCurrentSelection()
+               cur = self.l.getCurrentSelection()
+               return cur and cur[0]
        
        GUI_WIDGET = eListbox
        
        
        GUI_WIDGET = eListbox
        
index 0c0916f6d4da1bd404443af7fd84f2a631364b89..85b1d80f3f44a7affff5c8a9a0fd28d61c7af459 100644 (file)
@@ -14,7 +14,6 @@ from Components.Sources.EventInfo import EventInfo
 from Components.Sources.FrontendStatus import FrontendStatus
 from Components.Sources.Boolean import Boolean
 from Components.Sources.Clock import Clock
 from Components.Sources.FrontendStatus import FrontendStatus
 from Components.Sources.Boolean import Boolean
 from Components.Sources.Clock import Clock
-from Components.TimerList import TimerEntryComponent
 from Components.config import config, ConfigBoolean, ConfigClock
 from EpgSelection import EPGSelection
 from Plugins.Plugin import PluginDescriptor
 from Components.config import config, ConfigBoolean, ConfigClock
 from EpgSelection import EPGSelection
 from Plugins.Plugin import PluginDescriptor
@@ -1359,7 +1358,7 @@ class InfoBarInstantRecord:
                        if not x in self.session.nav.RecordTimer.timer_list:
                                self.recording.remove(x)
                        elif x.dontSave and x.isRunning():
                        if not x in self.session.nav.RecordTimer.timer_list:
                                self.recording.remove(x)
                        elif x.dontSave and x.isRunning():
-                               list.append(TimerEntryComponent(x, False))
+                               list.append((x, False))
 
                if answer[1] == "changeduration":
                        if len(self.recording) == 1:
 
                if answer[1] == "changeduration":
                        if len(self.recording) == 1:
index 6240c676888e854a3d6c1eb2e8ddb0df4f7561c3..3497fcbe1d859840490b1207475d2f61ad57cdcf 100644 (file)
@@ -1,7 +1,7 @@
 from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.MenuList import MenuList
 from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.MenuList import MenuList
-from Components.TimerList import TimerList, TimerEntryComponent
+from Components.TimerList import TimerList
 from Components.TimerSanityCheck import TimerSanityCheck
 from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from Screen import Screen
 from Components.TimerSanityCheck import TimerSanityCheck
 from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from Screen import Screen
@@ -63,7 +63,7 @@ class TimerEditList(Screen):
        def toggleDisabledState(self):
                cur=self["timerlist"].getCurrent()
                if cur:
        def toggleDisabledState(self):
                cur=self["timerlist"].getCurrent()
                if cur:
-                       t = cur[0]
+                       t = cur
                
                        if t.disabled:
                                t.enable()
                
                        if t.disabled:
                                t.enable()
@@ -97,7 +97,7 @@ class TimerEditList(Screen):
                
        def updateState(self):
                if len(self.list) > 0:
                
        def updateState(self):
                if len(self.list) > 0:
-                       if self["timerlist"].getCurrent()[0].disabled:
+                       if self["timerlist"].getCurrent().disabled:
                                self["key_yellow"].setText(_("Enable"))
                        else:
                                self["key_yellow"].setText(_("Disable"))
                                self["key_yellow"].setText(_("Enable"))
                        else:
                                self["key_yellow"].setText(_("Disable"))
@@ -107,21 +107,21 @@ class TimerEditList(Screen):
                del self.list[:]
                
                for timer in self.session.nav.RecordTimer.timer_list:
                del self.list[:]
                
                for timer in self.session.nav.RecordTimer.timer_list:
-                       self.list.append(TimerEntryComponent(timer, processed=False))
+                       self.list.append((timer, False))
                
                for timer in self.session.nav.RecordTimer.processed_timers:
                
                for timer in self.session.nav.RecordTimer.processed_timers:
-                       self.list.append(TimerEntryComponent(timer, processed=True))
+                       self.list.append((timer, True))
                self.list.sort(cmp = lambda x, y: x[0].begin < y[0].begin)
 
        def showLog(self):
                cur=self["timerlist"].getCurrent()
                if cur:
                self.list.sort(cmp = lambda x, y: x[0].begin < y[0].begin)
 
        def showLog(self):
                cur=self["timerlist"].getCurrent()
                if cur:
-                       self.session.openWithCallback(self.finishedEdit, TimerLog, cur[0])
+                       self.session.openWithCallback(self.finishedEdit, TimerLog, cur)
 
        def openEdit(self):
                cur=self["timerlist"].getCurrent()
                if cur:
 
        def openEdit(self):
                cur=self["timerlist"].getCurrent()
                if cur:
-                       self.session.openWithCallback(self.finishedEdit, TimerEntry, cur[0])
+                       self.session.openWithCallback(self.finishedEdit, TimerEntry, cur)
 
        def cleanupQuestion(self):
                self.session.openWithCallback(self.cleanupTimer, MessageBox, _("Really delete done timers?"))
 
        def cleanupQuestion(self):
                self.session.openWithCallback(self.cleanupTimer, MessageBox, _("Really delete done timers?"))
@@ -140,7 +140,7 @@ class TimerEditList(Screen):
                list = self["timerlist"]
                cur = list.getCurrent()
                if cur:
                list = self["timerlist"]
                cur = list.getCurrent()
                if cur:
-                       timer = cur[0]
+                       timer = cur
                        timer.afterEvent = AFTEREVENT.NONE
                        self.session.nav.RecordTimer.removeEntry(timer)
                        self.refill()
                        timer.afterEvent = AFTEREVENT.NONE
                        self.session.nav.RecordTimer.removeEntry(timer)
                        self.refill()
@@ -209,7 +209,7 @@ class TimerEditList(Screen):
 
        def onStateChange(self, entry):
                self.refill()
 
        def onStateChange(self, entry):
                self.refill()
-               
+
 class TimerSanityConflict(Screen):
        def __init__(self, session, timer):
                Screen.__init__(self, session)
 class TimerSanityConflict(Screen):
        def __init__(self, session, timer):
                Screen.__init__(self, session)
@@ -252,10 +252,10 @@ class TimerSanityConflict(Screen):
                        }, -1)
 
        def getTimerList(self, timer):
                        }, -1)
 
        def getTimerList(self, timer):
-               return [TimerEntryComponent(timer, processed=False)]
+               return [(timer, False)]
 
        def editTimer1(self):
 
        def editTimer1(self):
-               self.session.openWithCallback(self.finishedEdit, TimerEntry, self["timer1"].getCurrent()[0])
+               self.session.openWithCallback(self.finishedEdit, TimerEntry, self["timer1"].getCurrent())
 
        def disableTimer1(self):
                self.timer[0].disabled = True
 
        def disableTimer1(self):
                self.timer[0].disabled = True
@@ -266,10 +266,8 @@ class TimerSanityConflict(Screen):
 
        def up(self):
                self["list"].instance.moveSelection(self["list"].instance.moveUp)
 
        def up(self):
                self["list"].instance.moveSelection(self["list"].instance.moveUp)
-               self["timer2"].l.setList(self.getTimerList(self["list"].getCurrent()[1]))
+               self["timer2"].l.setList(self.getTimerList(self["list"].getCurrent()))
                
        def down(self):
                self["list"].instance.moveSelection(self["list"].instance.moveDown)
                
        def down(self):
                self["list"].instance.moveSelection(self["list"].instance.moveDown)
-               self["timer2"].l.setList(self.getTimerList(self["list"].getCurrent()[1]))
-                       
-               
\ No newline at end of file
+               self["timer2"].l.setList(self.getTimerList(self["list"].getCurrent()))