use progressbar in InfoBar to display the progress of the "now" event
authorStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Wed, 18 Jan 2006 02:07:58 +0000 (02:07 +0000)
committerStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Wed, 18 Jan 2006 02:07:58 +0000 (02:07 +0000)
data/skin.xml
lib/python/Components/EventInfo.py
lib/python/Components/PerServiceDisplay.py
lib/python/Screens/InfoBarGenerics.py

index 6b05295..7963cc9 100644 (file)
                        <widget name="Event_Next" position="273,98" size="282,22" font="Regular;20" backgroundColor="dark" />
                        <widget name="Event_Now_Duration" position="555,68" size="150,26" font="Regular;22" backgroundColor="dark" />
                        <widget name="Event_Next_Duration" position="555,98" size="150,26" font="Regular;22" backgroundColor="dark" />
+                       <widget name="Now_ProgressBar" position="304,60" size="121,8" zPosition="1" />
 
                        <widget name="ButtonRed" pixmap="/usr/share/enigma2/button_red.png" position="210,132" size="27,12" />
                        <widget name="ButtonRedText" position="240,130" size="85,22" font="Regular;14" backgroundColor="blue" transparent="1" />
index f295281..ce13ba8 100644 (file)
@@ -1,6 +1,6 @@
 from PerServiceDisplay import *
 from time import strftime
-from time import localtime
+from time import localtime, time
 
 from enigma import iServiceInformationPtr, eServiceEventPtr
 
@@ -31,15 +31,36 @@ class EventInfo(PerServiceDisplay):
                        if info is not None: 
                                ev = info.getEvent(self.now_or_next & 1)
                                if ev is not None:
-                                       if (self.Now_Duration <= self.now_or_next <= self.Next_Duration):
-                                               self.setText("%d min" % (ev.getDuration() / 60))
-                                       if (self.Now_StartTime <= self.now_or_next <= self.Next_StartTime):
-                                               self.setText(strftime("%H:%M", localtime(ev.getBeginTime())))
-                                       if (self.Now <= self.now_or_next <= self.Next):
-                                               self.setText(ev.getEventName())
+                                       self.update(ev)
+
+
+       def update(self, ev):
+               if (self.Now_Duration <= self.now_or_next <= self.Next_Duration):
+                       self.setText("%d min" % (ev.getDuration() / 60))
+               if (self.Now_StartTime <= self.now_or_next <= self.Next_StartTime):
+                       self.setText(strftime("%H:%M", localtime(ev.getBeginTime())))
+               if (self.Now <= self.now_or_next <= self.Next):
+                       self.setText(ev.getEventName())         
 
        def stopEvent(self):
                self.setText(
                        #(_("waiting for event data..."), "", "--:--",  "--:--", "--:--", "--:--")[self.now_or_next]);
                        ("", "", "--:--",  "--:--", "--:--", "--:--")[self.now_or_next]);
 
+
+class EventInfoProgress(PerServiceDisplayProgress, EventInfo):
+       def __init__(self, navcore, now_or_next):
+               self.now_or_next = now_or_next
+               PerServiceDisplayProgress.__init__(self, navcore, 
+                       { 
+                               pNavigation.evUpdatedEventInfo: self.ourEvent, 
+                               pNavigation.evStopService: self.stopEvent 
+                       })
+
+       def update(self, ev):
+               self.g.setRange(0, ev.getDuration())
+               progress = int(time() - ev.getBeginTime())
+               
+               self.setValue(progress)
+               
+               
\ No newline at end of file
index eab1e08..01e5cc8 100644 (file)
@@ -1,8 +1,9 @@
 from GUIComponent import *
 from VariableText import *
+from VariableValue import *
 
 from enigma import pNavigation
-from enigma import eLabel
+from enigma import eLabel, eSlider
 
 class PerServiceDisplay(GUIComponent, VariableText):
        """Mixin for building components which display something which changes on navigation events, for example "service name" """
@@ -28,3 +29,21 @@ class PerServiceDisplay(GUIComponent, VariableText):
                g = eLabel(parent)
                return g
 
+
+class PerServiceDisplayProgress(GUIComponent, VariableValue, PerServiceDisplay):
+       def __init__(self, navcore, eventmap):
+               GUIComponent.__init__(self)
+               VariableValue.__init__(self)
+               self.eventmap = eventmap
+               self.navcore = navcore
+               self.navcore.event.append(self.event)
+
+               # start with stopped state, so simulate that
+               self.event(pNavigation.evStopService)
+
+
+       def createWidget(self, parent):
+               # by default, we use a label to display our data.
+               self.g = eSlider(parent)
+               return self.g
+       
\ No newline at end of file
index 4640de0..3e7146c 100644 (file)
@@ -454,6 +454,8 @@ class InfoBarEvent:
                self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
                self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
 
+               self["Now_ProgressBar"] = EventInfoProgress(self.session.nav, EventInfo.Now)
+
 class InfoBarServiceName:
        def __init__(self):
                self["ServiceName"] = ServiceName(self.session.nav)