git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
allow some more media types, fix extension detection
[enigma2.git]
/
skin.py
diff --git
a/skin.py
b/skin.py
index 3016016126c5f01ee7e3843e03446f1c7a3bdcb9..5327d66c71f7d5edb729c54f58a96f7d7d08c518 100644
(file)
--- a/
skin.py
+++ b/
skin.py
@@
-17,10
+17,8
@@
def dump(x, i=0):
from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE
# read the skin
from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE
# read the skin
-skinfile = file(resolveFilename(SCOPE_SKIN, 'skin.xml'), 'r')
-dom = xml.dom.minidom.parseString(skinfile.read())
-skinfile.close()
-
+dom_skin = xml.dom.minidom.parse(resolveFilename(SCOPE_SKIN, 'skin.xml'))
+dom_skin_default = xml.dom.minidom.parse(resolveFilename(SCOPE_SKIN, 'skin_default.xml'))
def parsePosition(str):
x, y = str.split(',')
def parsePosition(str):
x, y = str.split(',')
@@
-42,20
+40,28
@@
def parseColor(str):
raise ("color '%s' must be #aarrggbb or valid named color" % (str))
return gRGB(int(str[1:], 0x10))
raise ("color '%s' must be #aarrggbb or valid named color" % (str))
return gRGB(int(str[1:], 0x10))
-def collectAttributes(skinAttributes, node):
+def collectAttributes(skinAttributes, node
, skin_path_prefix=None
):
# walk all attributes
for p in range(node.attributes.length):
a = node.attributes.item(p)
# convert to string (was: unicode)
attrib = str(a.name)
# walk all attributes
for p in range(node.attributes.length):
a = node.attributes.item(p)
# convert to string (was: unicode)
attrib = str(a.name)
- # TODO: proper UTF8 translation?! (for value)
# TODO: localization? as in e1?
# TODO: localization? as in e1?
- value = str(a.value)
+ value = a.value.encode("utf-8")
+
+ if skin_path_prefix and attrib in ["pixmap", "pointer"] and len(value) and value[0:2] == "~/":
+ value = skin_path_prefix + value[1:]
skinAttributes.append((attrib, value))
skinAttributes.append((attrib, value))
-def applySingleAttribute(guiObject, desktop, attrib, value):
+def loadPixmap(path):
+ ptr = loadPNG(path)
+ if ptr is None:
+ raise "pixmap file %s not found!" % (path)
+ return ptr
+
+def applySingleAttribute(guiObject, desktop, attrib, value):
# and set attributes
try:
if attrib == 'position':
# and set attributes
try:
if attrib == 'position':
@@
-71,7
+77,7
@@
def applySingleAttribute(guiObject, desktop, attrib, value):
elif attrib == 'zPosition':
guiObject.setZPosition(int(value))
elif attrib == "pixmap":
elif attrib == 'zPosition':
guiObject.setZPosition(int(value))
elif attrib == "pixmap":
- ptr = loadP
NG
(resolveFilename(SCOPE_SKIN_IMAGE, value))
+ ptr = loadP
ixmap
(resolveFilename(SCOPE_SKIN_IMAGE, value))
# that __deref__ still scares me!
desktop.makeCompatiblePixmap(ptr.__deref__())
guiObject.setPixmap(ptr.__deref__())
# that __deref__ still scares me!
desktop.makeCompatiblePixmap(ptr.__deref__())
guiObject.setPixmap(ptr.__deref__())
@@
-139,7
+145,7
@@
def applySingleAttribute(guiObject, desktop, attrib, value):
elif attrib == "pointer":
(name, pos) = value.split(':')
pos = parsePosition(pos)
elif attrib == "pointer":
(name, pos) = value.split(':')
pos = parsePosition(pos)
- ptr = loadP
NG
(resolveFilename(SCOPE_SKIN_IMAGE, name))
+ ptr = loadP
ixmap
(resolveFilename(SCOPE_SKIN_IMAGE, name))
desktop.makeCompatiblePixmap(ptr.__deref__())
guiObject.setPointer(ptr.__deref__(), pos)
elif attrib != 'name':
desktop.makeCompatiblePixmap(ptr.__deref__())
guiObject.setPointer(ptr.__deref__(), pos)
elif attrib != 'name':
@@
-155,7
+161,7
@@
def applyAllAttributes(guiObject, desktop, attributes):
def loadSkin(desktop):
print "loading skin..."
def loadSkin(desktop):
print "loading skin..."
- skin = dom.childNodes[0]
+ skin = dom
_skin
.childNodes[0]
assert skin.tagName == "skin", "root element in skin must be 'skin'!"
for c in elementsWithTag(skin.childNodes, "colors"):
assert skin.tagName == "skin", "root element in skin must be 'skin'!"
for c in elementsWithTag(skin.childNodes, "colors"):
@@
-180,7
+186,7
@@
def loadSkin(desktop):
bpName = str(pixmap.getAttribute("pos"))
filename = str(pixmap.getAttribute("filename"))
bpName = str(pixmap.getAttribute("pos"))
filename = str(pixmap.getAttribute("filename"))
- png = loadP
NG
(resolveFilename(SCOPE_SKIN_IMAGE, filename))
+ png = loadP
ixmap
(resolveFilename(SCOPE_SKIN_IMAGE, filename))
# adapt palette
desktop.makeCompatiblePixmap(png.__deref__())
# adapt palette
desktop.makeCompatiblePixmap(png.__deref__())
@@
-203,14
+209,24
@@
def readSkin(screen, skin, name, desktop):
myscreen = None
# first, find the corresponding screen element
myscreen = None
# first, find the corresponding screen element
- skin = dom.childNodes[0]
+ skin = dom_skin.childNodes[0]
+ skin_default = dom_skin_default.childNodes[0]
for x in elementsWithTag(skin.childNodes, "screen"):
if x.getAttribute('name') == name:
myscreen = x
for x in elementsWithTag(skin.childNodes, "screen"):
if x.getAttribute('name') == name:
myscreen = x
- del skin
+ break
- # try embedded skin
+ # if not found, check default skin
+ if myscreen is None:
+ for x in elementsWithTag(skin_default.childNodes, "screen"):
+ if x.getAttribute('name') == name:
+ myscreen = x
+ break
+
+ del skin, skin_default
+
+ # otherwise try embedded skin
myscreen = myscreen or getattr(screen, "parsedSkin", None)
# try uncompiled embedded skin
myscreen = myscreen or getattr(screen, "parsedSkin", None)
# try uncompiled embedded skin
@@
-220,7
+236,10
@@
def readSkin(screen, skin, name, desktop):
assert myscreen is not None, "no skin for screen '" + name + "' found!"
screen.skinAttributes = [ ]
assert myscreen is not None, "no skin for screen '" + name + "' found!"
screen.skinAttributes = [ ]
- collectAttributes(screen.skinAttributes, myscreen)
+
+ skin_path_prefix = getattr(screen, "skin_path", None)
+
+ collectAttributes(screen.skinAttributes, myscreen, skin_path_prefix)
screen.additionalWidgets = [ ]
screen.additionalWidgets = [ ]
@@
-237,7
+256,7
@@
def readSkin(screen, skin, name, desktop):
except:
raise str("component with name '" + wname + "' was not found in skin of screen '" + name + "'!")
except:
raise str("component with name '" + wname + "' was not found in skin of screen '" + name + "'!")
- collectAttributes(attributes, widget)
+ collectAttributes(attributes, widget
, skin_path_prefix
)
# now walk additional objects
for widget in elementsWithTag(myscreen.childNodes, lambda x: x != "widget"):
# now walk additional objects
for widget in elementsWithTag(myscreen.childNodes, lambda x: x != "widget"):
@@
-267,7
+286,7
@@
def readSkin(screen, skin, name, desktop):
raise str("unsupported stuff : %s" % widget.tagName)
w.skinAttributes = [ ]
raise str("unsupported stuff : %s" % widget.tagName)
w.skinAttributes = [ ]
- collectAttributes(w.skinAttributes, widget)
+ collectAttributes(w.skinAttributes, widget
, skin_path_prefix
)
# applyAttributes(guiObject, widget, desktop)
# guiObject.thisown = 0
# applyAttributes(guiObject, widget, desktop)
# guiObject.thisown = 0