X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/39542988a01b4e836d3d6680470995c0f550a10b..81ae5bd362286a852f0851043bfccf1c754f3152:/screens.py diff --git a/screens.py b/screens.py index df0870af..e69de29b 100644 --- a/screens.py +++ b/screens.py @@ -1,409 +0,0 @@ -from components import * -import sys -from enigma import quitMainloop - -import xml.dom.minidom -from xml.dom import EMPTY_NAMESPACE -from skin import elementsWithTag - - -# some screens -def doGlobal(screen): - screen["clock"] = Clock() - -class Screen(dict, HTMLSkin, GUISkin): - """ bla """ - - def __init__(self, session): - self.skinName = self.__class__.__name__ - self.session = session - GUISkin.__init__(self) - - def execBegin(self): -# assert self.session == None, "a screen can only exec one per time" -# self.session = session - for (name, val) in self.items(): - val.execBegin() - - def execEnd(self): - for (name, val) in self.items(): - val.execEnd() -# assert self.session != None, "execEnd on non-execing screen!" -# self.session = None - - # never call this directly - it will be called from the session! - def doClose(self): - GUISkin.close(self) - - del self.session - for (name, val) in self.items(): - print "%s -> %d" % (name, sys.getrefcount(val)) - del self[name] - - def close(self, retval=None): - self.session.close() - - -mdom = xml.dom.minidom.parseString( - """ - - quitMainloop() - self.openDialog(serviceScan) - - self.setModeTV() - self.setModeRadio() - self.setModeFile() - self.openDialog(ScartLoopThrough) - - - - - - - - - - - - - self.openDialog(serviceScan) - - - - - - - - - - self.openDialog(configOSD) - - - - - - - - - - - - - - self.goSetup() - - """) - -def getText(nodelist): - rc = "" - for node in nodelist: - if node.nodeType == node.TEXT_NODE: - rc = rc + node.data - return rc - -def getValbyAttr(x, attr): - for p in range(x.attributes.length): - a = x.attributes.item(p) - attrib = str(a.name) - value = str(a.value) - if attrib == attr: - return value - - return "" - -class boundFunction: - def __init__(self, fnc, *args): - self.fnc = fnc - self.args = args - def __call__(self): - self.fnc(*self.args) - -class configOSD(Screen): - #this needs focus handling - so not useable - - def okbuttonClick(self): - self.close - - def __init__(self, session): - Screen.__init__(self, session) - - self["actions"] = ActionMap(["OkCancelActions"], - { - "ok": self.okbuttonClick, - "cancel": self.close - }) - - self["okbutton"] = Button("Save") - - self["txt_alpha"] = Label("Alpha:") - self["sld_alpha"] = ProgressBar() - self["sld_alpha"].setValue(50) - - self["txt_brightness"] = Label("Brightness:") - self["sld_brightness"] = ProgressBar() - self["sld_brightness"].setValue(50) - - self["txt_gamma"] = Label("Contrast:") - self["sld_gamma"] = ProgressBar() - self["sld_gamma"].setValue(50) - - -class ScartLoopThrough(Screen): - def __init__(self, session): - Screen.__init__(self, session) - - self["actions"] = ActionMap(["OkCancelActions"], - { - "cancel": self.close - }) - -class ConfigMenu(Screen): - #create a generic class for view/edit settings - #all stuff come from xml file - #configtype / datasource / validate-call / ... - - def __init__(self, session): - Screen.__init__(self, session) - - self["actions"] = ActionMap(["OkCancelActions"], - { - #"ok": self.okbuttonClick, - "cancel": self.close - }) - -class configTest(Screen): - - def __init__(self, session): - Screen.__init__(self, session) - - - self["config"] = ConfigList( - [ - configEntry("HKEY_LOCAL_ENIGMA/IMPORTANT/USER_ANNOYING_STUFF/SDTV/FLASHES/GREEN"), - configEntry("HKEY_LOCAL_ENIGMA/IMPORTANT/USER_ANNOYING_STUFF/HDTV/FLASHES/GREEN"), - ]) - - self["actions"] = ActionMap(["OkCancelActions"], - { - "ok": self["config"].toggle, - "cancel": self.close - }) - - -class Menu(Screen): - #add file load functions for the xml-file - #remove old code (i.e. goScan / goClock...) - - def openDialog(self, dialog): - self.session.open(dialog) - - def goSetup(self): - self.session.open(configTest) - - def setModeTV(self): - print "set Mode to TV" - pass - - def setModeRadio(self): - print "set Mode to Radio" - pass - - def setModeFile(self): - print "set Mode to File" - pass - - def goScan(self): - self.session.open(serviceScan) - - def goClock(self): - self.session.open(clockDisplay, Clock()) - - def okbuttonClick(self): - selection = self["menu"].getCurrent() - selection[1]() - - def evalText(self, text): - eval(text) - - def nothing(self): #dummy - pass - - def addMenu(self, destList, node): - MenuTitle = getValbyAttr(node, "text") - if MenuTitle != "": #check for title - a = boundFunction(self.session.open, Menu, node, node.childNodes) - #TODO add check if !empty(node.childNodes) - destList.append((MenuTitle, a)) - - def addItem(self, destList, node): - ItemText = getValbyAttr(node, "text") - if ItemText != "": #check for name - b = getText(node.childNodes) - if b != "": #check for function - destList.append((ItemText,boundFunction(self.evalText,b))) - else: - destList.append((ItemText,self.nothing)) #use dummy as function - - def __init__(self, session, parent, childNode): - Screen.__init__(self, session) - - list = [] - - for x in childNode: #walk through the actual nodelist - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'item': - self.addItem(list, x) - elif x.tagName == 'menu': - self.addMenu(list, x) - - self["menu"] = MenuList(list) - - self["actions"] = ActionMap(["OkCancelActions"], - { - "ok": self.okbuttonClick, - "cancel": self.close - }) - - a = getValbyAttr(parent, "title") - if a == "": #if empty use name - a = getValbyAttr(parent, "text") - self["title"] = Header(a) - -class channelSelection(Screen): - def __init__(self, session): - Screen.__init__(self, session) - - self["key_red"] = Button("red") - self["key_green"] = Button("green") - self["key_yellow"] = Button("yellow") - self["key_blue"] = Button("blue") - - self["list"] = ServiceList() - self["list"].setRoot(eServiceReference("""1:0:1:0:0:0:0:0:0:0:(provider=="ARD") && (type == 1)""")) - - #self["okbutton"] = Button("ok", [self.channelSelected]) - - class ChannelActionMap(ActionMap): - def action(self, contexts, action): - if action[:7] == "bouquet": - print "setting root to " + action[8:] - self.csel["list"].setRoot(eServiceReference("1:0:1:0:0:0:0:0:0:0:" + action[8:])) - else: - ActionMap.action(self, contexts, action) - - self["actions"] = ChannelActionMap(["ChannelSelectActions", "OkCancelActions"], - { - "cancel": self.close, - "ok": self.channelSelected, - "mark": self.doMark - }) - self["actions"].csel = self - - def doMark(self): - ref = self["list"].getCurrent() - if self["list"].isMarked(ref): - self["list"].removeMarked(ref) - else: - self["list"].addMarked(ref) - - def channelSelected(self): - self.session.nav.playService(self["list"].getCurrent()) - self.close() - - #called from infoBar - def zapUp(self): - self["list"].moveUp() - self.session.nav.playService(self["list"].getCurrent()) - - def zapDown(self): - self["list"].moveDown() - self.session.nav.playService(self["list"].getCurrent()) - -class infoBar(Screen): - def __init__(self, session): - Screen.__init__(self, session) - - #instantiate forever - self.servicelist = self.session.instantiateDialog(channelSelection) - - self["actions"] = ActionMap( [ "InfobarActions" ], - { - "switchChannel": self.switchChannel, - "mainMenu": self.mainMenu, - "zapUp": self.zapUp, - "zapDown": self.zapDown, - "instantRecord": self.instantRecord - }) - self["okbutton"] = Button("mainMenu", [self.mainMenu]) - - self["CurrentTime"] = Clock() - - self["ServiceName"] = ServiceName(self.session.nav) - - self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now) - self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next) - - self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration) - self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration) - - self.recording = 0 - - def mainMenu(self): - print "loading mainmenu XML..." - menu = mdom.childNodes[0] - assert menu.tagName == "menu", "root element in menu must be 'menu'!" - self.session.open(Menu, menu, menu.childNodes) - - def switchChannel(self): - self.session.execDialog(self.servicelist) - - def zapUp(self): - self.servicelist.zapUp() - - def zapDown(self): - self.servicelist.zapDown() - - def instantRecord(self): - if self.recording: - self.session.nav.endRecording() - self.recording = 0 - else: - self.session.nav.recordService(self.session.nav.getCurrentlyPlayingServiceReference()) - self.recording = 1 - -# a clock display dialog -class clockDisplay(Screen): - def okbutton(self): - self.session.close() - - def __init__(self, session, clock): - Screen.__init__(self, session) - self["theClock"] = clock - b = Button("bye") - b.onClick = [ self.okbutton ] - self["okbutton"] = b - self["title"] = Header("clock dialog: here you see the current uhrzeit!") - -class serviceScan(Screen): - def ok(self): - print "ok" - if self["scan"].isDone(): - self.close() - - def cancel(self): - print "cancel not yet implemented ;)" - - def __init__(self, session): - Screen.__init__(self, session) - - self["scan_progress"] = ProgressBar() - self["scan_state"] = Label("scan state") - self["scan"] = ServiceScan(self["scan_progress"], self["scan_state"]) - - self["actions"] = ActionMap(["OkCancelActions"], - { - "ok": self.ok, - "cancel": self.cancel - }) -