HDMICEC : add new plugin
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / RemoteControlCode / plugin.py
1 from Screens.Screen import Screen
2 from Components.ConfigList import ConfigListScreen
3 from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigSelection
4 from Components.ActionMap import ActionMap
5 from Screens.MessageBox import MessageBox
6 from Components.Sources.StaticText import StaticText
7 from Plugins.Plugin import PluginDescriptor
8 from Tools.Directories import fileExists
9 from enigma import eTimer
10
11 config.plugins.remotecontrolcode = ConfigSubsection()
12 config.plugins.remotecontrolcode.systemcode = ConfigSelection(default = "2", choices = 
13         [ ("1", "1 "), ("2", "2 "), ("3", "3 "), ("4", "4 ") ] )
14
15 class RemoteControlCodeInit:
16         def __init__(self):
17                 self.setSystemCode(int(config.plugins.remotecontrolcode.systemcode.value))
18
19         def setSystemCode(self, type = 2):
20                 if not fileExists("/proc/stb/fp/remote_code"):
21                         return -1
22                 print "<RemoteControlCode> Write Remote Control Code : %d" % type
23                 f = open("/proc/stb/fp/remote_code", "w")
24                 f.write("%d" % type)
25                 f.close()
26                 return 0
27
28         def getModel(self):
29                 if fileExists("/proc/stb/info/vumodel"):
30                         vumodel = open("/proc/stb/info/vumodel")
31                         info=vumodel.read().strip()
32                         vumodel.close()
33                         if info in ["uno", "ultimo"]:
34                                 return True
35                         else:
36                                 return False
37                 else:
38                         return False
39
40 class RemoteControlCode(Screen,ConfigListScreen,RemoteControlCodeInit):
41         skin = """
42                         <screen name="RemoteControlCode" position="center,center" size="560,300" title="Remote Control System Code Setting" >
43                         <ePixmap pixmap="Vu_HD/buttons/red.png" position="10,10" size="25,25" alphatest="on" />
44                         <ePixmap pixmap="Vu_HD/buttons/green.png" position="290,10" size="25,25" alphatest="on" />
45                         <widget source="key_red" render="Label" position="40,10" zPosition="1" size="140,25" font="Regular;20" halign="center" valign="center" transparent="1" />
46                         <widget source="key_green" render="Label" position="320,10" zPosition="1" size="140,25" font="Regular;20" halign="center" valign="center" transparent="1" />
47                         <widget name="config" zPosition="2" position="5,50" size="550,200" scrollbarMode="showOnDemand" transparent="1" />
48                         </screen>"""
49
50         def __init__(self,session):
51                 Screen.__init__(self,session)
52                 self.session = session
53                 self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ],
54                 {
55                         "ok": self.keySave,
56                         "cancel": self.keyCancel,
57                         "red": self.keyCancel,
58                         "green": self.keySave,
59                 }, -2)
60                 self.list = []
61                 ConfigListScreen.__init__(self, self.list,session = self.session)
62                 self["key_red"] = StaticText(_("Cancel"))
63                 self["key_green"] = StaticText(_("Save"))
64                 self.createSetup()
65                 self.onLayoutFinish.append(self.checkModel)
66                 self.checkModelTimer = eTimer()
67                 self.checkModelTimer.callback.append(self.invalidmodel)
68
69         def checkModel(self):
70                 if not self.getModel():
71                         self.checkModelTimer.start(1000,True)
72
73         def invalidmodel(self):
74                         self.session.openWithCallback(self.close, MessageBox, _("This Plugin only support for UNO/ULTIMO"), MessageBox.TYPE_ERROR)
75
76         def createSetup(self):
77                 self.list = []
78                 self.rcsctype = getConfigListEntry(_("Remote Control System Code"), config.plugins.remotecontrolcode.systemcode)
79                 self.list.append( self.rcsctype )
80                 self["config"].list = self.list
81                 self["config"].l.setList(self.list)
82
83         def keySave(self):
84                 print "<RemoteControlCode> Selected System Code : ",config.plugins.remotecontrolcode.systemcode.value
85                 ret = self.setSystemCode(int(config.plugins.remotecontrolcode.systemcode.value))
86                 if ret == -1:
87                         self.restoreCode()
88                         self.session.openWithCallback(self.close, MessageBox, _("FILE NOT EXIST : /proc/stb/fp/remote_code"), MessageBox.TYPE_ERROR)
89                 else:
90                         self.session.openWithCallback(self.MessageBoxConfirmCodeCallback, MessageBoxConfirmCode, _("The remote control code will be reset to previous setting"), MessageBox.TYPE_YESNO, timeout = 10, default = False)
91
92         def restoreCode(self):
93                 for x in self["config"].list:
94                         x[1].cancel()
95
96         def MessageBoxConfirmCodeCallback(self,ret):
97                 if ret:
98                         ConfigListScreen.keySave(self)
99                 else:
100                         self.restoreCode()
101                         self.setSystemCode(int(config.plugins.remotecontrolcode.systemcode.value))
102
103 class MessageBoxConfirmCode(MessageBox):
104         skin = """
105                 <screen position="center,center" size="600,10" title="Message">
106                 <widget name="text" position="65,8" size="420,0" font="Regular;22" />
107                 <widget name="ErrorPixmap" pixmap="Vu_HD/icons/input_error.png" position="5,5" size="53,53" alphatest="blend" />
108                 <widget name="QuestionPixmap" pixmap="Vu_HD/icons/input_question.png" position="5,5" size="53,53" alphatest="blend" />
109                 <widget name="InfoPixmap" pixmap="Vu_HD/icons/input_info.png" position="5,5" size="53,53" alphatest="blend" />
110                 <widget name="list" position="100,100" size="380,375" transparent="1" backgroundColor="darkgrey" />
111                 <applet type="onLayoutFinish">
112 # this should be factored out into some helper code, but currently demonstrates applets.
113 from enigma import eSize, ePoint
114
115 orgwidth = self.instance.size().width()
116 orgpos = self.instance.position()
117 textsize = self[&quot;text&quot;].getSize()
118
119 # y size still must be fixed in font stuff...
120 textsize = (textsize[0] + 50, textsize[1] + 50)
121 offset = 0
122 if self.type == self.TYPE_YESNO:
123         offset = 60
124 wsizex = textsize[0] + 60
125 wsizey = textsize[1] + offset
126 if (280 &gt; wsizex):
127         wsizex = 280
128 wsize = (wsizex, wsizey)
129
130
131 # resize
132 self.instance.resize(eSize(*wsize))
133
134 # resize label
135 self[&quot;text&quot;].instance.resize(eSize(*textsize))
136
137 # move list
138 listsize = (wsizex, 50)
139 self[&quot;list&quot;].instance.move(ePoint(0, textsize[1]))
140 self[&quot;list&quot;].instance.resize(eSize(*listsize))
141
142 # center window
143 newwidth = wsize[0]
144 self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
145                 </applet>
146         </screen>"""
147
148         def __init__(self, session, text, type = MessageBox.TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True, msgBoxID = None):
149                 MessageBox.__init__(self,session,text,type,timeout,close_on_any_key,default,enable_input,msgBoxID)
150                 if type == MessageBox.TYPE_YESNO:
151                         self.list = [ (_("Keep"), 0), (_("Restore"), 1) ]
152                         self["list"].setList(self.list)
153
154         def timerTick(self):
155                 if self.execing:
156                         self.timeout -= 1
157                         self["text"].setText(self.text + " in %d seconds." %self.timeout)
158                         if self.timeout == 0:
159                                 self.timer.stop()
160                                 self.timerRunning = False
161                                 self.timeoutCallback()
162
163         def move(self, direction):
164                 if self.close_on_any_key:
165                         self.close(True)
166                 self["list"].instance.moveSelection(direction)
167                 if self.list:
168                         self["selectedChoice"].setText(self["list"].getCurrent()[0])
169 #               self.stopTimer()
170
171         def timeoutCallback(self):
172                 self.close(False)
173
174 def main(session, **kwargs):
175         session.open(RemoteControlCode)
176
177 def Plugins(**kwargs):
178         return [PluginDescriptor(name=_("RemoteControlCode"), description="setup Remote Control System Code Type", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = True, fnc=main)]
179
180 remotecontrolcodeinit = RemoteControlCodeInit()