X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/40c7c611cfab3dfe403a041e4921805cb107adf4..81366ee3db67e313faeac5073dc8b1f0e7e71921:/skin.py diff --git a/skin.py b/skin.py index 30e8c720..f13ec9ca 100644 --- a/skin.py +++ b/skin.py @@ -4,6 +4,10 @@ from xml.dom import EMPTY_NAMESPACE from Tools.Import import my_import import os +from Components.config import ConfigSubsection, configElement, configText, config +from Components.Element import Element +from Components.Converter.Converter import Converter + from Tools.XMLTools import elementsWithTag, mergeText colorNames = dict() @@ -18,8 +22,12 @@ def dump(x, i=0): from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS -class SkinError(str): - pass +class SkinError(Exception): + def __init__(self, message): + self.message = message + + def __str__(self): + return self.message dom_skins = [ ] @@ -40,7 +48,15 @@ def loadSkin(name): # so the first screen found will be used. # example: loadSkin("nemesis_greenline/skin.xml") -loadSkin('skin.xml') +config.skin = ConfigSubsection() +config.skin.primary_skin = configElement("config.skin.primary_skin", configText, "skin.xml", 0) + +try: + loadSkin(config.skin.primary_skin.value) +except SkinError, err: + print "SKIN ERROR:", err + print "defaulting to standard skin..." + loadSkin('skin.xml') loadSkin('skin_default.xml') def parsePosition(str): @@ -177,7 +193,7 @@ def applySingleAttribute(guiObject, desktop, attrib, value): elif attrib == 'shadowOffset': guiObject.setShadowOffset(parsePosition(value)) else: - print "unsupported attribute " + attrib + "=" + value + raise "unsupported attribute " + attrib + "=" + value except int: # AttributeError: print "widget %s (%s) doesn't support attribute %s!" % ("", guiObject.__class__.__name__, attrib) @@ -321,12 +337,23 @@ def readSkin(screen, skin, name, desktop): for converter in elementsWithTag(widget.childNodes, "convert"): ctype = converter.getAttribute('type') - assert ctype - converter_class = my_import('.'.join(["Components", "Converter", ctype])).__dict__.get(ctype) + assert ctype, "'convert'-tag needs a 'type'-attribute" parms = mergeText(converter.childNodes).strip() - c = converter_class(parms) + converter_class = my_import('.'.join(["Components", "Converter", ctype])).__dict__.get(ctype) + + c = None - c.connect(source) + for i in source.downstream_elements: + if isinstance(i, converter_class) and i.converter_arguments == parms: + c = i + + if c is None: + print "allocating new converter!" + c = converter_class(parms) + c.connect(source) + else: + print "reused conveter!" + source = c renderer_class = my_import('.'.join(["Components", "Renderer", wrender])).__dict__.get(wrender) @@ -367,7 +394,7 @@ def readSkin(screen, skin, name, desktop): raise SkinError("unsupported stuff : %s" % widget.tagName) w.skinAttributes = [ ] - collectAttributes(w.skinAttributes, widget, skin_path_prefix) + collectAttributes(w.skinAttributes, widget, skin_path_prefix, ignore=['name']) # applyAttributes(guiObject, widget, desktop) # guiObject.thisown = 0