add tag-types (list/menu/enq)
[enigma2.git] / lib / python / Screens / Ci.py
1 from Screen import *
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
8
9 from Components.HTMLComponent import *
10 from Components.GUIComponent import *
11 from Components.config import *
12
13 from enigma import eListbox, eListboxPythonConfigContent
14
15 class CiEntryList(HTMLComponent, GUIComponent):
16         def __init__(self, list):
17                 GUIComponent.__init__(self)
18                 self.l = eListboxPythonConfigContent()
19                 self.l.setList(list)
20                 self.l.setSeperation(100)
21                 self.list = list
22
23         def toggle(self):
24                 selection = self.getCurrent()
25                 selection[1].toggle()
26                 self.invalidateCurrent()
27
28         def handleKey(self, key):
29                 #not every element got an .handleKey
30                 try:
31                         selection = self.getCurrent()
32                         selection[1].handleKey(key)
33                         self.invalidateCurrent()
34                 except: 
35                         pass    
36
37         def getCurrent(self):
38                 return self.l.getCurrentSelection()
39
40         def getCurrentIndex(self):
41                 return self.l.getCurrentSelectionIndex()
42
43         def invalidateCurrent(self):
44                 self.l.invalidateEntry(self.l.getCurrentSelectionIndex())
45
46         def GUIcreate(self, parent):
47                 self.instance = eListbox(parent)
48                 self.instance.setContent(self.l)
49
50         def GUIdelete(self):
51                 self.instance.setContent(None)
52                 self.instance = None
53
54 class CiMmi(Screen):
55         def addEntry(self, list, entry, index):
56                 if entry[0] == "TEXT":          #handle every item (text / pin only?)
57                         list.append( (entry[1], index) )
58                 if entry[0] == "PIN":
59                         if entry[3] == 1:
60                                 # masked pins:
61                                 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (entry[1], "-")))
62                         else:                           
63                                 # unmasked pins:
64                                 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (entry[1], "")))                 
65                                 
66                         self.pin = getConfigListEntry(entry[2],x)
67                         list.append( self.pin )
68
69         def okbuttonClick(self):
70                 if self.tag == 0:       #ENQ
71                         print "enq- answer pin:" +  str(self.pin[1].parent.value[0])
72                         #ci[self.slotid]->getInstance().mmiEnqAnswer(self.pin[1].parent.value[0])
73                 elif self.tag == 1:     #Menu
74                         print "answer - actual:" + str(self["entries"].getCurrentIndex())
75                         #ci[self.slotid]->getInstance().mmiAnswer(self["entries"].getCurrentIndex())
76                 elif self.tag == 2:     #List
77                         print "answer on List - send 0"
78                         #ci[self.slotid]->getInstance().mmiAnswer(0)
79                 self.close()
80
81         def keyNumberGlobal(self, number):
82                 self["entries"].handleKey(config.key[str(number)])
83
84         def keyLeft(self):
85                 self["entries"].handleKey(config.key["prevElement"])
86
87         def keyRight(self):
88                 self["entries"].handleKey(config.key["nextElement"])
89
90         def keyCancel(self):
91                 print "keyCancel"
92                 self.close()
93                 
94                 #tag is 0=ENQ 1=Menu 2=List
95         def __init__(self, session, slotid, tag, title, subtitle, bottom, entries):
96                 Screen.__init__(self, session)
97
98                 self.slotid = slotid
99                 self.tag = tag
100                 self["title"] = Label(title)
101                 self["subtitle"] = Label(subtitle)
102                 self["bottom"] = Label(bottom)
103                                 
104                 list = [ ]
105                 cnt = 0
106                 for entry in entries:
107                         self.addEntry(list, entry, cnt)
108                         cnt = cnt + 1
109                 self["entries"] = CiEntryList(list)
110
111                 self["actions"] = NumberActionMap(["SetupActions"],
112                         {
113                                 "ok": self.okbuttonClick,
114                                 "cancel": self.keyCancel,
115                                 #for PIN
116                                 "left": self.keyLeft,
117                                 "right": self.keyRight,
118                                 "1": self.keyNumberGlobal,
119                                 "2": self.keyNumberGlobal,
120                                 "3": self.keyNumberGlobal,
121                                 "4": self.keyNumberGlobal,
122                                 "5": self.keyNumberGlobal,
123                                 "6": self.keyNumberGlobal,
124                                 "7": self.keyNumberGlobal,
125                                 "8": self.keyNumberGlobal,
126                                 "9": self.keyNumberGlobal,
127                                 "0": self.keyNumberGlobal
128                         }, -1)
129
130 class CiSelection(Screen):
131         def okbuttonClick(self):
132         
133                 if self["entries"].getCurrent()[1] == 0:                #reset
134                         print "ci reset requested"
135                         pass
136                 if self["entries"].getCurrent()[1] == 1:                #init
137                         print "ci init requested"
138                         pass
139                 if self["entries"].getCurrent()[1] == 2:                #mmi open
140                         #ci->getInstance().mmiOpen() and wait for list of elments ???
141                         #generate menu / list
142                         list = [ ]
143                         list.append( ("TEXT", "CA-Info") )
144                         list.append( ("TEXT", "Card Status") )
145                         list.append( ("PIN", 6, "Card Pin", 1) )
146                         self.session.open(CiMmi, 0, 0, "Wichtiges CI", "Mainmenu", "Footer", list)
147                 
148         def __init__(self, session):
149                 #FIXME support for one ci only
150                 Screen.__init__(self, session)
151                 
152                 self["actions"] = ActionMap(["OkCancelActions"], 
153                         {
154                                 "ok": self.okbuttonClick,
155                                 "cancel": self.close
156                         })
157                         
158                 list = [ ]
159                 list.append( ("Reset", 0) )
160                 list.append( ("Init", 1) )
161                 #add timer for "app-manager name" ?
162                 list.append( ("Irdeto Blasel SE", 2) )
163                 self["entries"] = CiEntryList(list)