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
+               width = self.entry_width
 
                if len <= 0: #recalc len when not already done
                        cur_idx = self.l.getCurrentSelectionIndex()
@@ -39,10 +40,10 @@ class MovieList(GUIComponent):
 
                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:
-                       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)
 
@@ -51,9 +52,9 @@ class MovieList(GUIComponent):
                        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
 
@@ -75,19 +76,22 @@ class MovieList(GUIComponent):
        
        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)
+               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)
+               self.entry_width = self.l.getItemSize().width()
 
        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
 
+class TimerList(HTMLComponent, GUIComponent, object):
 #
 #  | <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:
-                               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:
-                               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:
-                       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()
-               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.setList(list)
        
        def getCurrent(self):
-               return self.l.getCurrentSelection()
+               cur = self.l.getCurrentSelection()
+               return cur and cur[0]
        
        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.TimerList import TimerEntryComponent
 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():
-                               list.append(TimerEntryComponent(x, False))
+                               list.append((x, False))
 
                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.TimerList import TimerList, TimerEntryComponent
+from Components.TimerList import TimerList
 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:
-                       t = cur[0]
+                       t = cur
                
                        if t.disabled:
                                t.enable()
@@ -97,7 +97,7 @@ class TimerEditList(Screen):
                
        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"))
@@ -107,21 +107,21 @@ class TimerEditList(Screen):
                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:
-                       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.session.openWithCallback(self.finishedEdit, TimerLog, cur[0])
+                       self.session.openWithCallback(self.finishedEdit, TimerLog, 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?"))
@@ -140,7 +140,7 @@ class TimerEditList(Screen):
                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()
@@ -209,7 +209,7 @@ class TimerEditList(Screen):
 
        def onStateChange(self, entry):
                self.refill()
-               
+
 class TimerSanityConflict(Screen):
        def __init__(self, session, timer):
                Screen.__init__(self, session)
@@ -252,10 +252,10 @@ class TimerSanityConflict(Screen):
                        }, -1)
 
        def getTimerList(self, timer):
-               return [TimerEntryComponent(timer, processed=False)]
+               return [(timer, False)]
 
        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
@@ -266,10 +266,8 @@ class TimerSanityConflict(Screen):
 
        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)
-               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()))