1 from Screens.Screen import Screen
2 from Plugins.Plugin import PluginDescriptor
4 from enigma import eTimer
6 from Components.ActionMap import ActionMap
7 from Components.Label import Label
8 from Components.Pixmap import Pixmap
9 from Screens.MessageBox import MessageBox
10 from Screens.Setup import SetupSummary
11 from Components.ConfigList import ConfigListScreen
12 from Components.config import getConfigListEntry, config
13 from VideoWizard import VideoWizard
14 from Components.config import config
16 from VideoHardware import video_hw
18 class VideoSetup(Screen, ConfigListScreen):
19 def __init__(self, session, hw):
20 Screen.__init__(self, session)
21 self.skinName = "Setup"
22 self.setup_title = "Videomode Setup"
24 self.onChangedEntry = [ ]
26 # handle hotplug by re-creating setup
27 self.onShow.append(self.startHotplug)
28 self.onHide.append(self.stopHotplug)
31 ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changedEntry)
33 self["actions"] = ActionMap(["SetupActions"],
35 "cancel": self.keyCancel,
39 self["title"] = Label(_("A/V Settings"))
41 self["oktext"] = Label(_("OK"))
42 self["canceltext"] = Label(_("Cancel"))
44 self["cancel"] = Pixmap()
47 self.grabLastGoodMode()
49 def startHotplug(self):
50 self.hw.on_hotplug.append(self.createSetup)
52 def stopHotplug(self):
53 self.hw.on_hotplug.remove(self.createSetup)
55 def createSetup(self):
56 level = config.usage.setup_level.index
59 self.list.append(getConfigListEntry(_("Video Output"), config.av.videoport))
61 # if we have modes for this port:
62 if config.av.videoport.value in config.av.videomode:
63 # add mode- and rate-selection:
64 self.list.append(getConfigListEntry(_("Mode"), config.av.videomode[config.av.videoport.value]))
65 self.list.append(getConfigListEntry(_("Refresh Rate"), config.av.videorate[config.av.videomode[config.av.videoport.value].value]))
67 # if config.av.videoport.value == "DVI":
68 # self.list.append(getConfigListEntry(_("Allow Unsupported Modes"), config.av.edid_override))
69 if config.av.videoport.value == "Scart":
70 self.list.append(getConfigListEntry(_("Color Format"), config.av.colorformat))
71 self.list.append(getConfigListEntry(_("Aspect Ratio"), config.av.aspectratio))
73 self.list.append(getConfigListEntry(_("WSS on 4:3"), config.av.wss))
76 self.list.append(getConfigListEntry(_("AC3 default"), config.av.defaultac3))
78 self["config"].list = self.list
79 self["config"].l.setList(self.list)
82 ConfigListScreen.keyLeft(self)
86 ConfigListScreen.keyRight(self)
89 def confirm(self, confirmed):
91 self.hw.setMode(*self.last_good)
95 def grabLastGoodMode(self):
96 port = config.av.videoport.value
97 mode = config.av.videomode[port].value
98 rate = config.av.videorate[mode].value
99 self.last_good = (port, mode, rate)
102 port = config.av.videoport.value
103 mode = config.av.videomode[port].value
104 rate = config.av.videorate[mode].value
105 if (port, mode, rate) != self.last_good:
106 self.hw.setMode(port, mode, rate)
107 self.session.openWithCallback(self.confirm, MessageBox, "Is this videomode ok?", MessageBox.TYPE_YESNO, timeout = 20, default = False)
112 def changedEntry(self):
113 for x in self.onChangedEntry:
116 def getCurrentEntry(self):
117 return self["config"].getCurrent()[0]
119 def getCurrentValue(self):
120 return str(self["config"].getCurrent()[1].getText())
122 def createSummary(self):
125 class VideomodeHotplug:
126 def __init__(self, hw):
130 self.hw.on_hotplug.append(self.hotplug)
133 self.hw.on_hotplug.remove(self.hotplug)
135 def hotplug(self, what):
136 print "hotplug detected on port '%s'" % (what)
137 port = config.av.videoport.value
138 mode = config.av.videomode[port].value
139 rate = config.av.videorate[mode].value
141 if not self.hw.isModeAvailable(port, mode, rate):
142 print "mode %s/%s/%s went away!" % (port, mode, rate)
143 modelist = self.hw.getModeList(port)
144 if not len(modelist):
145 print "sorry, no other mode is available (unplug?). Doing nothing."
147 mode = modelist[0][0]
148 rate = modelist[0][1]
149 print "setting %s/%s/%s" % (port, mode, rate)
150 self.hw.setMode(port, mode, rate)
155 global hotplug, video_hw
156 hotplug = VideomodeHotplug(video_hw)
164 def autostart(reason, session = None, **kwargs):
165 if session is not None:
166 global my_global_session
167 my_global_session = session
175 def videoSetupMain(session, **kwargs):
176 session.open(VideoSetup, video_hw)
178 def startSetup(menuid):
179 if menuid != "system":
182 return [(_("A/V Settings") + "...", videoSetupMain, "av_setup", 40)]
184 def Plugins(**kwargs):
186 # PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc = autostart),
187 PluginDescriptor(name=_("Video Setup"), description=_("Advanced Video Setup"), where = PluginDescriptor.WHERE_MENU, fnc=startSetup)
189 if config.misc.firstrun.value:
190 list.append(PluginDescriptor(name=_("Video Wizard"), where = PluginDescriptor.WHERE_WIZARD, fnc=VideoWizard))