2 from Components.MenuList import MenuList
3 from Components.ActionMap import ActionMap
4 from Components.ActionMap import NumberActionMap
5 from Components.Header import Header
6 from Components.Button import Button
7 from Components.Label import Label
9 from Components.HTMLComponent import *
10 from Components.GUIComponent import *
11 from Components.config import *
15 #use this class to synchronize all ci to/from user communications
18 #stop pending requests
21 if self.lastQuery == 2:
22 eDVBCI_UI.getInstance().stopMMI(self.slot)
27 #special cases to prevent to fast resets/inits
28 if self.lastQuery == 0:
30 elif self.lastQuery == 1:
33 if eDVBCI_UI.getInstance().getState(self.slot) != 2: #module removed
36 def __init__(self, session, slot, query):
37 Screen.__init__(self, session)
39 self["message"] = Label(_("waiting for CI..."))
41 self["actions"] = ActionMap(["OkCancelActions"],
46 self.lastQuery = query
50 self.Timer.timeout.get().append(self.TimerCheck)
51 self.Timer.start(1000) #check and block 1 second
55 eDVBCI_UI.getInstance().setReset(slot)
58 eDVBCI_UI.getInstance().initialize(slot)
59 if query == 2: #mmi-open
61 eDVBCI_UI.getInstance().startMMI(slot)
62 if query == 3: #mmi-answer
64 eDVBCI_UI.getInstance().answerMMI(slot, 0, 0)
67 class CiEntryList(HTMLComponent, GUIComponent):
68 def __init__(self, list):
69 GUIComponent.__init__(self)
70 self.l = eListboxPythonConfigContent()
72 self.l.setSeperation(100)
76 selection = self.getCurrent()
78 self.invalidateCurrent()
80 def handleKey(self, key):
81 #not every element got an .handleKey
83 selection = self.getCurrent()
84 selection[1].handleKey(key)
85 self.invalidateCurrent()
90 return self.l.getCurrentSelection()
92 def getCurrentIndex(self):
93 return self.l.getCurrentSelectionIndex()
95 def invalidateCurrent(self):
96 self.l.invalidateEntry(self.l.getCurrentSelectionIndex())
98 def GUIcreate(self, parent):
99 self.instance = eListbox(parent)
100 self.instance.setContent(self.l)
103 self.instance.setContent(None)
107 def addEntry(self, list, entry, index):
108 if entry[0] == "TEXT": #handle every item (text / pin only?)
109 list.append( (entry[1], index) )
110 if entry[0] == "PIN":
113 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (entry[1], "-")))
116 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (entry[1], "")))
118 self.pin = getConfigListEntry(entry[2],x)
119 list.append( self.pin )
121 def okbuttonClick(self):
122 if self.tag == 0: #ENQ
123 print "enq- answer pin:" + str(self.pin[1].parent.value[0])
124 #ci[self.slotid]->getInstance().mmiEnqAnswer(self.pin[1].parent.value[0])
125 elif self.tag == 1: #Menu
126 print "answer - actual:" + str(self["entries"].getCurrentIndex())
127 #ci[self.slotid]->getInstance().mmiAnswer(self["entries"].getCurrentIndex())
128 elif self.tag == 2: #List
129 print "answer on List - send 0"
130 #ci[self.slotid]->getInstance().mmiAnswer(0)
133 def keyNumberGlobal(self, number):
134 self["entries"].handleKey(config.key[str(number)])
137 self["entries"].handleKey(config.key["prevElement"])
140 self["entries"].handleKey(config.key["nextElement"])
146 #tag is 0=ENQ 1=Menu 2=List
147 def __init__(self, session, slotid, tag, title, subtitle, bottom, entries):
148 Screen.__init__(self, session)
152 self["title"] = Label(title)
153 self["subtitle"] = Label(subtitle)
154 self["bottom"] = Label(bottom)
158 for entry in entries:
159 self.addEntry(list, entry, cnt)
161 self["entries"] = CiEntryList(list)
163 self["actions"] = NumberActionMap(["SetupActions"],
165 "ok": self.okbuttonClick,
166 "cancel": self.keyCancel,
168 "left": self.keyLeft,
169 "right": self.keyRight,
170 "1": self.keyNumberGlobal,
171 "2": self.keyNumberGlobal,
172 "3": self.keyNumberGlobal,
173 "4": self.keyNumberGlobal,
174 "5": self.keyNumberGlobal,
175 "6": self.keyNumberGlobal,
176 "7": self.keyNumberGlobal,
177 "8": self.keyNumberGlobal,
178 "9": self.keyNumberGlobal,
179 "0": self.keyNumberGlobal
183 class CiSelection(Screen):
184 def createMenu(self):
186 self.list.append( ("Reset", 0) )
187 self.list.append( ("Init", 1) )
189 self.state = eDVBCI_UI.getInstance().getState(0)
190 if self.state == 0: #no module
191 self.list.append( ("no module found", 2) )
192 elif self.state == 1: #module in init
193 self.list.append( ("init module", 2) )
194 elif self.state == 2: #module ready
196 appname = eDVBCI_UI.getInstance().getAppName(0)
197 self.list.append( (appname, 2) )
199 self["entries"] .list = self.list
200 self["entries"] .l.setList(self.list)
202 def TimerCheck(self):
203 state = eDVBCI_UI.getInstance().getState(0)
204 if self.state != state:
205 print "something happens"
209 def okbuttonClick(self):
211 #FIXME: find out the correct slot
212 self.session.open(CiWait, 0, self["entries"].getCurrent()[1])
214 #generate menu / list
216 #list.append( ("TEXT", "CA-Info") )
217 #list.append( ("TEXT", "Card Status") )
218 #list.append( ("PIN", 6, "Card Pin", 1) )
219 #self.session.open(CiMmi, 0, 0, "Wichtiges CI", "Mainmenu", "Footer", list)
225 def __init__(self, session):
226 #FIXME support for one ci only
227 Screen.__init__(self, session)
229 self["actions"] = ActionMap(["OkCancelActions"],
231 "ok": self.okbuttonClick,
232 "cancel": self.cancel
236 self["entries"] = CiEntryList(list)
239 self.Timer = eTimer()
240 self.Timer.timeout.get().append(self.TimerCheck)
241 self.Timer.start(1000)