only read twice when the previous read returned max bytes
[enigma2.git] / skin.py
diff --git a/skin.py b/skin.py
index 1aced44c16320df33b6ec764ee2f9a10c71ebc97..52b55360ed61e344c284386f3b21dd2cef7a7d57 100644 (file)
--- a/skin.py
+++ b/skin.py
@@ -4,7 +4,9 @@ from xml.dom import EMPTY_NAMESPACE
 from Tools.Import import my_import
 import os
 
-from Components.config import ConfigSubsection, configElement, configText, config
+from Components.config import ConfigSubsection, ConfigText, config
+from Components.Element import Element
+from Components.Converter.Converter import Converter
 
 from Tools.XMLTools import elementsWithTag, mergeText
 
@@ -47,11 +49,11 @@ def loadSkin(name):
 
 # 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)
-except SkinError, err:
+except (SkinError, IOError), err:
        print "SKIN ERROR:", err
        print "defaulting to standard skin..."
        loadSkin('skin.xml')
@@ -87,7 +89,7 @@ def collectAttributes(skinAttributes, node, skin_path_prefix=None, ignore=[]):
                # 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:
@@ -109,7 +111,7 @@ def applySingleAttribute(guiObject, desktop, attrib, value):
                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':
@@ -182,12 +184,12 @@ def applySingleAttribute(guiObject, desktop, attrib, value):
                                }[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:
@@ -226,6 +228,7 @@ def loadSingleSkinData(desktop, dom_skin, path_prefix):
        
        for windowstyle in elementsWithTag(skin.childNodes, "windowstyle"):
                style = eWindowStyleSkinned()
+               id = int(windowstyle.getAttribute("id") or "0")
                
                # defaults
                font = gFont("Regular", 20)
@@ -261,7 +264,7 @@ def loadSingleSkinData(desktop, dom_skin, path_prefix):
                        
                x = eWindowStyleManagerPtr()
                eWindowStyleManager.getInstance(x)
-               x.setStyle(style)
+               x.setStyle(id, style)
 
 def loadSkinData(desktop):
        skins = dom_skins[:]
@@ -336,11 +339,22 @@ def readSkin(screen, skin, name, desktop):
                        for converter in elementsWithTag(widget.childNodes, "convert"):
                                ctype = converter.getAttribute('type')
                                assert ctype, "'convert'-tag needs a 'type'-attribute"
-                               converter_class = my_import('.'.join(["Components", "Converter", ctype])).__dict__.get(ctype)
                                parms = mergeText(converter.childNodes).strip()
-                               c = converter_class(parms)
+                               converter_class = my_import('.'.join(["Components", "Converter", ctype])).__dict__.get(ctype)
                                
-                               c.connect(source)
+                               c = None
+                               
+                               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)