add new skin stuff
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 15 Jun 2006 17:34:06 +0000 (17:34 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 15 Jun 2006 17:34:06 +0000 (17:34 +0000)
18 files changed:
lib/python/Components/Converter/ClockToText.py [new file with mode: 0644]
lib/python/Components/Converter/Converter.py [new file with mode: 0644]
lib/python/Components/Converter/EventName.py [new file with mode: 0644]
lib/python/Components/Converter/EventTime.py [new file with mode: 0644]
lib/python/Components/Converter/Makefile.am [new file with mode: 0644]
lib/python/Components/Converter/Poll.py [new file with mode: 0644]
lib/python/Components/Converter/RemainingToText.py [new file with mode: 0644]
lib/python/Components/Converter/StaticText.py [new file with mode: 0644]
lib/python/Components/Converter/__init__.py [new file with mode: 0644]
lib/python/Components/Renderer/Label.py [new file with mode: 0644]
lib/python/Components/Renderer/Makefile.am [new file with mode: 0644]
lib/python/Components/Renderer/Progress.py [new file with mode: 0644]
lib/python/Components/Renderer/__init__.py [new file with mode: 0644]
lib/python/Components/Sources/Clock.py [new file with mode: 0644]
lib/python/Components/Sources/EventInfo.py [new file with mode: 0644]
lib/python/Components/Sources/Makefile.am [new file with mode: 0644]
lib/python/Components/Sources/Source.py [new file with mode: 0644]
lib/python/Components/Sources/__init__.py [new file with mode: 0644]

diff --git a/lib/python/Components/Converter/ClockToText.py b/lib/python/Components/Converter/ClockToText.py
new file mode 100644 (file)
index 0000000..085ebc1
--- /dev/null
@@ -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 (file)
index 0000000..b75d253
--- /dev/null
@@ -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 (file)
index 0000000..e391b95
--- /dev/null
@@ -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 (file)
index 0000000..3c312a6
--- /dev/null
@@ -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 <StartTime|EndTime|Remaining|Duration> 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 (file)
index 0000000..c2e55ee
--- /dev/null
@@ -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 (file)
index 0000000..3ba5e87
--- /dev/null
@@ -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 (file)
index 0000000..534fef1
--- /dev/null
@@ -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 (file)
index 0000000..12eb6ad
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/lib/python/Components/Renderer/Label.py b/lib/python/Components/Renderer/Label.py
new file mode 100644 (file)
index 0000000..02acb93
--- /dev/null
@@ -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 (file)
index 0000000..3040d72
--- /dev/null
@@ -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 (file)
index 0000000..b853428
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/lib/python/Components/Sources/Clock.py b/lib/python/Components/Sources/Clock.py
new file mode 100644 (file)
index 0000000..f840ea2
--- /dev/null
@@ -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 (file)
index 0000000..724d9c1
--- /dev/null
@@ -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 (file)
index 0000000..3bf75d1
--- /dev/null
@@ -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 (file)
index 0000000..77fcb55
--- /dev/null
@@ -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 (file)
index 0000000..e69de29