git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
MenuList -> List
[enigma2.git]
/
skin.py
diff --git
a/skin.py
b/skin.py
index f13ec9ca5ee37533a159b7b385a968a625c241d3..cb433269a584459d0c8d1a5ad719ca32211bd9ef 100644
(file)
--- a/
skin.py
+++ b/
skin.py
@@
-1,12
+1,15
@@
-from enigma import *
import xml.dom.minidom
from xml.dom import EMPTY_NAMESPACE
import xml.dom.minidom
from xml.dom import EMPTY_NAMESPACE
-from Tools.Import import my_import
-import os
+from os import path
+
+from enigma import eSize, ePoint, gFont, eWindow, eLabel, ePixmap, eWindowStyleManager, \
+ loadPNG, addFont, gRGB, eWindowStyleSkinned
-from Components.config import ConfigSubsection,
configElement, c
onfigText, config
+from Components.config import ConfigSubsection,
C
onfigText, config
from Components.Element import Element
from Components.Converter.Converter import Converter
from Components.Element import Element
from Components.Converter.Converter import Converter
+from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS
+from Tools.Import import my_import
from Tools.XMLTools import elementsWithTag, mergeText
from Tools.XMLTools import elementsWithTag, mergeText
@@
-20,8
+23,6
@@
def dump(x, i=0):
except:
None
except:
None
-from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS
-
class SkinError(Exception):
def __init__(self, message):
self.message = message
class SkinError(Exception):
def __init__(self, message):
self.message = message
@@
-34,8
+35,8
@@
dom_skins = [ ]
def loadSkin(name):
# read the skin
filename = resolveFilename(SCOPE_SKIN, name)
def loadSkin(name):
# read the skin
filename = resolveFilename(SCOPE_SKIN, name)
-
path = os.
path.dirname(filename) + "/"
- dom_skins.append((path, xml.dom.minidom.parse(filename)))
+
mpath =
path.dirname(filename) + "/"
+ dom_skins.append((
m
path, xml.dom.minidom.parse(filename)))
# we do our best to always select the "right" value
# skins are loaded in order of priority: skin with
# we do our best to always select the "right" value
# skins are loaded in order of priority: skin with
@@
-49,11
+50,11
@@
def loadSkin(name):
# example: loadSkin("nemesis_greenline/skin.xml")
config.skin = ConfigSubsection()
# example: loadSkin("nemesis_greenline/skin.xml")
config.skin = ConfigSubsection()
-config.skin.primary_skin =
configElement("config.skin.primary_skin", configText, "skin.xml", 0
)
+config.skin.primary_skin =
ConfigText(default = "skin.xml"
)
try:
loadSkin(config.skin.primary_skin.value)
try:
loadSkin(config.skin.primary_skin.value)
-except
SkinError
, err:
+except
(SkinError, IOError, AssertionError)
, err:
print "SKIN ERROR:", err
print "defaulting to standard skin..."
loadSkin('skin.xml')
print "SKIN ERROR:", err
print "defaulting to standard skin..."
loadSkin('skin.xml')
@@
-89,7
+90,7
@@
def collectAttributes(skinAttributes, node, skin_path_prefix=None, ignore=[]):
# TODO: localization? as in e1?
value = a.value.encode("utf-8")
# 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:
value = resolveFilename(SCOPE_SKIN_IMAGE, value, path_prefix=skin_path_prefix)
if attrib not in ignore:
@@
-111,16
+112,15
@@
def applySingleAttribute(guiObject, desktop, attrib, value):
elif attrib == 'title':
guiObject.setTitle(_(value))
elif attrib == 'text':
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':
guiObject.setZPosition(int(value))
elif attrib == "pixmap":
ptr = loadPixmap(value) # this should already have been filename-resolved.
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__())
+ desktop.makeCompatiblePixmap(ptr)
+ guiObject.setPixmap(ptr)
# guiObject.setPixmapFromFile(value)
elif attrib == "alphatest": # used by ePixmap
guiObject.setAlphatest(
# guiObject.setPixmapFromFile(value)
elif attrib == "alphatest": # used by ePixmap
guiObject.setAlphatest(
@@
-184,14
+184,16
@@
def applySingleAttribute(guiObject, desktop, attrib, value):
}[value])
elif attrib == "enableWrapAround":
guiObject.setWrapAround(True)
}[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)
(name, pos) = value.split(':')
pos = parsePosition(pos)
ptr = loadPixmap(name)
- desktop.makeCompatiblePixmap(ptr
.__deref__()
)
- guiObject.setPointer(
ptr.__deref__()
, pos)
+ desktop.makeCompatiblePixmap(ptr)
+ guiObject.setPointer(
{"pointer": 0, "seek_pointer": 1}[attrib], ptr
, pos)
elif attrib == 'shadowOffset':
guiObject.setShadowOffset(parsePosition(value))
elif attrib == 'shadowOffset':
guiObject.setShadowOffset(parsePosition(value))
+ elif attrib == 'noWrap':
+ guiObject.setNoWrap(1)
else:
raise "unsupported attribute " + attrib + "=" + value
except int:
else:
raise "unsupported attribute " + attrib + "=" + value
except int:
@@
-228,6
+230,7
@@
def loadSingleSkinData(desktop, dom_skin, path_prefix):
for windowstyle in elementsWithTag(skin.childNodes, "windowstyle"):
style = eWindowStyleSkinned()
for windowstyle in elementsWithTag(skin.childNodes, "windowstyle"):
style = eWindowStyleSkinned()
+ id = int(windowstyle.getAttribute("id") or "0")
# defaults
font = gFont("Regular", 20)
# defaults
font = gFont("Regular", 20)
@@
-249,8
+252,8
@@
def loadSingleSkinData(desktop, dom_skin, path_prefix):
png = loadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, filename, path_prefix=path_prefix))
# adapt palette
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__()
)
+ desktop.makeCompatiblePixmap(png)
+ style.setPixmap(eWindowStyleSkinned.__dict__[bsName], eWindowStyleSkinned.__dict__[bpName], png)
for color in elementsWithTag(windowstyle.childNodes, "color"):
type = str(color.getAttribute("name"))
for color in elementsWithTag(windowstyle.childNodes, "color"):
type = str(color.getAttribute("name"))
@@
-261,9
+264,8
@@
def loadSingleSkinData(desktop, dom_skin, path_prefix):
except:
raise ("Unknown color %s" % (type))
except:
raise ("Unknown color %s" % (type))
- x = eWindowStyleManagerPtr()
- eWindowStyleManager.getInstance(x)
- x.setStyle(style)
+ x = eWindowStyleManager.getInstance()
+ x.setStyle(id, style)
def loadSkinData(desktop):
skins = dom_skins[:]
def loadSkinData(desktop):
skins = dom_skins[:]
@@
-281,6
+283,7
@@
def lookupScreen(name):
return None, None
def readSkin(screen, skin, name, desktop):
return None, None
def readSkin(screen, skin, name, desktop):
+
myscreen, path = lookupScreen(name)
# otherwise try embedded skin
myscreen, path = lookupScreen(name)
# otherwise try embedded skin
@@
-301,6
+304,8
@@
def readSkin(screen, skin, name, desktop):
screen.additionalWidgets = [ ]
screen.renderer = [ ]
screen.additionalWidgets = [ ]
screen.renderer = [ ]
+ visited_components = set()
+
# now walk all widgets
for widget in elementsWithTag(myscreen.childNodes, "widget"):
# ok, we either have 1:1-mapped widgets ('old style'), or 1:n-mapped
# now walk all widgets
for widget in elementsWithTag(myscreen.childNodes, "widget"):
# ok, we either have 1:1-mapped widgets ('old style'), or 1:n-mapped
@@
-309,11
+314,14
@@
def readSkin(screen, skin, name, desktop):
wname = widget.getAttribute('name')
wsource = widget.getAttribute('source')
wname = widget.getAttribute('name')
wsource = widget.getAttribute('source')
+
if wname is None and wsource is None:
print "widget has no name and no source!"
continue
if wname:
if wname is None and wsource is None:
print "widget has no name and no source!"
continue
if wname:
+ visited_components.add(wname)
+
# get corresponding 'gui' object
try:
attributes = screen[wname].skinAttributes = [ ]
# get corresponding 'gui' object
try:
attributes = screen[wname].skinAttributes = [ ]
@@
-321,7
+329,7
@@
def readSkin(screen, skin, name, desktop):
raise SkinError("component with name '" + wname + "' was not found in skin of screen '" + name + "'!")
# assert screen[wname] is not Source
raise SkinError("component with name '" + wname + "' was not found in skin of screen '" + name + "'!")
# assert screen[wname] is not Source
-
+
# and collect attributes for this
collectAttributes(attributes, widget, skin_path_prefix, ignore=['name'])
elif wsource:
# and collect attributes for this
collectAttributes(attributes, widget, skin_path_prefix, ignore=['name'])
elif wsource:
@@
-366,6
+374,11
@@
def readSkin(screen, skin, name, desktop):
screen.renderer.append(renderer)
screen.renderer.append(renderer)
+ from Components.GUIComponent import GUIComponent
+ nonvisited_components = [x for x in set(screen.keys()) - visited_components if isinstance(x, GUIComponent)]
+
+ assert not nonvisited_components, "the following components in %s don't have a skin entry: %s" % (name, ', '.join(nonvisited_components))
+
# now walk additional objects
for widget in elementsWithTag(myscreen.childNodes, lambda x: x != "widget"):
if widget.tagName == "applet":
# now walk additional objects
for widget in elementsWithTag(myscreen.childNodes, lambda x: x != "widget"):
if widget.tagName == "applet":