update timerlist when timerstate changes
[enigma2.git] / lib / python / Screens / Setup.py
1 from Screen import Screen
2 from Components.ActionMap import NumberActionMap
3 from Components.config import config                            #global config instance
4 from Components.config import configSelection
5 from Components.ConfigList import ConfigList
6 from Components.Label import Label
7 from Components.Pixmap import Pixmap
8
9 import xml.dom.minidom
10 from xml.dom import EMPTY_NAMESPACE
11 from skin import elementsWithTag
12
13 from Tools import XMLTools
14
15 # read the setupmenu
16 try:
17         # first we search in the current path
18         setupfile = file('data/setup.xml', 'r')
19 except:
20         # if not found in the current path, we use the global datadir-path
21         setupfile = file('/usr/share/enigma2/setup.xml', 'r')
22 setupdom = xml.dom.minidom.parseString(setupfile.read())
23 setupfile.close()
24
25 def getValbyAttr(x, attr):
26         for p in range(x.attributes.length):
27                 a = x.attributes.item(p)
28                 attrib = str(a.name)
29                 value = str(a.value)
30                 if attrib == attr:
31                         return value
32         
33         return ""
34
35 class Setup(Screen):
36
37         def addItems(self, list, childNode):
38                 for x in childNode:
39                         if x.nodeType != xml.dom.minidom.Element.nodeType:
40                                 continue
41                         elif x.tagName == 'item':
42                                 ItemText = _(getValbyAttr(x, "text"))
43                                 b = eval(XMLTools.mergeText(x.childNodes));
44                                 print "item " + ItemText + " " + b.configPath
45                                 if b == "":
46                                         continue
47                                 #add to configlist
48                                 item = b.controlType(b)
49                                 
50                                 # the first b is the item itself, ignored by the configList.
51                                 # the second one is converted to string.
52                                 list.append( (ItemText, item) )
53
54         def keyOk(self):
55                 if (self["config"].getCurrent()[1].parent.enabled == True):
56                         self["config"].handleKey(config.key["choseElement"])
57         def keyLeft(self):
58                 if (self["config"].getCurrent()[1].parent.enabled == True):
59                         self["config"].handleKey(config.key["prevElement"])
60         def keyRight(self):
61                 if (self["config"].getCurrent()[1].parent.enabled == True):
62                         self["config"].handleKey(config.key["nextElement"])
63
64         def keySave(self):
65                 print "save requested"
66                 for x in self["config"].list:
67                         x[1].save()
68                 self.close()
69
70         def keyCancel(self):
71                 print "cancel requested"
72                 for x in self["config"].list:
73                         x[1].cancel()
74                 self.close()
75                 
76         def keyNumberGlobal(self, number):
77                 print "You pressed number " + str(number)
78                 if (self["config"].getCurrent()[1].parent.enabled == True):
79                         self["config"].handleKey(config.key[str(number)])
80
81
82         def __init__(self, session, setup):
83                 Screen.__init__(self, session)
84
85                 print "request setup for " + setup
86                 
87                 xmldata = setupdom.childNodes[0]
88                 
89                 entries = xmldata.childNodes
90
91                 list = []
92                                 
93                 for x in entries:             #walk through the actual nodelist
94                         if x.nodeType != xml.dom.minidom.Element.nodeType:
95                                 continue
96                         elif x.tagName == 'setup':
97                                 ItemText = getValbyAttr(x, "key")
98                                 if ItemText != setup:
99                                         continue
100                                 self.addItems(list, x.childNodes);
101                                 myTitle = getValbyAttr(x, "title")
102                 
103                 #check for list.entries > 0 else self.close
104                 
105                 self["config"] = ConfigList(list)
106
107                 self["title"] = Label(_(myTitle));
108
109                 self["oktext"] = Label(_("OK"))
110                 self["canceltext"] = Label(_("Cancel"))
111                 self["ok"] = Pixmap()
112                 self["cancel"] = Pixmap()
113                 
114                 self["actions"] = NumberActionMap(["SetupActions"], 
115                         {
116                                 "cancel": self.keyCancel,
117                                 "ok": self.keyOk,
118                                 "left": self.keyLeft,
119                                 "right": self.keyRight,
120                                 "save": self.keySave,
121                                 "1": self.keyNumberGlobal,
122                                 "2": self.keyNumberGlobal,
123                                 "3": self.keyNumberGlobal,
124                                 "4": self.keyNumberGlobal,
125                                 "5": self.keyNumberGlobal,
126                                 "6": self.keyNumberGlobal,
127                                 "7": self.keyNumberGlobal,
128                                 "8": self.keyNumberGlobal,
129                                 "9": self.keyNumberGlobal,
130                                 "0": self.keyNumberGlobal
131                         }, -1)