--- /dev/null
+from Screens.Screen import Screen
+from Components.Sources.CurrentService import CurrentService
+from Components.Sources.EventInfo import EventInfo
+from Components.Sources.FrontendStatus import FrontendStatus
+from Components.Sources.Source import Source
+
+class SessionGlobals(Screen):
+ def __init__(self, session):
+ Screen.__init__(self, session)
+ self["CurrentService"] = CurrentService(self.session.nav)
+ self["Event_Now"] = EventInfo(self.session.nav, EventInfo.NOW)
+ self["Event_Next"] = EventInfo(self.session.nav, EventInfo.NEXT)
+ self["FrontendStatus"] = FrontendStatus(service_source = self.session.nav.getCurrentService)
+ self["VideoPicture"] = Source()
def create(self, comp, desktop):
comp.createGUIScreen(self.parent, desktop)
+from Screens.Globals import Globals
+from Screens.SessionGlobals import SessionGlobals
+from Screens.Screen import Screen
+
+Screen.global_screen = Globals()
+
# Session.open:
# * push current active dialog ('current_dialog') onto stack
# * call execEnd for this dialog
self.in_exec = False
+ self.screen = SessionGlobals(self)
+
for p in plugins.getPlugins(PluginDescriptor.WHERE_SESSIONSTART):
p(reason=0, session=self)
from Components.config import ConfigSubsection, ConfigText, config
from Components.Converter.Converter import Converter
-from Components.Sources.Source import Source
+from Components.Sources.Source import Source, ObsoleteSource
from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS
from Tools.Import import my_import
for n in name:
myscreen, path = lookupScreen(n)
if myscreen is not None:
+ # use this name for debug output
+ name = n
break
# otherwise try embedded skin
myscreen = myscreen or getattr(screen, "parsedSkin", None)
-
+
# try uncompiled embedded skin
if myscreen is None and getattr(screen, "skin", None):
myscreen = screen.parsedSkin = xml.dom.minidom.parseString(screen.skin).childNodes[0]
-
+
assert myscreen is not None, "no skin for screen '" + repr(name) + "' found!"
screen.skinAttributes = [ ]
collectAttributes(attributes, widget, skin_path_prefix, ignore=['name'])
elif wsource:
# get corresponding source
- source = screen.get(wsource)
- if source is None:
- if wsource == "fake":
- if screen.get("fake"):
- raise SkinError("screen '" + name + "has a element named 'fake' but its not a Source!!")
- source = Source()
- screen["fake"] = source
+
+ while True: # until we found a non-obsolete source
+
+ # parse our current "wsource", which might specifiy a "related screen" before the dot,
+ # for example to reference a parent, global or session-global screen.
+ scr = screen
+
+ # resolve all path components
+ path = wsource.split('.')
+ while len(path) > 1:
+ scr = screen.getRelatedScreen(path[0])
+ if scr is None:
+ print wsource
+ print name
+ raise SkinError("specified related screen '" + wsource + "' was not found in screen '" + name + "'!")
+ path = path[1:]
+
+ # resolve the source.
+ source = scr.get(path[0])
+ if isinstance(source, ObsoleteSource):
+ # however, if we found an "obsolete source", issue warning, and resolve the real source.
+ print "WARNING: SKIN '%s' USES OBSOLETE SOURCE '%s', USE '%s' INSTEAD!" % (name, wsource, source.new_source)
+ print "OBSOLETE SOURCE WILL BE REMOVED %s, PLEASE UPDATE!" % (source.removal_date)
+ if source.description:
+ print source.description
+
+ wsource = source.new_source
else:
- raise SkinError("source '" + wsource + "' was not found in screen '" + name + "'!")
+ # otherwise, use that source.
+ break
+
+ if source is None:
+ raise SkinError("source '" + wsource + "' was not found in screen '" + name + "'!")
wrender = widget.getAttribute('render')
c = converter_class(parms)
c.connect(source)
else:
- print "reused conveter!"
+ print "reused converter!"
source = c