From: Felix Domke Date: Sat, 8 Oct 2005 01:59:58 +0000 (+0000) Subject: menu: new syntax which fixes the import problems X-Git-Tag: 2.6.0~5507 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/55bd830d52a2961ec57a6dec5969e8e7c0294c35 menu: new syntax which fixes the import problems --- diff --git a/data/menu.xml b/data/menu.xml index 73ae3c07..b3d6208a 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -1,11 +1,25 @@ + + - self.openDialog(NimSelection) - - self.openDialog(TimerEditList) - self.openDialog(About) - self.openDialog(PluginBrowser) + + print "radio mode" + + + @@ -13,33 +27,33 @@ - self.openDialog(Satconfig) + - self.openDialog(ServiceScan) - self.openDialog(ServiceScan) + + - self.openSetup("timezone") - self.openSetup("avsetup") - self.openSetup("rfmod") - self.openDialog(HarddiskSelection) - self.openSetup("rc") - self.openSetup("keyboard") - self.openSetup("osd") - self.openSetup("lcd") - self.openSetup("network") + + + + + + + + + - self.openSetup("parental") - self.openSetup("expert") + + - quitMainloop() - quitMainloop() - quitMainloop() + quitMainloop() + quitMainloop() + quitMainloop() - \ No newline at end of file + diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py index c0e6ad06..9eefddf7 100644 --- a/lib/python/Screens/Menu.py +++ b/lib/python/Screens/Menu.py @@ -12,7 +12,6 @@ import xml.dom.minidom from xml.dom import EMPTY_NAMESPACE from skin import elementsWithTag -from Screens.Satconfig import NimSelection from Screens.Setup import * from Tools import XMLTools @@ -33,14 +32,13 @@ def doGlobal(screen): try: # first we search in the current path menufile = file('data/menu.xml', 'r') -except: +except IOError: # if not found in the current path, we use the global datadir-path menufile = file('/usr/share/enigma2/menu.xml', 'r') mdom = xml.dom.minidom.parseString(menufile.read()) menufile.close() - def getValbyAttr(x, attr): for p in range(x.attributes.length): a = x.attributes.item(p) @@ -64,14 +62,26 @@ class Menu(Screen): selection = self["menu"].getCurrent() selection[1]() - def evalText(self, text): - eval(text) + def execText(self, text): + exec text + + def runScreen(self, arg): + # arg[0] is the module (as string) + # arg[1] is Screen inside this module + # plus possible arguments, as + # string (as we want to reference + # stuff which is just imported) + # FIXME. somehow. + if arg[0] != "": + exec "from Screens." + arg[0] + " import *" + self.openDialog(*eval(arg[1])) + def nothing(self): #dummy pass - def openDialog(self, dialog): # in every layer needed - self.session.open(dialog) + def openDialog(self, *dialog): # in every layer needed + self.session.open(*dialog) def openSetup(self, dialog): self.session.open(Setup, dialog) @@ -86,11 +96,33 @@ class Menu(Screen): def addItem(self, destList, node): ItemText = getValbyAttr(node, "text") if ItemText != "": #check for name - b = XMLTools.mergeText(node.childNodes) - if b != "": #check for function - destList.append((ItemText,boundFunction(self.evalText,b))) - else: - destList.append((ItemText,self.nothing)) #use dummy as function + for x in node.childNodes: + if x.nodeType != xml.dom.minidom.Element.nodeType: + continue + elif x.tagName == 'screen': + module = getValbyAttr(x, "module") + screen = getValbyAttr(x, "screen") + + if len(screen) == 0: + screen = module + + # check for arguments. they will be appended to the + # openDialog call + args = XMLTools.mergeText(x.childNodes) + screen += ", " + args + + destList.append((ItemText, boundFunction(self.runScreen, (module, screen)))) + return + elif x.tagName == 'code': + destList.append((ItemText, boundFunction(self.execText, XMLTools.mergeText(x.childNodes)))) + return + elif x.tagName == 'setup': + id = getValbyAttr(x, "id") + destList.append((ItemText, boundFunction(self.openSetup, id))) + return + + destList.append((ItemText,self.nothing)) + def __init__(self, session, parent, childNode): Screen.__init__(self, session)