4 from Components.Language import language
12 import ServiceReference
14 from Navigation import Navigation
16 from skin import readSkin, applyAllAttributes
18 from Components.config import configfile
19 from Screens.Wizard import wizardManager
20 from Screens.StartWizard import *
21 from Screens.TutorialWizard import *
22 from Tools.BoundFunction import boundFunction
23 from Tools.Directories import InitFallbackFiles
25 eDVBDB.getInstance().reloadBouquets()
29 def dump(dir, p = ""):
30 if isinstance(dir, dict):
31 for (entry, val) in dir.items():
32 dump(val, p + "(dict)/" + entry)
33 if hasattr(dir, "__dict__"):
34 for name, value in dir.__dict__.items():
35 if not had.has_key(str(value)):
37 dump(value, p + "/" + str(name))
39 print p + "/" + str(name) + ":" + str(dir.__class__) + "(cycle)"
41 print p + ":" + str(dir)
43 # + ":" + str(dir.__class__)
48 def create(self, screen): pass
52 class HTMLOutputDevice(OutputDevice):
53 def create(self, comp):
54 print comp.produceHTML()
56 html = HTMLOutputDevice()
58 class GUIOutputDevice(OutputDevice):
60 def create(self, comp, desktop):
61 comp.createGUIScreen(self.parent, desktop)
66 self.delayTimer = eTimer()
67 self.delayTimer.timeout.get().append(self.processDelay)
69 self.currentDialog = None
71 self.dialogStack = [ ]
73 def processDelay(self):
76 callback = self.currentDialog.callback
78 retval = self.currentDialog.returnValue
80 if self.currentDialog.isTmp:
81 self.currentDialog.doClose()
82 # dump(self.currentDialog)
83 del self.currentDialog
85 del self.currentDialog.callback
88 if callback is not None:
92 c = self.currentDialog
95 # when execBegin opened a new dialog, don't bother showing the old one.
96 if c == self.currentDialog:
100 self.currentDialog.execEnd()
101 self.currentDialog.instance.hide()
103 def create(self, screen, arguments):
104 # creates an instance of 'screen' (which is a class)
106 return screen(self, *arguments)
108 errstr = "Screen %s(%s): %s" % (str(screen), str(arguments), sys.exc_info()[0])
110 traceback.print_exc(file=sys.stdout)
114 def instantiateDialog(self, screen, *arguments):
118 dlg = self.create(screen, arguments)
120 print 'EXCEPTION IN DIALOG INIT CODE, ABORTING:'
122 traceback.print_exc(file=sys.stdout)
130 readSkin(dlg, None, dlg.skinName, self.desktop)
132 # create GUI view of this dialog
133 assert self.desktop != None
134 dlg.instance = eWindow(self.desktop)
135 applyAllAttributes(dlg.instance, self.desktop, dlg.skinAttributes)
136 gui = GUIOutputDevice()
137 gui.parent = dlg.instance
138 gui.create(dlg, self.desktop)
142 def pushCurrent(self):
143 if self.currentDialog:
144 self.dialogStack.append(self.currentDialog)
147 def popCurrent(self):
148 if len(self.dialogStack):
149 self.currentDialog = self.dialogStack.pop()
152 self.currentDialog = None
154 def execDialog(self, dialog):
156 self.currentDialog = dialog
157 self.currentDialog.isTmp = False
158 self.currentDialog.callback = None # would cause re-entrancy problems.
161 def openWithCallback(self, callback, screen, *arguments):
162 dlg = self.open(screen, *arguments)
163 dlg.callback = callback
165 def open(self, screen, *arguments):
167 dlg = self.currentDialog = self.instantiateDialog(screen, *arguments)
173 def keyEvent(self, code):
174 print "code " + str(code)
176 def close(self, *retval):
177 self.currentDialog.returnValue = retval
178 self.delayTimer.start(0, 1)
182 session.desktop = getDesktop()
184 session.nav = Navigation()
186 screensToRun = wizardManager.getWizards()
187 screensToRun.append(Screens.InfoBar.InfoBar)
189 def runNextScreen(session, screensToRun, *result):
193 screen = screensToRun[0]
195 if len(screensToRun):
196 session.openWithCallback(boundFunction(runNextScreen, session, screensToRun[1:]), screen)
200 runNextScreen(session, screensToRun)
202 CONNECT(keyPressedSignal(), session.keyEvent)
208 session.nav.shutdown()
213 keymapparser.readKeymap()
215 skin.loadSkin(getDesktop())
217 import Components.InputDevice
218 Components.InputDevice.InitInputDevices()
220 import Components.AVSwitch
221 Components.AVSwitch.InitAVSwitch()
223 import Components.RecordingConfig
224 Components.RecordingConfig.InitRecordingConfig()
226 import Components.Network
227 Components.Network.InitNetwork()
229 import Components.Lcd
230 Components.Lcd.InitLcd()
232 import Components.SetupDevices
233 Components.SetupDevices.InitSetupDevices()
235 import Components.RFmod
236 Components.RFmod.InitRFmod()
238 import Components.NimManager
240 # first, setup a screen
244 print 'EXCEPTION IN PYTHON STARTUP CODE:'
246 traceback.print_exc(file=sys.stdout)