from enigma import eButton
-class Button(HTMLComponent, GUIComponent, VariableText):
+class Button(VariableText, HTMLComponent, GUIComponent):
def __init__(self, text="", onClick = [ ]):
GUIComponent.__init__(self)
VariableText.__init__(self)
def produceHTML(self):
return "<input type=\"submit\" text=\"" + self.getText() + "\">\n"
-# GUI:
- def createWidget(self, parent):
- g = eButton(parent)
- g.selected.get().append(self.push)
- return g
-
- def removeWidget(self, w):
- w.selected.get().remove(self.push)
+ GUI_WIDGET = eButton
+ def postWidgetCreate(self, instance):
+ instance.selected.get().append(self.push)
import time
# now some "real" components:
-class Clock(HTMLComponent, GUIComponent, VariableText):
+class Clock(VariableText, HTMLComponent, GUIComponent):
def __init__(self):
VariableText.__init__(self)
GUIComponent.__init__(self)
# ...und als HTML:
def produceHTML(self):
+ # return T.b[self.getText()]
return self.getText()
from enigma import *
-class Widget(GUIComponent):
- def __init__(self):
- GUIComponent.__init__(self)
-
- def GUIcreate(self, parent):
- self.instance = self.createWidget(parent)
- if self.state == self.HIDDEN:
- self.instance.hide()
-
- def GUIdelete(self):
- self.removeWidget(self.instance)
- self.instance = None
-
- def removeWidget(self, w):
- pass
-
- def move(self, x, y):
- self.instance.move(ePoint(int(x), int(y)))
-
-class ConditionalWidget(Widget):
+class ConditionalWidget(GUIComponent):
def __init__(self, withTimer = True):
- Widget.__init__(self)
+ GUIComponent.__init__(self)
self.setConnect(None)
def activateCondition(self, condition):
if (condition):
- if self.state == self.HIDDEN:
- self.show()
+ self.state = self.HIDDEN
else:
- if self.state == self.SHOWN:
- self.hide()
+ self.state = self.SHOWN
def update(self):
if (self.conditionalFunction != None):
import time
-class BlinkingWidget(Widget):
+class BlinkingWidget(GUIComponent):
def __init__(self):
- Widget.__init__(self)
+ GUIComponent.__init__(self)
self.blinking = True
from enigma import eListbox, eListboxPythonConfigContent
-class ConfigList(HTMLComponent, GUIComponent):
+class ConfigList(HTMLComponent, GUIComponent, object):
def __init__(self, list):
GUIComponent.__init__(self)
self.l = eListboxPythonConfigContent()
- self.l.setList(list)
self.l.setSeperation(100)
self.list = list
+ self.onSelectionChanged = [ ]
def toggle(self):
selection = self.getCurrent()
def invalidate(self, entry):
i = 0
- for x in self.list:
+ for x in self.__list:
if (entry.getConfigPath() == x[1].parent.getConfigPath()):
self.l.invalidateEntry(i)
i += 1
-
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
+
+ GUI_WIDGET = eListbox
- def GUIdelete(self):
- self.instance.setContent(None)
- self.instance = None
+ def selectionChanged(self):
+ for x in self.onSelectionChanged:
+ x()
+
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.selectionChanged.get().append(self.selectionChanged)
+
+ def setList(self, list):
+ self.__list = list
+ self.l.setList(self.__list)
+
+ def getList(self):
+ return self.__list
+ list = property(getList, setList)
# TODO: Harddisk.py has similiar functions, but only similiar.
# fix this to use same code
-class DiskInfo(GUIComponent, VariableText):
+class DiskInfo(VariableText, GUIComponent):
FREE = 0
USED = 1
SIZE = 2
if x is not None:
try:
x()
- except:
+ except: # FIXME!!!
+ print "FIXME in EPGList.selectionChanged"
pass
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setWrapAround(True)
- self.instance.selectionChanged.get().append(self.selectionChanged)
- self.instance.setContent(self.l)
+ GUI_WIDGET = eListbox
+
+ def postCreateWidget(self, instance):
+ instance.setWrapAround(True)
+ instance.selectionChanged.get().append(self.selectionChanged)
+ instance.setContent(self.l)
if SINGLE_CPP > 0:
self.instance.setItemHeight(25)
- def GUIdelete(self):
- self.instance = None
-
def recalcEntrySize(self):
if SINGLE_CPP == 0:
esize = self.l.getItemSize()
-from PerServiceDisplay import *
-from time import strftime
-from time import localtime, time
-
-from enigma import iServiceInformationPtr, eServiceEventPtr
-
-class EventInfo(PerServiceDisplay):
- Now = 0
- Next = 1
- Now_Duration = 2
- Next_Duration = 3
- Now_StartTime = 4
- Next_StartTime = 5
- Now_Remaining = 6
-
- def __init__(self, navcore, now_or_next):
- # listen to evUpdatedEventInfo and evEnd
- # note that evEnd will be called once to establish a known state
- self.now_or_next = now_or_next
- PerServiceDisplay.__init__(self, navcore,
- {
- iPlayableService.evUpdatedEventInfo: self.ourEvent,
- iPlayableService.evEnd: self.stopEvent
- })
-
- if now_or_next in [self.Now_Remaining]:
- self.enablePolling()
-
- def ourEvent(self):
- info = iServiceInformationPtr()
- service = self.navcore.getCurrentService()
-
- if service != None:
- info = service.info()
- if info is not None:
- ev = info.getEvent(self.now_or_next & 1)
- if ev is not None:
- self.update(ev)
-
- def update(self, ev):
- if self.now_or_next == self.Now_Remaining and ev.getBeginTime() <= time() <= (ev.getBeginTime() + ev.getDuration()):
- self.setText("+%d min" % ((ev.getBeginTime() + ev.getDuration() - time()) / 60))
- elif self.now_or_next in [self.Now_Duration, self.Next_Duration, self.Now_Remaining]:
- self.setText("%d min" % (ev.getDuration() / 60))
- elif self.now_or_next in [self.Now_StartTime, self.Next_StartTime]:
- self.setText(strftime("%H:%M", localtime(ev.getBeginTime())))
- elif self.now_or_next in [self.Now, self.Next]:
- self.setText(ev.getEventName())
-
- def stopEvent(self):
- self.setText(
- ("", "", "", "", "--:--", "--:--", "")[self.now_or_next]);
-
- def poll(self):
- self.ourEvent()
-
-class EventInfoProgress(PerServiceDisplayProgress, EventInfo):
- def __init__(self, navcore, now_or_next):
- self.now_or_next = now_or_next
- PerServiceDisplayProgress.__init__(self, navcore,
- {
- iPlayableService.evUpdatedEventInfo: self.ourEvent,
- iPlayableService.evEnd: self.stopEvent
- })
-
- def update(self, ev):
- self.g.setRange(0, ev.getDuration())
- progress = int(time() - ev.getBeginTime())
-
- self.setValue(progress)
-
- def stopEvent(self):
- self.setValue(0)
return res
-class FileList(HTMLComponent, GUIComponent, MenuList):
+class FileList(MenuList, HTMLComponent, GUIComponent):
def __init__(self, directory, showDirectories = True, showFiles = True, matchingPattern = None, useServiceRef = False, isTop = False):
GUIComponent.__init__(self)
self.l = eListboxPythonMultiContent()
def getServiceRef(self):
return self.getSelection()[0]
-
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
- self.instance.setItemHeight(23)
+
+ GUI_WIDGET = eListbox
+
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.setItemHeight(23)
from enigma import ePoint
-class GUIComponent:
+class GUIComponent(object):
""" GUI component """
SHOWN = 0
HIDDEN = 1
def __init__(self):
- self.state = self.SHOWN
self.instance = None
+ self.state = self.SHOWN
def execBegin(self):
pass
self.instance.move(ePoint(int(x), int(y)))
def show(self):
- self.state = self.SHOWN
+ self.__state = self.SHOWN
if self.instance is not None:
self.instance.show()
def hide(self):
- self.state = self.HIDDEN
+ self.__state = self.HIDDEN
if self.instance is not None:
self.instance.hide()
+
+ def getState(self):
+ return self.__state
+
+ def setState(self, state):
+ if state == self.SHOWN:
+ self.show()
+ elif state == self.HIDDEN:
+ self.hide()
+
+ state = property(getState, setState)
+
+ def setPosition(self, x, y):
+ self.instance.move(ePoint(int(x), int(y)))
+
+ def getPosition(self):
+ p = self.instance.position()
+ return (p.x(), p.y())
+
+ position = property(getPosition, setPosition)
+
+ # default implementation for only one widget per component
+ # feel free to override!
+ def GUIcreate(self, parent):
+ self.instance = self.createWidget(parent)
+ self.postWidgetCreate(self.instance)
+
+ def GUIdelete(self):
+ self.preWidgetRemove(self.instance)
+ self.instance = None
+
+ # default for argumentless widget constructor
+ def createWidget(self, parent):
+ return self.GUI_WIDGET(parent)
+
+ def postWidgetCreate(self, instance):
+ pass
+
+ def preWidgetRemove(self, instance):
+ pass
from enigma import eLabel
-class Header(HTMLComponent, GUIComponent, VariableText):
+class Header(VariableText, HTMLComponent, GUIComponent):
def __init__(self, message):
GUIComponent.__init__(self)
def getCurrent(self):
return self.l.getCurrentSelection()[0]
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
- self.instance.setItemHeight(42)
- self.instance.selectionChanged.get().append(self.selectionChanged)
-
- def GUIdelete(self):
- self.instance.setContent(None)
- self.instance.selectionChanged.get().remove(self.selectionChanged)
- self.instance = None
+ GUI_WIDGET = eListbox
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.setItemHeight(42)
+ instance.selectionChanged.get().append(self.selectionChanged)
+
def selectionChanged(self):
for x in self.onSelChanged:
x()
from Tools.NumericalTextInput import NumericalTextInput
-class Input(HTMLComponent, GUIComponent, VariableText):
+class Input(VariableText, HTMLComponent, GUIComponent):
TEXT = 0
PIN = 1
NUMBER = 2
from enigma import eLabel
-class Label(HTMLComponent, GUIComponent, VariableText):
+class Label(VariableText, HTMLComponent, GUIComponent):
def __init__(self, text=""):
GUIComponent.__init__(self)
VariableText.__init__(self)
return self.getText()
# GUI:
- def createWidget(self, parent):
- return eLabel(parent)
-
+ GUI_WIDGET = eLabel
+
def getSize(self):
s = self.instance.calculateSize()
return (s.width(), s.height())
Label.__init__(text = text)
BlinkingWidget.__init__()
- def GUIcreate(self, parent):
- LabelConditional.GUIcreate(self, parent)
-
- def GUIdelete(self):
- LabelConditional.GUIcreate(self)
-
class BlinkingLabelConditional(BlinkingWidgetConditional, LabelConditional):
def __init__(self, text = ""):
LabelConditional.__init__(self, text = text)
BlinkingWidgetConditional.__init__(self)
-
- def GUIcreate(self, parent):
- LabelConditional.GUIcreate(self, parent)
-
- def GUIdelete(self):
- LabelConditional.GUIcreate(self)
-
\ No newline at end of file
return res
-class LanguageList(HTMLComponent, GUIComponent, MenuList):
+class LanguageList(MenuList, HTMLComponent, GUIComponent):
def __init__(self, list):
GUIComponent.__init__(self)
self.l = eListboxPythonMultiContent()
self.list = list
self.l.setList(list)
self.l.setFont(0, gFont("Regular", 20))
-
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
- self.instance.setItemHeight(50)
+
+ GUI_WIDGET = eListbox
+
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.setItemHeight(50)
installdir = $(LIBDIR)/enigma2/python/Components
install_PYTHON = \
- ActionMap.py GUISkin.py PerServiceDisplay.py TimeInput.py components.py \
+ ActionMap.py GUISkin.py PerServiceDisplay.py components.py \
Button.py HTMLComponent.py ProgressBar.py TimerList.py config.py \
Clock.py HTMLSkin.py ServiceList.py VariableText.py \
ConfigList.py Header.py ServiceName.py VariableValue.py \
EventInfo.py Label.py ServiceScan.py VolumeBar.py \
- GUIComponent.py MenuList.py TextInput.py __init__.py MovieList.py \
- InputDevice.py ServicePosition.py SetupDevices.py Harddisk.py \
- AVSwitch.py Network.py RFmod.py DiskInfo.py NimManager.py Lcd.py \
- EpgList.py ScrollLabel.py Timezones.py Language.py HelpMenuList.py \
- BlinkingPixmap.py Pixmap.py ConditionalWidget.py Slider.py LanguageList.py \
+ GUIComponent.py MenuList.py __init__.py MovieList.py \
+ InputDevice.py ServicePosition.py SetupDevices.py Harddisk.py \
+ AVSwitch.py Network.py RFmod.py DiskInfo.py NimManager.py Lcd.py \
+ EpgList.py ScrollLabel.py Timezones.py Language.py HelpMenuList.py \
+ BlinkingPixmap.py Pixmap.py ConditionalWidget.py Slider.py LanguageList.py \
PluginList.py PluginComponent.py RecordingConfig.py About.py UsageConfig.py \
FIFOList.py ServiceEventTracker.py Input.py TimerSanityCheck.py FileList.py \
MultiContent.py MediaPlayer.py TunerInfo.py VideoWindow.py ChoiceList.py
return res
-class PlayList(HTMLComponent, GUIComponent, MenuList):
+class PlayList(MenuList, HTMLComponent, GUIComponent):
def __init__(self):
GUIComponent.__init__(self)
self.l = eListboxPythonMultiContent()
self.currPlaying = 0
self.oldCurrPlaying = -1
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
- self.instance.setItemHeight(32)
-
+ GUI_WIDGET = eListbox
+
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.setItemHeight(32)
+
def getSelection(self):
return self.l.getCurrentSelection()[0]
def getCurrent(self):
return self.l.getCurrentSelection()
+
+ GUI_WIDGET = eListbox
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
- self.instance.selectionChanged.get().append(self.selectionChanged)
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.selectionChanged.get().append(self.selectionChanged)
if self.enableWrapAround:
self.instance.setWrapAround(True)
- def GUIdelete(self):
- self.instance.setContent(None)
- self.instance = None
+ def preWidgetRemove(self, instance):
+ instance.setContent(None)
def selectionChanged(self):
for f in self.onSelectionChanged:
l = self.l.getCurrentSelection()
return l and l[0]
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
- self.instance.setItemHeight(75)
+ GUI_WIDGET = eListbox
+
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.setItemHeight(75)
- def GUIdelete(self):
- self.instance.setContent(None)
- self.instance = None
-
def reload(self, root = None):
if root is not None:
self.load(root)
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
+ GUI_WIDGET = eLabel
-class PerServiceDisplayProgress(GUIComponent, VariableValue, PerServiceBase):
+class PerServiceDisplayProgress(PerServiceBase, VariableValue, GUIComponent):
def __init__(self, navcore, eventmap):
GUIComponent.__init__(self)
VariableValue.__init__(self)
# 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)
- return self.g
+ GUI_WIDGET = eSlider
-from ConditionalWidget import *
+from ConditionalWidget import ConditionalWidget
+from GUIComponent import GUIComponent
-from enigma import *
+from enigma import ePixmap, eTimer
-class Pixmap(Widget):
- def __init__(self):
- Widget.__init__(self)
-
- def getePixmap(self, parent):
- #pixmap = ePixmap(parent)
- #pixmap.setPixmapFromFile(self.filename)
- return ePixmap(parent)
-
- def createWidget(self, parent):
- return self.getePixmap(parent)
-
- def removeWidget(self, w):
- pass
+class Pixmap(GUIComponent):
+ GUI_WIDGET = ePixmap
class PixmapConditional(ConditionalWidget, Pixmap):
def __init__(self, withTimer = True):
return res
-class PluginList(HTMLComponent, GUIComponent, MenuList):
+class PluginList(MenuList, HTMLComponent, GUIComponent):
def __init__(self, list):
GUIComponent.__init__(self)
self.l = eListboxPythonMultiContent()
self.l.setList(list)
self.l.setFont(0, gFont("Regular", 20))
self.l.setFont(1, gFont("Regular", 14))
-
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
- self.instance.setItemHeight(50)
+
+ GUI_WIDGET = eListbox
+
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.setItemHeight(50)
from enigma import eSlider
# a general purpose progress bar
-class ProgressBar(HTMLComponent, GUIComponent, VariableValue):
+class ProgressBar(VariableValue, HTMLComponent, GUIComponent):
def __init__(self):
GUIComponent.__init__(self)
VariableValue.__init__(self)
from string import upper
class ServiceList(HTMLComponent, GUIComponent):
-
MODE_NORMAL = 0
MODE_FAVOURITES = 1
GUIComponent.__init__(self)
self.l = eListboxServiceContent()
self.root = None
-
self.mode = self.MODE_NORMAL
def setCurrent(self, ref):
def getCurrentIndex(self):
return self.instance.getCurrentIndex()
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setWrapAround(True)
- self.instance.setContent(self.l)
- self.setMode(self.mode)
+ GUI_WIDGET = eListbox
- def GUIdelete(self):
- self.instance = None
+ def postWidgetCreate(self, instance):
+ instance.setWrapAround(True)
+ instance.setContent(self.l)
+ self.setMode(self.mode)
def getRoot(self):
return self.root
def setMode(self, mode):
self.mode = mode
- try:
- self.instance
- except:
- return
-
if mode == self.MODE_NORMAL:
self.instance.setItemHeight(28)
self.l.setVisualMode(eListboxServiceContent.visModeSimple)
def stopEvent(self):
self.disablePolling()
- def GUIcreate(self, parent):
- self.instance = ePositionGauge(parent)
+ GUI_WIDGET = ePositionGauge
+
+ def postWidgetCreate(self, instance):
self.newService()
- def GUIdelete(self):
- self.instance = None
-
def newCuesheet(self):
service = self.navcore.getCurrentService()
cue = service and service.cueSheet()
from enigma import eSlider
-class Slider(HTMLComponent, GUIComponent, VariableValue):
+class Slider(VariableValue, HTMLComponent, GUIComponent):
def __init__(self, min, max):
VariableValue.__init__(self)
GUIComponent.__init__(self)
def createWidget(self, parent):
g = eSlider(parent)
g.setRange(self.min, self.max)
- return g
\ No newline at end of file
+ return g
return res
-class TimerList(HTMLComponent, GUIComponent):
+class TimerList(HTMLComponent, GUIComponent, object):
def __init__(self, list):
GUIComponent.__init__(self)
self.l = eListboxPythonMultiContent()
def getCurrent(self):
return self.l.getCurrentSelection()
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
- self.instance.setContent(self.l)
- self.instance.setItemHeight(70)
+ GUI_WIDGET = eListbox
+
+ def postWidgetCreate(self, instance):
+ instance.setContent(self.l)
+ instance.setItemHeight(70)
def moveToIndex(self, index):
self.instance.moveSelectionTo(index)
def getCurrentIndex(self):
return self.instance.getCurrentIndex()
+ currentIndex = property(moveToIndex, getCurrentIndex)
+ currentSelection = property(getCurrent)
+
def moveDown(self):
self.instance.moveSelection(self.instance.moveDown)
- def GUIdelete(self):
- self.instance.setContent(None)
- self.instance = None
-
def invalidate(self):
self.l.invalidate()
-
self.g.setRange(0, 100)
return self.g
- def GUIcreate(self, parent):
- self.instance = self.createWidget(parent)
+ def postWidgetCreate(self, instance):
if self.message is not None:
- self.instance.setText(self.message)
+ instance.setText(self.message)
elif self.value is not None:
- self.instance.setValue(self.value)
-
- def GUIdelete(self):
- self.removeWidget(self.instance)
- self.instance = None
-
- def removeWidget(self, instance):
- pass
\ No newline at end of file
+ instance.setValue(self.value)
import skin
-class VariableText:
+class VariableText(object):
"""VariableText can be used for components which have a variable text, based on any widget with setText call"""
def __init__(self):
+ object.__init__(self)
self.message = ""
self.instance = None
def getText(self):
return self.message
- def GUIcreate(self, parent):
- self.instance = self.createWidget(parent)
- self.instance.setText(self.message)
+ text = property(getText, setText)
- def GUIdelete(self):
- self.removeWidget(self.instance)
- self.instance = None
-
- def removeWidget(self, instance):
- pass
-
+ def postWidgetCreate(self, instance):
+ instance.setText(self.message)
import skin
-class VariableValue:
+class VariableValue(object):
"""VariableValue can be used for components which have a variable value (like eSlider), based on any widget with setValue call"""
def __init__(self):
- self.value = 0
- self.instance = None
-
+ self.__value = 0
+
def setValue(self, value):
- self.value = value
+ self.__value = value
if self.instance:
- self.instance.setValue(self.value)
+ self.instance.setValue(self.__value)
def getValue(self):
- return self.value
-
- def GUIcreate(self, parent):
- self.instance = self.createWidget(parent)
- self.instance.setValue(self.value)
-
- def GUIdelete(self):
- self.removeWidget(self.instance)
- self.instance = None
-
- def removeWidget(self, instance):
- pass
+ return self.__value
+
+ def postWidgetCreate(self, instance):
+ print self
+ print self.GUI_WIDGET
+ self.instance.setValue(self.__value)
+
+ value = property(getValue, setValue)
class VideoWindow(GUIComponent):
def __init__(self):
GUIComponent.__init__(self)
-
- def GUIcreate(self, parent):
- self.instance = eVideoWidget(parent)
- def GUIdelete(self):
- self.instance = None
+ GUI_WIDGET = eVideoWidget
from enigma import eSlider
from enigma import eLabel
-class VolumeBar(HTMLComponent, GUIComponent, VariableValue):
+class VolumeBar(VariableValue, HTMLComponent, GUIComponent):
def __init__(self):
VariableValue.__init__(self)
GUIComponent.__init__(self)
- def createWidget(self, parent):
- g = eSlider(parent)
- g.setRange(0, 100)
- return g
+ GUI_WIDGET = eSlider
+
+ def postWidgetCreate(self, instance):
+ instance.setRange(0, 100)
self.l.setList(self.list)
self.l.setFont(0, gFont("Regular", 23))
- def GUIcreate(self, parent):
- self.instance = eListbox(parent)
+ GUI_WIDGET = eListbox
+
+ def postWidgetCreate(self, instance):
self.instance.setContent(self.l)
self.instance.setItemHeight(25)
- def GUIdelete(self):
- self.instance.setContent(None)
- self.instance = None
-
class ServiceInfo(Screen):
def __init__(self, session):
Screen.__init__(self, session)