X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/aa3e781f31a04223416f0a34b25ab95fc0bef429..d65ce06bfed2444d9870630f095db401d78a096e:/lib/python/Components/PerServiceDisplay.py diff --git a/lib/python/Components/PerServiceDisplay.py b/lib/python/Components/PerServiceDisplay.py index bd94318e..6e02cce9 100644 --- a/lib/python/Components/PerServiceDisplay.py +++ b/lib/python/Components/PerServiceDisplay.py @@ -1,30 +1,65 @@ -from GUIComponent import * -from VariableText import * +from GUIComponent import GUIComponent +from VariableText import VariableText +from VariableValue import VariableValue -from enigma import pNavigation -from enigma import eLabel +from enigma import iPlayableService +from enigma import eLabel, eSlider, eTimer -class PerServiceDisplay(GUIComponent, VariableText): - """Mixin for building components which display something which changes on navigation events, for example "service name" """ +class PerServiceBase(object): + def __init__(self, navcore, eventmap, with_event=False): + self.eventmap = eventmap + self.navcore = navcore + self.navcore.event.append(self.event_callback) + self.poll_timer = eTimer() + self.poll_timer.timeout.get().append(self.poll) + self.with_event = with_event + + # start with stopped state, so simulate that + self.event_callback(iPlayableService.evEnd) + + def destroy(self): + self.navcore.event.remove(self.event_callback) + + def event_callback(self, ev): + # loop up if we need to handle this event + if self.eventmap.has_key(ev): + # call handler + if self.with_event: + self.eventmap[ev](ev) + else: + self.eventmap[ev]() + def enablePolling(self, interval=60000): + if interval: + self.poll_timer.start(interval) + else: + self.poll_timer.stop() + + def disablePolling(self): + self.enablePolling(interval=0) + + def poll(self): + pass + +class PerServiceDisplay(PerServiceBase, VariableText, GUIComponent): + """Mixin for building components which display something which changes on navigation events, for example "service name" """ def __init__(self, navcore, eventmap): GUIComponent.__init__(self) VariableText.__init__(self) + PerServiceBase.__init__(self, navcore, eventmap) + + GUI_WIDGET = eLabel + +class PerServiceDisplayProgress(PerServiceBase, VariableValue, GUIComponent): + def __init__(self, navcore, eventmap): + GUIComponent.__init__(self) + VariableValue.__init__(self) + PerServiceBase.__init__(self, navcore, eventmap) self.eventmap = eventmap self.navcore = navcore self.navcore.event.append(self.event) # start with stopped state, so simulate that - self.event(pNavigation.evStopService) - - def event(self, ev): - # loop up if we need to handle this event - if self.eventmap.has_key(ev): - # call handler - self.eventmap[ev]() - - def createWidget(self, parent, skindata): - # by default, we use a label to display our data. - g = eLabel(parent) - return g + self.event(iPlayableService.evEnd) + GUI_WIDGET = eSlider