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 Tools.Directories import InitFallbackFiles
21 eDVBDB.getInstance().reloadBouquets()
24 from twisted.internet import e2reactor
27 from twisted.internet import reactor
35 # initialize autorun plugins and plugin menu entries
36 from Components.PluginComponent import plugins
37 plugins.getPluginList(runAutostartPlugins=True)
38 from Screens.Wizard import wizardManager
39 from Screens.StartWizard import *
40 from Screens.TutorialWizard import *
41 from Tools.BoundFunction import boundFunction
45 def dump(dir, p = ""):
46 if isinstance(dir, dict):
47 for (entry, val) in dir.items():
48 dump(val, p + "(dict)/" + entry)
49 if hasattr(dir, "__dict__"):
50 for name, value in dir.__dict__.items():
51 if not had.has_key(str(value)):
53 dump(value, p + "/" + str(name))
55 print p + "/" + str(name) + ":" + str(dir.__class__) + "(cycle)"
57 print p + ":" + str(dir)
59 # + ":" + str(dir.__class__)
64 def create(self, screen): pass
68 class HTMLOutputDevice(OutputDevice):
69 def create(self, comp):
70 print comp.produceHTML()
72 html = HTMLOutputDevice()
74 class GUIOutputDevice(OutputDevice):
76 def create(self, comp, desktop):
77 comp.createGUIScreen(self.parent, desktop)
82 self.delayTimer = eTimer()
83 self.delayTimer.timeout.get().append(self.processDelay)
85 self.currentDialog = None
87 self.dialogStack = [ ]
89 def processDelay(self):
92 callback = self.currentDialog.callback
94 retval = self.currentDialog.returnValue
96 if self.currentDialog.isTmp:
97 self.currentDialog.doClose()
98 # dump(self.currentDialog)
99 del self.currentDialog
101 del self.currentDialog.callback
104 if callback is not None:
108 c = self.currentDialog
111 # when execBegin opened a new dialog, don't bother showing the old one.
112 if c == self.currentDialog:
116 self.currentDialog.execEnd()
117 self.currentDialog.hide()
119 def create(self, screen, arguments):
120 # creates an instance of 'screen' (which is a class)
122 return screen(self, *arguments)
124 errstr = "Screen %s(%s): %s" % (str(screen), str(arguments), sys.exc_info()[0])
126 traceback.print_exc(file=sys.stdout)
130 def instantiateDialog(self, screen, *arguments):
134 dlg = self.create(screen, arguments)
136 print 'EXCEPTION IN DIALOG INIT CODE, ABORTING:'
138 traceback.print_exc(file=sys.stdout)
146 readSkin(dlg, None, dlg.skinName, self.desktop)
148 # create GUI view of this dialog
149 assert self.desktop != None
152 for (key, value) in dlg.skinAttributes:
153 if key == "zPosition":
156 dlg.instance = eWindow(self.desktop, z)
157 applyAllAttributes(dlg.instance, self.desktop, dlg.skinAttributes)
158 gui = GUIOutputDevice()
159 gui.parent = dlg.instance
160 gui.create(dlg, self.desktop)
164 def pushCurrent(self):
165 if self.currentDialog:
166 self.dialogStack.append(self.currentDialog)
169 def popCurrent(self):
170 if len(self.dialogStack):
171 self.currentDialog = self.dialogStack.pop()
174 self.currentDialog = None
176 def execDialog(self, dialog):
178 self.currentDialog = dialog
179 self.currentDialog.isTmp = False
180 self.currentDialog.callback = None # would cause re-entrancy problems.
183 def openWithCallback(self, callback, screen, *arguments):
184 dlg = self.open(screen, *arguments)
185 dlg.callback = callback
187 def open(self, screen, *arguments):
189 dlg = self.currentDialog = self.instantiateDialog(screen, *arguments)
195 def keyEvent(self, code):
196 print "code " + str(code)
198 def close(self, *retval):
199 self.currentDialog.returnValue = retval
200 self.delayTimer.start(0, 1)
202 from Screens.Volume import Volume
203 from Screens.Mute import Mute
204 from GlobalActions import globalActionMap
205 from Components.config import ConfigSubsection, configSequence, configElement, configsequencearg
207 #TODO .. move this to a own .py file
209 """Volume control, handles volUp, volDown, volMute actions and display
210 a corresponding dialog"""
211 def __init__(self, session):
212 global globalActionMap
213 globalActionMap.actions["volumeUp"]=self.volUp
214 globalActionMap.actions["volumeDown"]=self.volDown
215 globalActionMap.actions["volumeMute"]=self.volMute
217 config.audio = ConfigSubsection()
218 config.audio.volume = configElement("config.audio.volume", configSequence, [100], configsequencearg.get("INTEGER", (0, 100)))
220 self.volumeDialog = session.instantiateDialog(Volume)
221 self.muteDialog = session.instantiateDialog(Mute)
223 self.hideVolTimer = eTimer()
224 self.hideVolTimer.timeout.get().append(self.volHide)
226 vol = config.audio.volume.value[0]
227 self.volumeDialog.setValue(vol)
228 eDVBVolumecontrol.getInstance().setVolume(vol, vol)
231 config.audio.volume.value = eDVBVolumecontrol.getInstance().getVolume()
232 config.audio.volume.save()
235 if (eDVBVolumecontrol.getInstance().isMuted()):
237 eDVBVolumecontrol.getInstance().volumeUp()
238 self.volumeDialog.show()
239 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
241 self.hideVolTimer.start(3000, True)
244 if (eDVBVolumecontrol.getInstance().isMuted()):
246 eDVBVolumecontrol.getInstance().volumeDown()
247 self.volumeDialog.show()
248 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
250 self.hideVolTimer.start(3000, True)
253 self.volumeDialog.hide()
256 eDVBVolumecontrol.getInstance().volumeToggleMute()
257 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
259 if (eDVBVolumecontrol.getInstance().isMuted()):
260 self.muteDialog.show()
262 self.muteDialog.hide()
266 session.desktop = getDesktop()
268 session.nav = Navigation()
270 screensToRun = wizardManager.getWizards()
271 screensToRun.append(Screens.InfoBar.InfoBar)
273 def runNextScreen(session, screensToRun, *result):
277 screen = screensToRun[0]
279 if len(screensToRun):
280 session.openWithCallback(boundFunction(runNextScreen, session, screensToRun[1:]), screen)
284 runNextScreen(session, screensToRun)
286 CONNECT(keyPressedSignal(), session.keyEvent)
288 vol = VolumeControl(session)
294 session.nav.shutdown()
299 keymapparser.readKeymap()
301 skin.loadSkin(getDesktop())
303 import Components.InputDevice
304 Components.InputDevice.InitInputDevices()
306 import Components.AVSwitch
307 Components.AVSwitch.InitAVSwitch()
309 import Components.RecordingConfig
310 Components.RecordingConfig.InitRecordingConfig()
312 import Components.UsageConfig
313 Components.UsageConfig.InitUsageConfig()
315 import Components.Network
316 Components.Network.InitNetwork()
318 import Components.Lcd
319 Components.Lcd.InitLcd()
321 import Components.SetupDevices
322 Components.SetupDevices.InitSetupDevices()
324 import Components.RFmod
325 Components.RFmod.InitRFmod()
327 import Components.NimManager
329 # first, setup a screen
332 plugins.getPluginList(runAutoendPlugins=True)
334 print 'EXCEPTION IN PYTHON STARTUP CODE:'
336 traceback.print_exc(file=sys.stdout)