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
23 #special cases to prevent to fast resets/inits
24 if self.lastQuery == 0:
26 elif self.lastQuery == 1:
29 def __init__(self, session, slot, query):
30 Screen.__init__(self, session)
32 self["message"] = Label(_("waiting for CI..."))
34 self["actions"] = ActionMap(["OkCancelActions"],
39 self.lastQuery = query
42 self.Timer.timeout.get().append(self.TimerCheck)
45 self.Timer.start(1000) #block 1 second
47 eDVBCI_UI.getInstance().setReset(slot)
49 self.Timer.start(1000) #block 1 second
51 eDVBCI_UI.getInstance().initialize(slot)
52 if query == 2: #mmi-open
54 eDVBCI_UI.getInstance().startMMI(slot)
55 if query == 3: #mmi-answer
57 eDVBCI_UI.getInstance().answerMMI(slot, 0, 0)
60 class CiEntryList(HTMLComponent, GUIComponent):
61 def __init__(self, list):
62 GUIComponent.__init__(self)
63 self.l = eListboxPythonConfigContent()
65 self.l.setSeperation(100)
69 selection = self.getCurrent()
71 self.invalidateCurrent()
73 def handleKey(self, key):
74 #not every element got an .handleKey
76 selection = self.getCurrent()
77 selection[1].handleKey(key)
78 self.invalidateCurrent()
83 return self.l.getCurrentSelection()
85 def getCurrentIndex(self):
86 return self.l.getCurrentSelectionIndex()
88 def invalidateCurrent(self):
89 self.l.invalidateEntry(self.l.getCurrentSelectionIndex())
91 def GUIcreate(self, parent):
92 self.instance = eListbox(parent)
93 self.instance.setContent(self.l)
96 self.instance.setContent(None)
100 def addEntry(self, list, entry, index):
101 if entry[0] == "TEXT": #handle every item (text / pin only?)
102 list.append( (entry[1], index) )
103 if entry[0] == "PIN":
106 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (entry[1], "-")))
109 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (entry[1], "")))
111 self.pin = getConfigListEntry(entry[2],x)
112 list.append( self.pin )
114 def okbuttonClick(self):
115 if self.tag == 0: #ENQ
116 print "enq- answer pin:" + str(self.pin[1].parent.value[0])
117 #ci[self.slotid]->getInstance().mmiEnqAnswer(self.pin[1].parent.value[0])
118 elif self.tag == 1: #Menu
119 print "answer - actual:" + str(self["entries"].getCurrentIndex())
120 #ci[self.slotid]->getInstance().mmiAnswer(self["entries"].getCurrentIndex())
121 elif self.tag == 2: #List
122 print "answer on List - send 0"
123 #ci[self.slotid]->getInstance().mmiAnswer(0)
126 def keyNumberGlobal(self, number):
127 self["entries"].handleKey(config.key[str(number)])
130 self["entries"].handleKey(config.key["prevElement"])
133 self["entries"].handleKey(config.key["nextElement"])
139 #tag is 0=ENQ 1=Menu 2=List
140 def __init__(self, session, slotid, tag, title, subtitle, bottom, entries):
141 Screen.__init__(self, session)
145 self["title"] = Label(title)
146 self["subtitle"] = Label(subtitle)
147 self["bottom"] = Label(bottom)
151 for entry in entries:
152 self.addEntry(list, entry, cnt)
154 self["entries"] = CiEntryList(list)
156 self["actions"] = NumberActionMap(["SetupActions"],
158 "ok": self.okbuttonClick,
159 "cancel": self.keyCancel,
161 "left": self.keyLeft,
162 "right": self.keyRight,
163 "1": self.keyNumberGlobal,
164 "2": self.keyNumberGlobal,
165 "3": self.keyNumberGlobal,
166 "4": self.keyNumberGlobal,
167 "5": self.keyNumberGlobal,
168 "6": self.keyNumberGlobal,
169 "7": self.keyNumberGlobal,
170 "8": self.keyNumberGlobal,
171 "9": self.keyNumberGlobal,
172 "0": self.keyNumberGlobal
176 class CiSelection(Screen):
177 def createMenu(self):
179 self.list.append( ("Reset", 0) )
180 self.list.append( ("Init", 1) )
182 self.state = eDVBCI_UI.getInstance().getState(0)
183 if self.state == 0: #no module
184 self.list.append( ("no module found", 2) )
185 elif self.state == 1: #module in init
186 self.list.append( ("init module", 2) )
187 elif self.state == 2: #module ready
189 appname = eDVBCI_UI.getInstance().getAppName(0)
190 self.list.append( (appname, 2) )
192 self["entries"] .list = self.list
193 self["entries"] .l.setList(self.list)
195 def TimerCheck(self):
196 state = eDVBCI_UI.getInstance().getState(0)
197 if self.state != state:
198 print "something happens"
202 def okbuttonClick(self):
204 #FIXME: find out the correct slot
205 self.session.open(CiWait, 0, self["entries"].getCurrent()[1])
207 #generate menu / list
209 #list.append( ("TEXT", "CA-Info") )
210 #list.append( ("TEXT", "Card Status") )
211 #list.append( ("PIN", 6, "Card Pin", 1) )
212 #self.session.open(CiMmi, 0, 0, "Wichtiges CI", "Mainmenu", "Footer", list)
218 def __init__(self, session):
219 #FIXME support for one ci only
220 Screen.__init__(self, session)
222 self["actions"] = ActionMap(["OkCancelActions"],
224 "ok": self.okbuttonClick,
225 "cancel": self.cancel
229 self["entries"] = CiEntryList(list)
232 self.Timer = eTimer()
233 self.Timer.timeout.get().append(self.TimerCheck)
234 self.Timer.start(1000)