Support Uno4kSE
[vuplus_dvbapp] / lib / python / Screens / Rc.py
1 from Components.Pixmap import MovingPixmap, MultiPixmap
2 from Tools.Directories import resolveFilename, SCOPE_SKIN
3 from xml.etree.ElementTree import ElementTree
4 from Components.config import config, ConfigInteger
5 from Tools.HardwareInfo import HardwareInfo
6 import skin
7
8 config.misc.rcused = ConfigInteger(default = 1)
9
10 class Rc:
11         def __init__(self):
12                 self["rc"] = MultiPixmap()
13                 self["arrowdown"] = MovingPixmap()
14                 self["arrowdown2"] = MovingPixmap()
15                 self["arrowup"] = MovingPixmap()
16                 self["arrowup2"] = MovingPixmap()
17
18                 (rcArrowDownW, rcArrowDownH, rcArrowUpW, rcArrowUpH, rcheight, rcheighthalf) = skin.parameters.get("RcArrow", (18, 70, 18, 0, 500, 250))
19
20                 self.rcheight = rcheight
21                 self.rcheighthalf = rcheighthalf
22                 
23                 self.selectpics = []
24                 self.selectpics.append((self.rcheighthalf, ["arrowdown", "arrowdown2"], (-rcArrowDownW, -rcArrowDownH)))
25                 self.selectpics.append((self.rcheight, ["arrowup", "arrowup2"], (-rcArrowUpW, rcArrowUpH)))
26
27                 self.initRcused()
28                 
29                 self.readPositions()
30                 self.clearSelectedKeys()
31                 self.onShown.append(self.initRc)
32
33         def initRcused(self):
34                 if config.misc.firstrun.value:
35                         boxType = HardwareInfo().get_vu_device_name()
36
37                         if boxType == 'solo':
38                                 config.misc.rcused.value = 0
39                         elif boxType in ('duo', 'uno', 'ultimo', 'solo2', 'duo2', 'solose', 'zero', 'solo4k', 'uno4k', 'ultimo4k'):
40                                 config.misc.rcused.value = 1
41                         else:
42                                 config.misc.rcused.value = 2
43                         config.misc.rcused.save()
44
45         def initRc(self):
46                 self["rc"].setPixmapNum(config.misc.rcused.value)               
47                                 
48         def readPositions(self):
49                 tree = ElementTree(file = resolveFilename(SCOPE_SKIN, "rcpositions.xml"))
50                 rcs = tree.getroot()
51                 self.rcs = {}
52                 for rc in rcs:
53                         id = int(rc.attrib["id"])
54                         self.rcs[id] = {}
55                         for key in rc:
56                                 name = key.attrib["name"]
57                                 pos = key.attrib["pos"].split(",")
58                                 self.rcs[id][name] = (int(pos[0]), int(pos[1]))
59                 
60         def getSelectPic(self, pos):
61                 for selectPic in self.selectpics:
62                         if pos[1] <= selectPic[0]:
63                                 return (selectPic[1], selectPic[2])
64                 return None
65         
66         def hideRc(self):
67                 self["rc"].hide()
68                 self.hideSelectPics()
69                 
70         def showRc(self):
71                 self["rc"].show()
72
73         def selectKey(self, key):
74                 rc = self.rcs[config.misc.rcused.value]
75                 if rc.has_key(key):
76                         rcpos = self["rc"].getPosition()
77                         pos = rc[key]
78                         selectPics = self.getSelectPic(pos)
79                         selectPic = None
80                         for x in selectPics[0]:
81                                 if x not in self.selectedKeys:
82                                         selectPic = x
83                                         break
84                         if selectPic is not None:
85                                 print "selectPic:", selectPic
86                                 self[selectPic].moveTo(rcpos[0] + pos[0] + selectPics[1][0], rcpos[1] + pos[1] + selectPics[1][1], 1)
87                                 self[selectPic].startMoving()
88                                 self[selectPic].show()
89                                 self.selectedKeys.append(selectPic)
90         
91         def clearSelectedKeys(self):
92                 self.showRc()
93                 self.selectedKeys = []
94                 self.hideSelectPics()
95                 
96         def hideSelectPics(self):
97                 for selectPic in self.selectpics:
98                         for pic in selectPic[1]:
99                                 self[pic].hide()