1 from HTMLComponent import HTMLComponent
2 from GUIComponent import GUIComponent
3 from skin import parseFont
5 from Tools.FuzzyDate import FuzzyTime
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
13 class TimerList(HTMLComponent, GUIComponent, object):
15 # | <Service> <Name of the Timer> |
16 # | <start, end> <state> |
18 def buildTimerEntry(self, timer, processed):
19 width = self.l.getItemSize().width()
21 print "timer.service_ref.getServiceName() : ", timer.service_ref.getServiceName()
22 print "timer.name : ", timer.name
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))
31 days = ( _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") )
33 flags = timer.repeated
35 for x in (0, 1, 2, 3, 4, 5, 6):
39 repeatedtext += days[x]
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]))))
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)")))
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))))
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)))))
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)")))
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,)))))
59 if timer.state == TimerEntry.StateWaiting:
61 elif timer.state == TimerEntry.StatePrepared:
62 state = _("about to start")
63 elif timer.state == TimerEntry.StateRunning:
67 state = _("recording...")
68 elif timer.state == TimerEntry.StateEnded:
71 state = _("<unknown>")
78 res.append((eListboxPythonMultiContent.TYPE_TEXT, width-stateSize, ih1+ih2, stateSize, ih2, 1, RT_HALIGN_RIGHT|RT_VALIGN_CENTER, state))
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))
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)
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)))
101 self.font = parseFont(value, ((1,1),(1,1)))
103 for (attrib, value) in list(self.skinAttributes):
105 locals().get(attrib)(value)
106 self.skinAttributes.remove((attrib, value))
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)
114 def getCurrent(self):
115 cur = self.l.getCurrentSelection()
116 return cur and cur[0]
118 GUI_WIDGET = eListbox
120 def postWidgetCreate(self, instance):
121 instance.setContent(self.l)
123 def moveToIndex(self, index):
124 self.instance.moveSelectionTo(index)
126 def getCurrentIndex(self):
127 return self.instance.getCurrentIndex()
129 currentIndex = property(getCurrentIndex, moveToIndex)
130 currentSelection = property(getCurrent)
133 self.instance.moveSelection(self.instance.moveDown)
135 def invalidate(self):
138 def entryRemoved(self, idx):
139 self.l.entryRemoved(idx)