remove unneeded code
[enigma2.git] / skin.py
diff --git a/skin.py b/skin.py
index fc4721dd69943695f7257e742bfd645cd54fbd8a..d40c593b832017ecfdbd44951b2124a93c3f595c 100644 (file)
--- a/skin.py
+++ b/skin.py
@@ -1,13 +1,12 @@
 import xml.dom.minidom
-from xml.dom import EMPTY_NAMESPACE
 from os import path
 
 from enigma import eSize, ePoint, gFont, eWindow, eLabel, ePixmap, eWindowStyleManager, \
        loadPNG, addFont, gRGB, eWindowStyleSkinned
 
 from Components.config import ConfigSubsection, ConfigText, config
-from Components.Element import Element
 from Components.Converter.Converter import Converter
+from Components.Sources.Source import Source
 from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS
 from Tools.Import import my_import
 
@@ -15,6 +14,9 @@ from Tools.XMLTools import elementsWithTag, mergeText
 
 colorNames = dict()
 
+def queryColor(colorName):
+       return colorNames.get(colorName)
+
 def dump(x, i=0):
        print " " * i + str(x)
        try:
@@ -90,7 +92,7 @@ def collectAttributes(skinAttributes, node, skin_path_prefix=None, ignore=[]):
                # TODO: localization? as in e1?
                value = a.value.encode("utf-8")
                
-               if attrib in ["pixmap", "pointer", "seek_pointer"]:
+               if attrib in ["pixmap", "pointer", "seek_pointer", "backgroundPixmap", "selectionPixmap"]:
                        value = resolveFilename(SCOPE_SKIN_IMAGE, value, path_prefix=skin_path_prefix)
                
                if attrib not in ignore:
@@ -117,11 +119,15 @@ def applySingleAttribute(guiObject, desktop, attrib, value):
                        guiObject.setFont(parseFont(value))
                elif attrib == 'zPosition':
                        guiObject.setZPosition(int(value))
-               elif attrib == "pixmap":
+               elif attrib in ["pixmap", "backgroundPixmap", "selectionPixmap"]:
                        ptr = loadPixmap(value) # this should already have been filename-resolved.
-                       # that __deref__ still scares me!
-                       desktop.makeCompatiblePixmap(ptr.__deref__())
-                       guiObject.setPixmap(ptr.__deref__())
+                       desktop.makeCompatiblePixmap(ptr)
+                       if attrib == "pixmap":
+                               guiObject.setPixmap(ptr)
+                       elif attrib == "backgroundPixmap":
+                               guiObject.setBackgroundPicture(ptr)
+                       elif attrib == "selectionPixmap":
+                               guiObject.setSelectionPicture(ptr)
                        # guiObject.setPixmapFromFile(value)
                elif attrib == "alphatest": # used by ePixmap
                        guiObject.setAlphatest(
@@ -189,8 +195,8 @@ def applySingleAttribute(guiObject, desktop, attrib, value):
                        (name, pos) = value.split(':')
                        pos = parsePosition(pos)
                        ptr = loadPixmap(name)
-                       desktop.makeCompatiblePixmap(ptr.__deref__())
-                       guiObject.setPointer({"pointer": 0, "seek_pointer": 1}[attrib], ptr.__deref__(), pos)
+                       desktop.makeCompatiblePixmap(ptr)
+                       guiObject.setPointer({"pointer": 0, "seek_pointer": 1}[attrib], ptr, pos)
                elif attrib == 'shadowOffset':
                        guiObject.setShadowOffset(parsePosition(value))
                elif attrib == 'noWrap':
@@ -253,8 +259,8 @@ def loadSingleSkinData(desktop, dom_skin, path_prefix):
                                png = loadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, filename, path_prefix=path_prefix))
                                
                                # adapt palette
-                               desktop.makeCompatiblePixmap(png.__deref__())
-                               style.setPixmap(eWindowStyleSkinned.__dict__[bsName], eWindowStyleSkinned.__dict__[bpName], png.__deref__())
+                               desktop.makeCompatiblePixmap(png)
+                               style.setPixmap(eWindowStyleSkinned.__dict__[bsName], eWindowStyleSkinned.__dict__[bpName], png)
 
                for color in elementsWithTag(windowstyle.childNodes, "color"):
                        type = str(color.getAttribute("name"))
@@ -284,9 +290,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)
        
@@ -294,7 +306,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 = [ ]
        
@@ -337,7 +349,13 @@ def readSkin(screen, skin, name, desktop):
                        # get corresponding source
                        source = screen.get(wsource)
                        if source is None:
-                               raise SkinError("source '" + wsource + "' was not found in screen '" + name + "'!")
+                               if wsource == "fake":
+                                       if screen.get("fake"):
+                                               raise SkinError("screen '" + name + "has a element named 'fake' but its not a Source!!")
+                                       source = Source()
+                                       screen["fake"] = source
+                               else:
+                                       raise SkinError("source '" + wsource + "' was not found in screen '" + name + "'!")
                        
                        wrender = widget.getAttribute('render')