123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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, updateonly = False):
- for val in self.renderer:
- if isinstance(val, GUIComponent):
- 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):
- if not updateonly:
- val.GUIcreate(parent)
- depr = val.deprecationInfo
- 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])
- elif not depr:
- print "warning, skin is missing element", key, "in", self
-
- for w in self.additionalWidgets:
- 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?
- exec f in globals(), locals()
- else:
- f()
-
- def deleteGUIScreen(self):
- for (name, val) in self.items():
- if isinstance(val, GUIComponent):
- val.GUIdelete()
-
- def close(self):
- self.deleteGUIScreen()
-
- def createSummary(self):
- return None
-
- def addSummary(self, summary):
- self.summaries.append(summary)
-
- def removeSummary(self, summary):
- self.summaries.remove(summary)
-
- def setTitle(self, title):
- try:
- if self.instance:
- self.instance.setTitle(title)
- self["Title"].text = title
- self.summaries.setTitle(title)
- except:
- pass
- 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)
|