X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FComponents%2FGUISkin.py;h=f26c8256808e940db510ffacfa59cb6defcfbd16;hp=ce4d397d07df59f8808498f45ee5eed8b6808c2b;hb=fe72b7929c2f0b5dbac3040b303d195923735fc8;hpb=7579ae7495f580bfa86f4216ef15811f54588c5a diff --git a/lib/python/Components/GUISkin.py b/lib/python/Components/GUISkin.py old mode 100644 new mode 100755 index ce4d397..f26c825 --- a/lib/python/Components/GUISkin.py +++ b/lib/python/Components/GUISkin.py @@ -1,27 +1,33 @@ from GUIComponent import GUIComponent from skin import applyAllAttributes from Tools.CList import CList +from Sources.StaticText import StaticText class GUISkin: __module__ = __name__ def __init__(self): + self["Title"] = StaticText() self.onLayoutFinish = [ ] self.summaries = CList() + self.instance = None + self.desktop = None - def createGUIScreen(self, parent, desktop): + def createGUIScreen(self, parent, desktop, updateonly = False): for val in self.renderer: if isinstance(val, GUIComponent): - val.GUIcreate(parent) - if not val.applySkin(desktop): + if not updateonly: + val.GUIcreate(parent) + if not val.applySkin(desktop, self): print "warning, skin is missing renderer", val, "in", self for key in self: val = self[key] if isinstance(val, GUIComponent): - val.GUIcreate(parent) + if not updateonly: + val.GUIcreate(parent) depr = val.deprecationInfo - if val.applySkin(desktop): + if val.applySkin(desktop, self): if depr: print "WARNING: OBSOLETE COMPONENT '%s' USED IN SKIN. USE '%s' INSTEAD!" % (key, depr[0]) print "OBSOLETE COMPONENT WILL BE REMOVED %s, PLEASE UPDATE!" % (depr[1]) @@ -29,9 +35,10 @@ class GUISkin: print "warning, skin is missing element", key, "in", self for w in self.additionalWidgets: - w.instance = w.widget(parent) - # w.instance.thisown = 0 - applyAllAttributes(w.instance, desktop, w.skinAttributes) + if not updateonly: + w.instance = w.widget(parent) + # w.instance.thisown = 0 + applyAllAttributes(w.instance, desktop, w.skinAttributes, self.scale) for f in self.onLayoutFinish: if type(f) is not type(self.close): # is this the best way to do this? @@ -57,6 +64,49 @@ class GUISkin: self.summaries.remove(summary) def setTitle(self, title): - self.instance.setTitle(title) - self.title = title + if self.instance: + self.instance.setTitle(title) + self["Title"].text = title self.summaries.setTitle(title) + + def getTitle(self): + return self["Title"].text + + title = property(getTitle, setTitle) + + def setDesktop(self, desktop): + self.desktop = desktop + + def applySkin(self): + z = 0 + baseres = (720, 576) # FIXME: a skin might have set another resolution, which should be the base res + idx = 0 + skin_title_idx = -1 + title = self.title + for (key, value) in self.skinAttributes: + if key == "zPosition": + z = int(value) + elif key == "title": + skin_title_idx = idx + if title: + self.skinAttributes[skin_title_idx] = ("title", title) + else: + self["Title"].text = value + self.summaries.setTitle(value) + elif key == "baseResolution": + baseres = tuple([int(x) for x in value.split(',')]) + idx += 1 + self.scale = ((baseres[0], baseres[0]), (baseres[1], baseres[1])) + + if not self.instance: + from enigma import eWindow + self.instance = eWindow(self.desktop, z) + + if skin_title_idx == -1 and title: + self.skinAttributes.append(("title", title)) + + # we need to make sure that certain attributes come last + self.skinAttributes.sort(key=lambda a: {"position": 1}.get(a[0], 0)) + + applyAllAttributes(self.instance, self.desktop, self.skinAttributes, self.scale) + self.createGUIScreen(self.instance, self.desktop)