74cec1111cfa87c655c43e290b1b9031e976d908
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / Videomode / plugin.py
1 from Screens.Screen import Screen
2 from Components.ConfigList import ConfigListScreen
3 from Components.ActionMap import NumberActionMap
4 from Components.config import config, ConfigNothing, ConfigBoolean, getConfigListEntry
5 from Components.Sources.StaticText import StaticText
6 from Components.SystemInfo import SystemInfo
7 from Plugins.Plugin import PluginDescriptor
8
9 from VideoHardware import video_hw
10
11 config.misc.videowizardenabled = ConfigBoolean(default = True)
12
13 class avSetupScreen(ConfigListScreen, Screen):
14         avSetupItems = [
15                 {"idx":1, "level":0, "text":"Video Output", "item":config.av.videoport},
16                 {"idx":2, "level":0, "text":"Mode", "item":config.av.videomode[config.av.videoport.value]},
17                 {"idx":3, "level":0, "text":"Refresh Rate", "item":config.av.videorate[config.av.videomode[config.av.videoport.value].value]},
18                 {"idx":4, "level":0, "text":"Aspect Ratio", "item":config.av.aspect},
19                 {"idx":5, "level":0, "text":"Display 4:3 content as", "item":config.av.policy_43},
20                 {"idx":6, "level":0, "text":"Display > 16:9 content as", "item":config.av.policy_169},
21                 {"idx":7, "level":0, "text":"Color Format", "item":config.av.colorformat},
22                 {"idx":8, "level":1, "text":"WSS on 4:3", "item":config.av.wss},
23                 {"idx":9, "level":1, "text":"Auto scart switching", "requires":"ScartSwitch", "item":config.av.vcrswitch},
24                 {"idx":0, "level":1, "text":"Dolby Digital default", "item":config.av.defaultac3},
25                 {"idx":0, "level":1, "text":"Dolby Digital downmix", "requires":"CanDownmixAC3", "item":config.av.downmix_ac3},
26                 {"idx":0, "level":1, "text":"General Dolby Digital delay(ms)", "item":config.av.generalAC3delay},
27                 {"idx":0, "level":1, "text":"General PCM delay(ms)", "item":config.av.generalPCMdelay},
28                 {"idx":0, "level":0, "text":"OSD visibility", "requires":"CanChangeOsdAlpha", "item":config.av.osd_alpha},
29                 {"idx":0, "level":0, "text":"Scaler sharpness", "item":config.av.scaler_sharpness},
30         ]
31
32         def __init__(self, session):
33                 Screen.__init__(self, session)
34                 # for the skin: first try a setup_avsetup, then Setup
35                 self.skinName = ["setup_avsetup", "Setup"]
36                 self.setup_title = _("A/V Settings")
37
38                 self.video_cfg = video_hw
39                 self.audio_cfg = [ ]
40
41                 self.onChangedEntry = [ ]
42
43                 # handle hotplug by re-createing setup
44                 self.onShow.append(self.startHotplug)
45                 self.onHide.append(self.stopHotplug)
46
47                 self.list = [ ]
48
49                 self["key_red"] = StaticText( _("Cancel"))
50                 self["key_green"] = StaticText( _("OK"))
51
52                 self["action"] = NumberActionMap(["SetupActions"],
53                         {
54                                 "cancel": self.keyCancel,
55                                 "save": self.keySave,
56                         }, -2)
57
58                 ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changedEntry)
59                 
60                 self.createScreen()
61
62                 self.onLayoutFinish.append(self.layoutFinished)
63         
64         def layoutFinished(self):
65                 self.setTitle(self.setup_title)
66         
67         # for summary:
68         def changedEntry(self):
69                 for x in self.onChangedEntry:
70                         x()
71         
72         def getCurrentEntry(self):
73                 return self["config"].getCurrent()[0]
74
75         def getCurrentValue(self):
76                 return str(self["config"].getCurrent()[1].getText())
77
78         def createSummary(self):
79                 from Screens.Setup import SetupSummary
80                 return SetupSummary
81         
82         def createScreen(self):
83                 self.list = [ ]
84                 self.audio_cfg = [ ]
85
86                 for x in self.avSetupItems:
87                         item_level = int(x.get("level", 0))
88                         if item_level > config.usage.setup_level.index:
89                                 continue
90
91                         requires = x.get("requires")
92                         if requires and not SystemInfo.get(requires, False):
93                                 continue
94
95                         item_text = _(x.get("text", "??").encode("UTF-8"))
96
97                         item = x.get("item", None)
98                         if item is None:
99                                 continue
100
101                         idx = x.get("idx", 0)
102                         if idx > 0:
103                                 if idx == 1: # Video Output
104                                         current_port = item.value
105                                 elif idx == 2: # Mode
106                                         item = config.av.videomode[current_port]
107                                         current_mode = item.value
108                                         # some modes (720p, 1080i, 1080p) are always widescreen.
109                                         force_wide = self.video_cfg.isWidescreenMode(current_mode)
110                                 elif idx == 3: # Refresh Rate
111                                         item = config.av.videorate[current_mode]
112                                         current_rate = item.value
113                                         if current_mode == "PC":
114                                                 item_text = _("Resolution")
115                                 elif idx == 4: # Aspect Ratio
116                                         current_aspect = item.value
117                                         if force_wide:
118                                                 continue
119                                 elif idx == 5: # Display 4:3 content as
120                                         if current_aspect == "auto" and not force_wide:
121                                                 continue
122                                         elif current_aspect == "4_3":
123                                                 continue
124                                 elif idx == 6: # Display 16:9 > content as
125                                         if current_aspect == "auto" and not force_wide:
126                                                 continue
127                                 # Color Format, WSS on 4:3, Auto scart switching
128                                 elif (idx == 7 or idx == 8 or idx == 9) and not current_port == "Scart":
129                                         continue
130                         if idx == 0 and item_level == 1: # audio
131                                 self.audio_cfg.append(item_text)
132
133                         # add to configlist
134                         if not isinstance(item, ConfigNothing):
135                                 self.list.append(getConfigListEntry(item_text, item))
136
137                 self["config"].setList(self.list)
138         
139         def keyLeft(self):
140                 ConfigListScreen.keyLeft(self)
141                 self.createScreen()
142                 # show current value on VFD
143                 if self.getCurrentEntry() not in self.audio_cfg:
144                         self.summaries[0]["SetupTitle"].text = self.getCurrentValue()
145         
146         def keyRight(self):
147                 ConfigListScreen.keyRight(self)
148                 self.createScreen()
149                 # show current value on VFD
150                 if self.getCurrentEntry() not in self.audio_cfg:
151                         self.summaries[0]["SetupTitle"].text = self.getCurrentValue()
152
153         def startHotplug(self):
154                 self.video_cfg.on_hotplug.append(self.createScreen)
155
156         def stopHotplug(self):
157                 self.video_cfg.on_hotplug.remove(self.createScreen)
158
159
160 def avSetupMain(session, **kwargs):
161         session.open(avSetupScreen)
162
163 def startAVsetup(menuid):
164         if menuid != "system":
165                 return []
166
167         return [( _("A/V Settings"), avSetupMain, "av_setup", 40)]
168
169 def startVideoWizard(*args, **kwargs):
170         from VideoWizard import VideoWizard
171         return VideoWizard(*args, **kwargs)
172
173 def Plugins(**kwargs):
174         plugin_list = [ 
175                 PluginDescriptor(
176                         name = "Videomode-K",
177                         description = "Videomode-K based videomode",
178                         where = PluginDescriptor.WHERE_MENU,
179                         needsRestart = False,
180                         fnc = startAVsetup)
181         ]
182
183         if config.misc.videowizardenabled.value:
184                 plugin_list.append(
185                         PluginDescriptor(
186                                 name = "Video Wizard",
187                                 where = PluginDescriptor.WHERE_WIZARD,
188                                 fnc=(0, startVideoWizard)
189                         )
190                 )
191         
192         return plugin_list
193