add missing eTimer
[vuplus_dvbapp] / lib / python / Screens / Menu.py
index dd88cb5..1390b51 100644 (file)
@@ -1,12 +1,12 @@
-from Screen import *
-from Components.MenuList import MenuList
+from Screen import Screen
+from Components.Sources.MenuList import MenuList
 from Components.ActionMap import ActionMap
 from Components.Header import Header
 from Components.Button import Button
 from Components.Label import Label
 from Components.ProgressBar import ProgressBar
 from Components.config import configfile
 from Components.ActionMap import ActionMap
 from Components.Header import Header
 from Components.Button import Button
 from Components.Label import Label
 from Components.ProgressBar import ProgressBar
 from Components.config import configfile
-from Components.Clock import Clock
+from Components.Sources.Clock import Clock
 
 from Tools.Directories import resolveFilename, SCOPE_SKIN
 
 
 from Tools.Directories import resolveFilename, SCOPE_SKIN
 
@@ -16,15 +16,10 @@ import xml.dom.minidom
 from xml.dom import EMPTY_NAMESPACE
 from skin import elementsWithTag
 
 from xml.dom import EMPTY_NAMESPACE
 from skin import elementsWithTag
 
-from Screens.Setup import *
+from Screens.Setup import Setup, getSetupTitle
 
 from Tools import XMLTools
 
 
 from Tools import XMLTools
 
-# some screens
-def doGlobal(screen):
-       screen["clock"] = Clock()
-
-
 #              <item text="TV-Mode">self.setModeTV()</item>
 #              <item text="Radio-Mode">self.setModeRadio()</item>
 #              <item text="File-Mode">self.setModeFile()</item>
 #              <item text="TV-Mode">self.setModeTV()</item>
 #              <item text="Radio-Mode">self.setModeRadio()</item>
 #              <item text="File-Mode">self.setModeFile()</item>
@@ -37,17 +32,6 @@ menufile = file(resolveFilename(SCOPE_SKIN, 'menu.xml'), 'r')
 mdom = xml.dom.minidom.parseString(menufile.read())
 menufile.close()
 
 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)
-               attrib = str(a.name)
-               value = str(a.value)
-               if attrib == attr:
-                       return value
-                       
-       return ""
-
 class boundFunction:
        def __init__(self, fnc, *args):
                self.fnc = fnc
 class boundFunction:
        def __init__(self, fnc, *args):
                self.fnc = fnc
@@ -80,22 +64,34 @@ class MenuSummary(Screen):
        <screen position="0,0" size="132,64">
                <widget name="MenuTitle" position="0,4" size="132,21" font="Regular;18" />
                <widget name="MenuEntry" position="0,25" size="132,21" font="Regular;16" />
        <screen position="0,0" size="132,64">
                <widget name="MenuTitle" position="0,4" size="132,21" font="Regular;18" />
                <widget name="MenuEntry" position="0,25" size="132,21" font="Regular;16" />
-               <widget name="Clock" position="50,46" size="82,18" font="Regular;16" />
+               <widget source="CurrentTime" render="Label" position="50,46" size="82,18" font="Regular;16" >
+                       <convert type="ClockToText">WithSeconds</convert>
+               </widget>
        </screen>"""
 
        def __init__(self, session, parent):
                Screen.__init__(self, session)
                self["MenuTitle"] = Label(parent.menu_title)
                self["MenuEntry"] = Label("")
        </screen>"""
 
        def __init__(self, session, parent):
                Screen.__init__(self, session)
                self["MenuTitle"] = Label(parent.menu_title)
                self["MenuEntry"] = Label("")
-               self["Clock"] = Clock()
-               parent["menu"].onSelectionChanged.append(self.selectionChanged)
+               self["CurrentTime"] = Clock()
                self.parent = parent
                self.parent = parent
+               self.onShow.append(self.addWatcher)
+               self.onHide.append(self.removeWatcher)
+       
+       def addWatcher(self):
+               self.parent["menu"].onSelectionChanged.append(self.selectionChanged)
                self.selectionChanged()
                self.selectionChanged()
+       
+       def removeWatcher(self):
+               self.parent["menu"].onSelectionChanged.remove(self.selectionChanged)
 
        def selectionChanged(self):
                self["MenuEntry"].setText(self.parent["menu"].getCurrent()[0])
 
 class Menu(Screen):
 
        def selectionChanged(self):
                self["MenuEntry"].setText(self.parent["menu"].getCurrent()[0])
 
 class Menu(Screen):
+
+       ALLOW_SUSPEND = True
+
        def okbuttonClick(self):
                print "okbuttonClick"
                selection = self["menu"].getCurrent()
        def okbuttonClick(self):
                print "okbuttonClick"
                selection = self["menu"].getCurrent()
@@ -126,15 +122,14 @@ class Menu(Screen):
                self.session.openWithCallback(self.menuClosed, Setup, dialog)
 
        def addMenu(self, destList, node):
                self.session.openWithCallback(self.menuClosed, Setup, dialog)
 
        def addMenu(self, destList, node):
-               MenuTitle = _(getValbyAttr(node, "text"))
-               if MenuTitle != "":                                                                                                                                     #check for title
-                       x = getValbyAttr(node, "flushConfigOnClose")
-                       if x == "1":
-                               a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node, node.childNodes)
-                       else:
-                               a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node, node.childNodes)
-                       #TODO add check if !empty(node.childNodes)
-                       destList.append((MenuTitle, a))
+               MenuTitle = _(node.getAttribute("text").encode("UTF-8") or "??")
+               x = node.getAttribute("flushConfigOnClose")
+               if x:
+                       a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node, node.childNodes)
+               else:
+                       a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node, node.childNodes)
+               #TODO add check if !empty(node.childNodes)
+               destList.append((MenuTitle, a))
 
        def menuClosedWithConfigFlush(self, *res):
                configfile.save()
 
        def menuClosedWithConfigFlush(self, *res):
                configfile.save()
@@ -145,37 +140,43 @@ class Menu(Screen):
                        self.close(True)
 
        def addItem(self, destList, node):
                        self.close(True)
 
        def addItem(self, destList, node):
-               ItemText = _(getValbyAttr(node, "text"))
-               if ItemText != "":                                                                                                                                      #check for name
-                       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
-
-                                       if module != "":
-                                               module = "Screens." + module
-                                       
-                                       # check for arguments. they will be appended to the 
-                                       # openDialog call
-                                       args = XMLTools.mergeText(x.childNodes)
-                                       screen += ", " + args
+               item_text = node.getAttribute("text").encode("UTF-8")
+               for x in node.childNodes:
+                       if x.nodeType != xml.dom.minidom.Element.nodeType:
+                               continue
+                       elif x.tagName == 'screen':
+                               module = x.getAttribute("module") or None
+                               screen = x.getAttribute("screen") or None
+
+                               if screen is None:
+                                       screen = module
+
+                               print module, screen
+                               if module:
+                                       module = "Screens." + module
+                               else:
+                                       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))
+                               destList.append((_(item_text or "??"), boundFunction(self.runScreen, (module, screen))))
+                               return
+                       elif x.tagName == 'code':
+                               destList.append((_(item_text or "??"), boundFunction(self.execText, XMLTools.mergeText(x.childNodes))))
+                               return
+                       elif x.tagName == 'setup':
+                               id = x.getAttribute("id")
+                               if item_text == "":
+                                       item_text = _(getSetupTitle(id)) + "..."
+                               else:
+                                       item_text = _(item_text)
+                               destList.append((item_text, boundFunction(self.openSetup, id)))
+                               return
+               
+               destList.append((item_text,self.nothing))
 
 
        def __init__(self, session, parent, childNode):
 
 
        def __init__(self, session, parent, childNode):
@@ -195,7 +196,7 @@ class Menu(Screen):
                                self.addMenu(list, x)
                                count += 1
                        elif x.tagName == "id":
                                self.addMenu(list, x)
                                count += 1
                        elif x.tagName == "id":
-                               menuID = getValbyAttr(x, "val")
+                               menuID = x.getAttribute("val")
                                count = 0
                        if menuID != -1:
                                if menuupdater.updatedMenuAvailable(menuID):
                                count = 0
                        if menuID != -1:
                                if menuupdater.updatedMenuAvailable(menuID):
@@ -214,9 +215,9 @@ class Menu(Screen):
                                "menu": self.closeRecursive
                        })
                
                                "menu": self.closeRecursive
                        })
                
-               a = getValbyAttr(parent, "title")
-               if a == "":                                                                                                             #if empty use name
-                       a = _(getValbyAttr(parent, "text"))
+               a = parent.getAttribute("title").encode("UTF-8") or None
+               if a is None:
+                       a = _(parent.getAttribute("text").encode("UTF-8"))
                self["title"] = Header(a)
                self.menu_title = a
 
                self["title"] = Header(a)
                self.menu_title = a