from Screen import * from Components.MenuList import MenuList from Components.ActionMap import ActionMap from Components.Header import Header # hack ... must be made dynamic from ServiceScan import ServiceScan from ScartLoopThrough import ScartLoopThrough from Components.Button import Button from Components.Label import Label from Components.ProgressBar import ProgressBar from ConfigMenu import * from TimerEdit import * 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() mdom = xml.dom.minidom.parseString( """ quitMainloop() self.openDialog(ServiceScan) self.setModeTV() self.setModeRadio() self.setModeFile() self.openDialog(ScartLoopThrough) self.openDialog(TimerEditList) 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 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)