From: Felix Domke Date: Thu, 15 Jun 2006 17:34:06 +0000 (+0000) Subject: add new skin stuff X-Git-Tag: 2.6.0~3322 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/2e874fa14264bf37f17ae9b9375e26059e7f35ec add new skin stuff --- diff --git a/lib/python/Components/Converter/ClockToText.py b/lib/python/Components/Converter/ClockToText.py new file mode 100644 index 00000000..085ebc1a --- /dev/null +++ b/lib/python/Components/Converter/ClockToText.py @@ -0,0 +1,39 @@ +from Components.Converter.Converter import Converter +from time import localtime + +class ClockToText(Converter, object): + DEFAULT = 0 + WITH_SECONDS = 1 + IN_MINUTES = 2 + + # add: date, date as string, weekday, ... + # (whatever you need!) + + def __init__(self, type, *args, **kwargs): + Converter.__init__(self) + if type == "WithSeconds": + self.type = self.WITH_SECONDS + elif type == "InMinutes": + self.type = self.IN_MINUTES + else: + self.type = self.DEFAULT + + def getText(self): + time = self.source.time + if time is None: + return "" + + # handle durations + if self.type == self.IN_MINUTES: + return "%d min" % (time / 60) + + t = localtime(time) + + if self.type == self.WITH_SECONDS: + return "%2d:%02d:%02d" % (t.tm_hour, t.tm_min, t.tm_sec) + elif self.type == self.DEFAULT: + return "%02d:%02d" % (t.tm_hour, t.tm_min) + else: + return "???" + + text = property(getText) diff --git a/lib/python/Components/Converter/Converter.py b/lib/python/Components/Converter/Converter.py new file mode 100644 index 00000000..b75d253f --- /dev/null +++ b/lib/python/Components/Converter/Converter.py @@ -0,0 +1,18 @@ +from Tools.Event import Event + +class Converter: + def __init__(self): + self.changed = Event(start = self.start, stop = self.stop) + + def connect(self, source): + source.changed.listen(self.changed) + self.source = source + + def disconnect(self): + self.source.changed.unlisten(self.changed) + + def start(self): + pass + + def stop(self): + pass diff --git a/lib/python/Components/Converter/EventName.py b/lib/python/Components/Converter/EventName.py new file mode 100644 index 00000000..e391b95f --- /dev/null +++ b/lib/python/Components/Converter/EventName.py @@ -0,0 +1,29 @@ +from Components.Converter.Converter import Converter + +class EventName(Converter, object): + NAME = 0 + SHORT_DESCRIPTION = 1 + EXTENDED_DESCRIPTION = 2 + + def __init__(self, type, *args, **kwargs): + Converter.__init__(self) + if type == "Description": + self.type = self.SHORT_DESCRIPTION + elif type == "ExtendedDescription": + self.type = self.EXTENDED_DESCRIPTION + else: + self.type = self.NAME + + def getText(self): + event = self.source.event + if event is None: + return "" + + if self.type == self.NAME: + return event.getEventName() + elif self.type == self.SHORT_DESCRIPTION: + return event.getShortDescription() + elif self.type == self.EXTENDED_DESCRIPTION: + return event.getExtendedDescription() + + text = property(getText) diff --git a/lib/python/Components/Converter/EventTime.py b/lib/python/Components/Converter/EventTime.py new file mode 100644 index 00000000..3c312a69 --- /dev/null +++ b/lib/python/Components/Converter/EventTime.py @@ -0,0 +1,72 @@ +from Converter import Converter +from Poll import Poll +from time import time + +class EventTime(Poll, Converter, object): + STARTTIME = 0 + ENDTIME = 1 + REMAINING = 2 + PROGRESS = 3 + DURATION = 4 + + def __init__(self, type, *args, **kwargs): + Converter.__init__(self) + Poll.__init__(self) + if type == "EndTime": + self.type = self.ENDTIME + elif type == "Remaining": + self.type = self.REMAINING + self.poll_interval = 60*1000 + self.poll_enabled = True + elif type == "StartTime": + self.type = self.STARTTIME + elif type == "Duration": + self.type = self.DURATION + elif type == "Progress": + self.type = self.PROGRESS + self.poll_interval = 30*1000 + self.poll_enabled = True + else: + raise str("'%s' is not for EventTime converter" % type) + + def getTime(self): + assert self.type != self.PROGRESS + + event = self.source.event + if event is None: + return None + + if self.type == self.STARTTIME: + return event.getBeginTime() + elif self.type == self.ENDTIME: + return event.getBeginTime() + event.getDuration() + elif self.type == self.DURATION: + return event.getDuration() + elif self.type == self.REMAINING: + now = int(time()) + start_time = event.getBeginTime() + duration = event.getDuration() + end_time = start_time + duration + if start_time <= now <= end_time: + return (duration, end_time - now) + else: + return (duration, None) + + def getValue(self): + assert self.type == self.PROGRESS + + event = self.source.event + if event is None: + return None + + now = int(time()) + start_time = event.getBeginTime() + duration = event.getDuration() + if start_time <= now <= (start_time + duration) and duration > 0: + return (now - start_time) * 1000 / duration + else: + return None + + time = property(getTime) + value = property(getValue) + range = 1000 diff --git a/lib/python/Components/Converter/Makefile.am b/lib/python/Components/Converter/Makefile.am new file mode 100644 index 00000000..c2e55eef --- /dev/null +++ b/lib/python/Components/Converter/Makefile.am @@ -0,0 +1,5 @@ +installdir = $(LIBDIR)/enigma2/python/Components/Converter + +install_PYTHON = \ + __init__.py ClockToText.py Converter.py EventName.py StaticText.py EventTime.py \ + Poll.py RemainingToText.py diff --git a/lib/python/Components/Converter/Poll.py b/lib/python/Components/Converter/Poll.py new file mode 100644 index 00000000..3ba5e87f --- /dev/null +++ b/lib/python/Components/Converter/Poll.py @@ -0,0 +1,22 @@ +from enigma import eTimer + +class Poll(object): + def __init__(self): + self.__poll_timer = eTimer() + self.__poll_timer.timeout.get().append(self.changed) + self.__interval = 1000 + self.__enabled = False + + def __setInterval(self, interval): + self.__interval = interval + if self.__enabled: + self.__poll_timer.start(self.__interval) + else: + self.__poll_timer.stop() + + def __setEnable(self, enabled): + self.__enabled = enabled + self.poll_interval = self.__interval + + poll_interval = property(lambda self: self.__interval, __setInterval) + poll_enabled = property(lambda self: self.__enabled, __setEnable) diff --git a/lib/python/Components/Converter/RemainingToText.py b/lib/python/Components/Converter/RemainingToText.py new file mode 100644 index 00000000..534fef18 --- /dev/null +++ b/lib/python/Components/Converter/RemainingToText.py @@ -0,0 +1,19 @@ +from Components.Converter.Converter import Converter + +class RemainingToText(Converter, object): + def __init__(self, type, *args, **kwargs): + Converter.__init__(self) + + def getText(self): + + r = self.source.time + if r is None: + return "" + + (duration, remaining) = self.source.time + if remaining is not None: + return "+%d min" % (remaining / 60) + else: + return "%d min" % (duration / 60) + + text = property(getText) diff --git a/lib/python/Components/Converter/StaticText.py b/lib/python/Components/Converter/StaticText.py new file mode 100644 index 00000000..12eb6ad5 --- /dev/null +++ b/lib/python/Components/Converter/StaticText.py @@ -0,0 +1,7 @@ +from Components.Converter.Converter import Converter + +class StaticText(Converter, object): + def __init__(self, text, *args, **kwargs): + Converter.__init__(self) + self.text = str(text) + diff --git a/lib/python/Components/Converter/__init__.py b/lib/python/Components/Converter/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lib/python/Components/Renderer/Label.py b/lib/python/Components/Renderer/Label.py new file mode 100644 index 00000000..02acb938 --- /dev/null +++ b/lib/python/Components/Renderer/Label.py @@ -0,0 +1,19 @@ +from Components.VariableText import VariableText +from Components.GUIComponent import GUIComponent + +from enigma import eLabel + +class Label(VariableText, GUIComponent): + def __init__(self): + GUIComponent.__init__(self) + VariableText.__init__(self) + + GUI_WIDGET = eLabel + + def connect(self, source): + source.changed.listen(self.changed) + self.source = source + self.changed() + + def changed(self): + self.text = self.source.text diff --git a/lib/python/Components/Renderer/Makefile.am b/lib/python/Components/Renderer/Makefile.am new file mode 100644 index 00000000..3040d72f --- /dev/null +++ b/lib/python/Components/Renderer/Makefile.am @@ -0,0 +1,4 @@ +installdir = $(LIBDIR)/enigma2/python/Components/Renderer + +install_PYTHON = \ + __init__.py Label.py Progress.py diff --git a/lib/python/Components/Renderer/Progress.py b/lib/python/Components/Renderer/Progress.py new file mode 100644 index 00000000..b8534287 --- /dev/null +++ b/lib/python/Components/Renderer/Progress.py @@ -0,0 +1,40 @@ +from Components.VariableValue import VariableValue +from Components.GUIComponent import GUIComponent + +from enigma import eSlider + +class Progress(VariableValue, GUIComponent): + def __init__(self): + GUIComponent.__init__(self) + VariableValue.__init__(self) + self.__start = 0 + self.__end = 100 + + GUI_WIDGET = eSlider + + def connect(self, source): + source.changed.listen(self.changed) + self.source = source + self.changed() + + def changed(self): + range = self.source.range or 100 + value = self.source.value + if value is None: + value = 0 + (self.range, self.value) = ((0, range), value) + + GUI_WIDGET = eSlider + + def postWidgetCreate(self, instance): + instance.setRange(self.__start, self.__end) + + def setRange(self, range): + (__start, __end) = range + if self.instance is not None: + self.instance.setRange(__start, __end) + + def getRange(self): + return (self.__start, self.__end) + + range = property(getRange, setRange) diff --git a/lib/python/Components/Renderer/__init__.py b/lib/python/Components/Renderer/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lib/python/Components/Sources/Clock.py b/lib/python/Components/Sources/Clock.py new file mode 100644 index 00000000..f840ea24 --- /dev/null +++ b/lib/python/Components/Sources/Clock.py @@ -0,0 +1,22 @@ +from Tools.Event import Event +from enigma import eTimer +import time + +from Source import Source + +class Clock(Source): + def __init__(self): + self.changed = Event(start=self.start, stop=self.stop) + self.clock_timer = eTimer() + self.clock_timer.timeout.get().append(self.changed) + + def start(self): + self.clock_timer.start(1000) + + def stop(self): + self.clock_timer.stop() + + def getClock(self): + return time.time() + + time = property(getClock) diff --git a/lib/python/Components/Sources/EventInfo.py b/lib/python/Components/Sources/EventInfo.py new file mode 100644 index 00000000..724d9c1f --- /dev/null +++ b/lib/python/Components/Sources/EventInfo.py @@ -0,0 +1,29 @@ +from Components.PerServiceDisplay import PerServiceBase +from Tools.Event import Event +from enigma import iPlayableService +from Source import Source + +class EventInfo(PerServiceBase, Source): + NOW = 0 + NEXT = 1 + + def __init__(self, navcore, now_or_next): + self.changed = Event() + PerServiceBase.__init__(self, navcore, + { + iPlayableService.evUpdatedEventInfo: self.ourEvent, + iPlayableService.evEnd: self.stopEvent + }) + + self.event = None + self.now_or_next = now_or_next + + def ourEvent(self): + service = self.navcore.getCurrentService() + info = service and service.info() + self.event = info and info.getEvent(self.now_or_next) + self.changed() + + def stopEvent(self): + self.event = None + self.changed() diff --git a/lib/python/Components/Sources/Makefile.am b/lib/python/Components/Sources/Makefile.am new file mode 100644 index 00000000..3bf75d17 --- /dev/null +++ b/lib/python/Components/Sources/Makefile.am @@ -0,0 +1,4 @@ +installdir = $(LIBDIR)/enigma2/python/Components/Sources + +install_PYTHON = \ + __init__.py Clock.py EventInfo.py Source.py diff --git a/lib/python/Components/Sources/Source.py b/lib/python/Components/Sources/Source.py new file mode 100644 index 00000000..77fcb55f --- /dev/null +++ b/lib/python/Components/Sources/Source.py @@ -0,0 +1,16 @@ +class Source(object): + + def execBegin(self): + pass + + def execEnd(self): + pass + + def onShow(self): + pass + + def onHide(self): + pass + + def destroy(self): + self.__dict__.clear() diff --git a/lib/python/Components/Sources/__init__.py b/lib/python/Components/Sources/__init__.py new file mode 100644 index 00000000..e69de29b