Fix network test.
[vuplus_dvbapp] / lib / python / Components / TimerList.py
1 from HTMLComponent import HTMLComponent
2 from GUIComponent import GUIComponent
3 from skin import parseFont
4
5 from Tools.FuzzyDate import FuzzyTime
6
7 from enigma import eListboxPythonMultiContent, eListbox, gFont, \
8         RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_VALIGN_CENTER
9 from Tools.LoadPixmap import LoadPixmap
10 from timer import TimerEntry
11 from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
12
13 class TimerList(HTMLComponent, GUIComponent, object):
14 #
15 #  | <Service>     <Name of the Timer>  |
16 #  | <start, end>              <state>  |
17 #
18         def buildTimerEntry(self, timer, processed):
19                 width = self.l.getItemSize().width()
20                 res = [ None ]
21                 print "timer.service_ref.getServiceName() : ", timer.service_ref.getServiceName()
22                 print "timer.name : ", timer.name
23                 ih = self.itemHeight
24                 ih1 = ih * 30 / 70 # 70 -> 30
25                 ih2 = ih * 20 / 70 # 70 -> 20
26                 stateSize = ih * 150 / 70   # 20 -> 145
27                 res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0, width, ih1, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, timer.service_ref.getServiceName()))
28                 res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, ih1, width, ih2, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, timer.name))
29
30                 repeatedtext = ""
31                 days = ( _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") )
32                 if timer.repeated:
33                         flags = timer.repeated
34                         count = 0
35                         for x in (0, 1, 2, 3, 4, 5, 6):
36                                         if (flags & 1 == 1):
37                                                 if (count != 0):
38                                                         repeatedtext += ", "
39                                                 repeatedtext += days[x]
40                                                 count += 1
41                                         flags = flags >> 1
42                         if timer.justplay:
43                                 if timer.end - timer.begin < 4: # rounding differences
44                                         res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, ih1+ih2, width-stateSize, ih2, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s "+ _("(ZAP)")) % (FuzzyTime(timer.begin)[1]))))
45                                 else:
46                                         res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, ih1+ih2, width-stateSize, ih2, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s ... %s (%d " + _("mins") + ") ") % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1], (timer.end - timer.begin) / 60)) + _("(ZAP)")))
47                         else:
48                                 res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, ih1+ih2, width-stateSize, ih2, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s ... %s (%d " + _("mins") + ")") % (FuzzyTime(timer.begin)[1], FuzzyTime(timer.end)[1], (timer.end - timer.begin) / 60))))
49                 else:
50                         if timer.justplay:
51                                 if timer.end - timer.begin < 4:
52                                         res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, ih1+ih2, width-stateSize, ih2, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s " + _("(ZAP)")) % (FuzzyTime(timer.begin)))))
53                                 else:
54                                         res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, ih1+ih2, width-stateSize, ih2, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s ... %s (%d " + _("mins") + ") ") % (FuzzyTime(timer.begin) + FuzzyTime(timer.end)[1:] + ((timer.end - timer.begin) / 60,))) + _("(ZAP)")))
55                         else:
56                                 res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, ih1+ih2, width-stateSize, ih2, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s ... %s (%d " + _("mins") + ")") % (FuzzyTime(timer.begin) + FuzzyTime(timer.end)[1:] + ((timer.end - timer.begin) / 60,)))))
57
58                 if not processed:
59                         if timer.state == TimerEntry.StateWaiting:
60                                 state = _("waiting")
61                         elif timer.state == TimerEntry.StatePrepared:
62                                 state = _("about to start")
63                         elif timer.state == TimerEntry.StateRunning:
64                                 if timer.justplay:
65                                         state = _("zapped")
66                                 else:
67                                         state = _("recording...")
68                         elif timer.state == TimerEntry.StateEnded:
69                                 state = _("done!")
70                         else:
71                                 state = _("<unknown>")
72                 else:
73                         state = _("done!")
74
75                 if timer.disabled:
76                         state = _("disabled")
77
78                 res.append((eListboxPythonMultiContent.TYPE_TEXT, width-stateSize, ih1+ih2, stateSize, ih2, 1, RT_HALIGN_RIGHT|RT_VALIGN_CENTER, state))
79
80                 if timer.disabled:
81                         iconPosX = width * 490 / 740
82                         png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/redx.png"))
83                         res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, iconPosX, 5, 40, 40, png))
84                 return res
85
86         def __init__(self, list):
87                 GUIComponent.__init__(self)
88                 self.l = eListboxPythonMultiContent()
89                 self.l.setBuildFunc(self.buildTimerEntry)
90                 self.serviceNameFont = gFont("Regular", 20)
91                 self.font = gFont("Regular", 18)
92                 self.itemHeight = 70
93                 self.l.setList(list)
94
95         def applySkin(self, desktop, parent):
96                 def itemHeight(value):
97                         self.itemHeight = int(value)
98                 def setServiceNameFont(value):
99                         self.serviceNameFont = parseFont(value, ((1,1),(1,1)))
100                 def setFont(value):
101                         self.font = parseFont(value, ((1,1),(1,1)))
102
103                 for (attrib, value) in list(self.skinAttributes):
104                         try:
105                                 locals().get(attrib)(value)
106                                 self.skinAttributes.remove((attrib, value))
107                         except:
108                                 pass
109                 self.l.setFont(0, self.serviceNameFont)
110                 self.l.setFont(1, self.font)
111                 self.l.setItemHeight(self.itemHeight)
112                 return GUIComponent.applySkin(self, desktop, parent)
113         
114         def getCurrent(self):
115                 cur = self.l.getCurrentSelection()
116                 return cur and cur[0]
117         
118         GUI_WIDGET = eListbox
119         
120         def postWidgetCreate(self, instance):
121                 instance.setContent(self.l)
122
123         def moveToIndex(self, index):
124                 self.instance.moveSelectionTo(index)
125
126         def getCurrentIndex(self):
127                 return self.instance.getCurrentIndex()
128
129         currentIndex = property(getCurrentIndex, moveToIndex)
130         currentSelection = property(getCurrent)
131
132         def moveDown(self):
133                 self.instance.moveSelection(self.instance.moveDown)
134
135         def invalidate(self):
136                 self.l.invalidate()
137
138         def entryRemoved(self, idx):
139                 self.l.entryRemoved(idx)
140