+ guiObject.setTitle(_(value))
+ elif attrib == 'text':
+ guiObject.setText(_(value))
+ elif attrib == 'font':
+ guiObject.setFont(parseFont(value))
+ elif attrib == 'zPosition':
+ guiObject.setZPosition(int(value))
+ elif attrib == "pixmap":
+ ptr = loadPixmap(value) # this should already have been filename-resolved.
+ # that __deref__ still scares me!
+ desktop.makeCompatiblePixmap(ptr.__deref__())
+ guiObject.setPixmap(ptr.__deref__())
+ # guiObject.setPixmapFromFile(value)
+ elif attrib == "alphatest": # used by ePixmap
+ guiObject.setAlphatest(
+ { "on": True,
+ "off": False
+ }[value])
+ elif attrib == "orientation": # used by eSlider
+ try:
+ guiObject.setOrientation(
+ { "orVertical": guiObject.orVertical,
+ "orHorizontal": guiObject.orHorizontal
+ }[value])
+ except KeyError:
+ print "oprientation must be either orVertical or orHorizontal!"
+ elif attrib == "valign":
+ try:
+ guiObject.setVAlign(
+ { "top": guiObject.alignTop,
+ "center": guiObject.alignCenter,
+ "bottom": guiObject.alignBottom
+ }[value])
+ except KeyError:
+ print "valign must be either top, center or bottom!"
+ elif attrib == "halign":
+ try:
+ guiObject.setHAlign(
+ { "left": guiObject.alignLeft,
+ "center": guiObject.alignCenter,
+ "right": guiObject.alignRight,
+ "block": guiObject.alignBlock
+ }[value])
+ except KeyError:
+ print "halign must be either left, center, right or block!"
+ elif attrib == "flags":
+ flags = value.split(',')
+ for f in flags:
+ try:
+ fv = eWindow.__dict__[f]
+ guiObject.setFlag(fv)
+ except KeyError:
+ print "illegal flag %s!" % f
+ elif attrib == "backgroundColor":
+ guiObject.setBackgroundColor(parseColor(value))
+ elif attrib == "foregroundColor":
+ guiObject.setForegroundColor(parseColor(value))
+ elif attrib == "shadowColor":
+ guiObject.setShadowColor(parseColor(value))
+ elif attrib == "selectionDisabled":
+ guiObject.setSelectionEnable(0)
+ elif attrib == "transparent":
+ guiObject.setTransparent(int(value))
+ elif attrib == "borderColor":
+ guiObject.setBorderColor(parseColor(value))
+ elif attrib == "borderWidth":
+ guiObject.setBorderWidth(int(value))
+ elif attrib == "scrollbarMode":
+ guiObject.setScrollbarMode(
+ { "showOnDemand": guiObject.showOnDemand,
+ "showAlways": guiObject.showAlways,
+ "showNever": guiObject.showNever
+ }[value])
+ elif attrib == "enableWrapAround":
+ guiObject.setWrapAround(True)
+ elif attrib == "pointer" or attrib == "seek_pointer":
+ (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)
+ elif attrib == 'shadowOffset':
+ guiObject.setShadowOffset(parsePosition(value))
+ else:
+ raise "unsupported attribute " + attrib + "=" + value
+ except int:
+# AttributeError:
+ print "widget %s (%s) doesn't support attribute %s!" % ("", guiObject.__class__.__name__, attrib)
+
+def applyAllAttributes(guiObject, desktop, attributes):
+ for (attrib, value) in attributes:
+ applySingleAttribute(guiObject, desktop, attrib, value)
+
+def loadSingleSkinData(desktop, dom_skin, path_prefix):
+ """loads skin data like colors, windowstyle etc."""
+
+ skin = dom_skin.childNodes[0]
+ assert skin.tagName == "skin", "root element in skin must be 'skin'!"
+
+ for c in elementsWithTag(skin.childNodes, "colors"):
+ for color in elementsWithTag(c.childNodes, "color"):
+ name = str(color.getAttribute("name"))
+ color = str(color.getAttribute("value"))
+
+ if not len(color):
+ raise ("need color and name, got %s %s" % (name, color))
+
+ colorNames[name] = parseColor(color)
+
+ for c in elementsWithTag(skin.childNodes, "fonts"):
+ for font in elementsWithTag(c.childNodes, "font"):
+ filename = str(font.getAttribute("filename") or "<NONAME>")
+ name = str(font.getAttribute("name") or "Regular")
+ scale = int(font.getAttribute("scale") or "100")
+ is_replacement = font.getAttribute("replacement") != ""
+ addFont(resolveFilename(SCOPE_FONTS, filename, path_prefix=path_prefix), name, scale, is_replacement)
+
+ for windowstyle in elementsWithTag(skin.childNodes, "windowstyle"):
+ style = eWindowStyleSkinned()
+ id = int(windowstyle.getAttribute("id") or "0")
+
+ # defaults
+ font = gFont("Regular", 20)
+ offset = eSize(20, 5)
+
+ for title in elementsWithTag(windowstyle.childNodes, "title"):
+ offset = parseSize(title.getAttribute("offset"))
+ font = parseFont(str(title.getAttribute("font")))
+
+ style.setTitleFont(font);
+ style.setTitleOffset(offset)
+
+ for borderset in elementsWithTag(windowstyle.childNodes, "borderset"):
+ bsName = str(borderset.getAttribute("name"))
+ for pixmap in elementsWithTag(borderset.childNodes, "pixmap"):
+ bpName = str(pixmap.getAttribute("pos"))
+ filename = str(pixmap.getAttribute("filename"))
+
+ 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__())
+
+ for color in elementsWithTag(windowstyle.childNodes, "color"):
+ type = str(color.getAttribute("name"))
+ color = parseColor(color.getAttribute("color"))
+
+ try:
+ style.setColor(eWindowStyleSkinned.__dict__["col" + type], color)
+ except:
+ raise ("Unknown color %s" % (type))
+
+ x = eWindowStyleManagerPtr()
+ eWindowStyleManager.getInstance(x)
+ x.setStyle(id, style)
+
+def loadSkinData(desktop):
+ skins = dom_skins[:]
+ skins.reverse()
+ for (path, dom_skin) in skins:
+ loadSingleSkinData(desktop, dom_skin, path)
+
+def lookupScreen(name):
+ for (path, dom_skin) in dom_skins:
+ # first, find the corresponding screen element
+ skin = dom_skin.childNodes[0]
+ for x in elementsWithTag(skin.childNodes, "screen"):
+ if x.getAttribute('name') == name:
+ return x, path
+ return None, None