From a092316126c54b280949644cd40691aaa591910f Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 21 Feb 2006 02:16:07 +0000 Subject: [PATCH] add perService position display with gauge --- lib/python/Components/PerServiceDisplay.py | 24 ++++++----- lib/python/Components/ServicePosition.py | 48 +++++++++++++++++++++- 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/lib/python/Components/PerServiceDisplay.py b/lib/python/Components/PerServiceDisplay.py index 23f6ecce..55ef3d18 100644 --- a/lib/python/Components/PerServiceDisplay.py +++ b/lib/python/Components/PerServiceDisplay.py @@ -5,12 +5,9 @@ from VariableValue import * 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(GUIComponent): def __init__(self, navcore, eventmap): GUIComponent.__init__(self) - VariableText.__init__(self) self.eventmap = eventmap self.navcore = navcore self.navcore.event.append(self.event) @@ -26,11 +23,6 @@ class PerServiceDisplay(GUIComponent, VariableText): # call handler self.eventmap[ev]() - def createWidget(self, parent): - # by default, we use a label to display our data. - g = eLabel(parent) - return g - def enablePolling(self, interval=60000): if interval: self.poll_timer.start(interval) @@ -43,7 +35,18 @@ class PerServiceDisplay(GUIComponent, VariableText): def poll(self): pass -class PerServiceDisplayProgress(GUIComponent, VariableValue, PerServiceDisplay): +class PerServiceDisplay(PerServiceBase, VariableText): + """Mixin for building components which display something which changes on navigation events, for example "service name" """ + def __init__(self, navcore, eventmap): + VariableText.__init__(self) + PerServiceBase.__init__(self, navcore, eventmap) + + def createWidget(self, parent): + # by default, we use a label to display our data. + g = eLabel(parent) + return g + +class PerServiceDisplayProgress(GUIComponent, VariableValue, PerServiceBase): def __init__(self, navcore, eventmap): GUIComponent.__init__(self) VariableValue.__init__(self) @@ -54,7 +57,6 @@ class PerServiceDisplayProgress(GUIComponent, VariableValue, PerServiceDisplay): # start with stopped state, so simulate that self.event(iPlayableService.evEnd) - def createWidget(self, parent): # by default, we use a label to display our data. self.g = eSlider(parent) diff --git a/lib/python/Components/ServicePosition.py b/lib/python/Components/ServicePosition.py index 80e5e3db..35280cf9 100644 --- a/lib/python/Components/ServicePosition.py +++ b/lib/python/Components/ServicePosition.py @@ -1,8 +1,7 @@ from PerServiceDisplay import * from enigma import eTimer - -from enigma import iPlayableService, iSeekableServicePtr +from enigma import iPlayableService, iSeekableServicePtr, ePositionGauge class ServicePosition(PerServiceDisplay): TYPE_LENGTH = 0, @@ -67,3 +66,48 @@ class ServicePosition(PerServiceDisplay): def stopEvent(self): self.updateTimer.stop() self.setText(""); + +class ServicePositionGauge(PerServiceBase): + def __init__(self, navcore): + PerServiceBase.__init__(self, navcore, + { + iPlayableService.evStart: self.newService, + iPlayableService.evEnd: self.stopEvent + }) + + def newService(self): + if self.get() is None: + self.disablePolling() + else: + self.enablePolling(interval=500) + + def get(self): + service = self.navcore.getCurrentService() + if service is None: + return None + seek = service.seek() + if seek is None: + return None + + len = seek.getLength() + pos = seek.getPlayPosition() + + if len[0] or pos[0]: + return (0, 0) + return (len[1], pos[1]) + + def poll(self): + data = self.get() + if data is None: + return + self.instance.setLength(data[0]) + self.instance.setPosition(data[1]) + + def stopEvent(self): + self.disablePolling() + + def GUIcreate(self, parent): + self.instance = ePositionGauge(parent) + + def GUIdelete(self): + self.instance = None -- 2.30.2