from Tools.Import import my_import
import os
+from Components.config import ConfigSubsection, ConfigText, config
+from Components.Element import Element
+from Components.Converter.Converter import Converter
+
from Tools.XMLTools import elementsWithTag, mergeText
colorNames = dict()
from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS
+class SkinError(Exception):
+ def __init__(self, message):
+ self.message = message
+
+ def __str__(self):
+ return self.message
+
dom_skins = [ ]
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 = ConfigText(default = "skin.xml")
+
+try:
+ loadSkin(config.skin.primary_skin.value)
+except (SkinError, IOError), err:
+ print "SKIN ERROR:", err
+ print "defaulting to standard skin..."
+ loadSkin('skin.xml')
loadSkin('skin_default.xml')
def parsePosition(str):
# TODO: localization? as in e1?
value = a.value.encode("utf-8")
- if attrib in ["pixmap", "pointer"]:
+ if attrib in ["pixmap", "pointer", "seek_pointer"]:
value = resolveFilename(SCOPE_SKIN_IMAGE, value, path_prefix=skin_path_prefix)
if attrib not in ignore:
elif attrib == 'title':
guiObject.setTitle(_(value))
elif attrib == 'text':
- guiObject.setText(value)
+ guiObject.setText(_(value))
elif attrib == 'font':
guiObject.setFont(parseFont(value))
elif attrib == 'zPosition':
}[value])
elif attrib == "enableWrapAround":
guiObject.setWrapAround(True)
- elif attrib == "pointer":
+ elif attrib == "pointer" or attrib == "seek_pointer":
(name, pos) = value.split(':')
pos = parsePosition(pos)
ptr = loadPixmap(name)
desktop.makeCompatiblePixmap(ptr.__deref__())
- guiObject.setPointer(ptr.__deref__(), pos)
+ guiObject.setPointer({"pointer": 0, "seek_pointer": 1}[attrib], ptr.__deref__(), pos)
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)
for windowstyle in elementsWithTag(skin.childNodes, "windowstyle"):
style = eWindowStyleSkinned()
+ id = int(windowstyle.getAttribute("id") or "0")
# defaults
font = gFont("Regular", 20)
x = eWindowStyleManagerPtr()
eWindowStyleManager.getInstance(x)
- x.setStyle(style)
+ x.setStyle(id, style)
def loadSkinData(desktop):
skins = dom_skins[:]
try:
attributes = screen[wname].skinAttributes = [ ]
except:
- raise str("component with name '" + wname + "' was not found in skin of screen '" + name + "'!")
+ raise SkinError("component with name '" + wname + "' was not found in skin of screen '" + name + "'!")
# assert screen[wname] is not Source
# get corresponding source
source = screen.get(wsource)
if source is None:
- raise str("source '" + wsource + "' was not found in screen '" + name + "'!")
+ raise SkinError("source '" + wsource + "' was not found in screen '" + name + "'!")
wrender = widget.getAttribute('render')
+ if not wrender:
+ raise SkinError("you must define a renderer with render= for source '%s'" % (wsource))
+
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)
if type == "onLayoutFinish":
screen.onLayoutFinish.append(code)
else:
- raise str("applet type '%s' unknown!" % type)
+ raise SkinError("applet type '%s' unknown!" % type)
continue
elif widget.tagName == "ePixmap":
w.widget = ePixmap
else:
- raise str("unsupported stuff : %s" % widget.tagName)
+ 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