update da language
[enigma2.git] / skin.py
diff --git a/skin.py b/skin.py
index 0e0ec4124d59519efdd398ca276d1fdc6f6d6013..e5c4837155b31c726dfb97891e6c283ed23070bc 100644 (file)
--- a/skin.py
+++ b/skin.py
@@ -6,6 +6,7 @@ from enigma import eSize, ePoint, gFont, eWindow, eLabel, ePixmap, eWindowStyleM
 
 from Components.config import ConfigSubsection, ConfigText, config
 from Components.Converter.Converter import Converter
+from Components.Sources.Source import Source, ObsoleteSource
 from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS
 from Tools.Import import my_import
 
@@ -13,9 +14,6 @@ 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:
@@ -78,7 +76,7 @@ def parseColor(str):
                try:
                        return colorNames[str]
                except:
-                       raise ("color '%s' must be #aarrggbb or valid named color" % (str))
+                       raise SkinError("color '%s' must be #aarrggbb or valid named color" % (str))
        return gRGB(int(str[1:], 0x10))
 
 def collectAttributes(skinAttributes, node, skin_path_prefix=None, ignore=[]):
@@ -100,7 +98,7 @@ def collectAttributes(skinAttributes, node, skin_path_prefix=None, ignore=[]):
 def loadPixmap(path):
        ptr = loadPNG(path)
        if ptr is None:
-               raise "pixmap file %s not found!" % (path)
+               raise SkinError("pixmap file %s not found!" % (path))
        return ptr
 
 def applySingleAttribute(guiObject, desktop, attrib, value):
@@ -201,7 +199,7 @@ def applySingleAttribute(guiObject, desktop, attrib, value):
                elif attrib == 'noWrap':
                        guiObject.setNoWrap(1)
                else:
-                       raise "unsupported attribute " + attrib + "=" + value
+                       raise SkinError("unsupported attribute " + attrib + "=" + value)
        except int:
 # AttributeError:
                print "widget %s (%s) doesn't support attribute %s!" % ("", guiObject.__class__.__name__, attrib)
@@ -288,24 +286,28 @@ def lookupScreen(name):
                                return x, path
        return None, None
 
-def readSkin(screen, skin, name, desktop):
-       if not isinstance(name, list):
-               name = [name]
+def readSkin(screen, skin, names, desktop):
+       if not isinstance(names, list):
+               names = [names]
+
+       name = "<embedded-in-'%s'>" % screen.__class__.__name__
 
        # try all skins, first existing one have priority
-       for n in name:
+       for n in names:
                myscreen, path = lookupScreen(n)
                if myscreen is not None:
+                       # use this name for debug output
+                       name = n
                        break
 
        # otherwise try embedded skin
        myscreen = myscreen or getattr(screen, "parsedSkin", None)
-       
+
        # try uncompiled embedded skin
        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 '" + repr(name) + "' found!"
+
+       assert myscreen is not None, "no skin for screen '" + repr(names) + "' found!"
 
        screen.skinAttributes = [ ]
        
@@ -346,7 +348,37 @@ def readSkin(screen, skin, name, desktop):
                        collectAttributes(attributes, widget, skin_path_prefix, ignore=['name'])
                elif wsource:
                        # get corresponding source
-                       source = screen.get(wsource)
+
+                       while True: # until we found a non-obsolete source
+
+                               # parse our current "wsource", which might specifiy a "related screen" before the dot,
+                               # for example to reference a parent, global or session-global screen.
+                               scr = screen
+
+                               # resolve all path components
+                               path = wsource.split('.')
+                               while len(path) > 1:
+                                       scr = screen.getRelatedScreen(path[0])
+                                       if scr is None:
+                                               print wsource
+                                               print name
+                                               raise SkinError("specified related screen '" + wsource + "' was not found in screen '" + name + "'!")
+                                       path = path[1:]
+
+                               # resolve the source.
+                               source = scr.get(path[0])
+                               if isinstance(source, ObsoleteSource):
+                                       # however, if we found an "obsolete source", issue warning, and resolve the real source.
+                                       print "WARNING: SKIN '%s' USES OBSOLETE SOURCE '%s', USE '%s' INSTEAD!" % (name, wsource, source.new_source)
+                                       print "OBSOLETE SOURCE WILL BE REMOVED %s, PLEASE UPDATE!" % (source.removal_date)
+                                       if source.description:
+                                               print source.description
+
+                                       wsource = source.new_source
+                               else:
+                                       # otherwise, use that source.
+                                       break
+
                        if source is None:
                                raise SkinError("source '" + wsource + "' was not found in screen '" + name + "'!")
                        
@@ -372,7 +404,7 @@ def readSkin(screen, skin, name, desktop):
                                        c = converter_class(parms)
                                        c.connect(source)
                                else:
-                                       print "reused conveter!"
+                                       print "reused converter!"
        
                                source = c