allow different skins by specifying a list as skinName, use menu_<menuid> as alternat...
authorFelix Domke <tmbinc@elitedvb.net>
Fri, 14 Sep 2007 12:26:07 +0000 (12:26 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Fri, 14 Sep 2007 12:26:07 +0000 (12:26 +0000)
lib/python/Screens/Menu.py
skin.py

index 1b0ef1a309b3a904c018da5f4c1dceb1606822fc..5ff929c6e912982ca4b57662d8c7b95350056fdd 100644 (file)
@@ -205,8 +205,14 @@ class Menu(Screen):
                        for l in plugins.getPluginsForMenu(menuID):
                                list.append((l[0], boundFunction(l[1], self.session)))
 
+               # for the skin: first try a menu_<menuID>, then Menu
+               self.skinName = [ ]
+               if menuID is not None:
+                       self.skinName.append("menu_" + menuID)
+               self.skinName.append("Menu")
+
                self["menu"] = List(list)       
-                                                       
+
                self["actions"] = ActionMap(["OkCancelActions", "MenuActions"], 
                        {
                                "ok": self.okbuttonClick,
@@ -233,5 +239,5 @@ class MainMenu(Menu):
        #add file load functions for the xml-file
        
        def __init__(self, *x):
-               Menu.__init__(self, *x)
                self.skinName = "Menu"
+               Menu.__init__(self, *x)
diff --git a/skin.py b/skin.py
index 3b448127c59a038dc72a2fb93583c0aa74123342..13d56cf1b4ac1c29d76fa5444dc2447085e48f08 100644 (file)
--- a/skin.py
+++ b/skin.py
@@ -286,9 +286,15 @@ def lookupScreen(name):
        return None, None
 
 def readSkin(screen, skin, name, desktop):
-       
-       myscreen, path = lookupScreen(name)
-       
+       if not isinstance(name, list):
+               name = [name]
+
+       # try all skins, first existing one have priority
+       for n in name:
+               myscreen, path = lookupScreen(n)
+               if myscreen is not None:
+                       break
+
        # otherwise try embedded skin
        myscreen = myscreen or getattr(screen, "parsedSkin", None)
        
@@ -296,7 +302,7 @@ def readSkin(screen, skin, name, desktop):
        if myscreen is None and getattr(screen, "skin", None):
                myscreen = screen.parsedSkin = xml.dom.minidom.parseString(screen.skin).childNodes[0]
        
-       assert myscreen is not None, "no skin for screen '" + name + "' found!"
+       assert myscreen is not None, "no skin for screen '" + repr(name) + "' found!"
 
        screen.skinAttributes = [ ]