from HTMLComponent import HTMLComponent from GUIComponent import GUIComponent from Tools.FuzzyDate import FuzzyTime from enigma import eListboxPythonMultiContent, eListbox, gFont, loadPNG, \ RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_VALIGN_CENTER from timer import TimerEntry from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE class TimerList(HTMLComponent, GUIComponent, object): # # | | # | | # def buildTimerEntry(self, timer, processed): width = self.l.getItemSize().width() res = [ None ] res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0, width, 30, 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, timer.service_ref.getServiceName())) res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 30, width, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, timer.name)) repeatedtext = "" days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ] if timer.repeated: flags = timer.repeated count = 0 for x in range(0, 7): if (flags & 1 == 1): if (count != 0): repeatedtext += ", " repeatedtext += days[x] count += 1 flags = flags >> 1 if timer.justplay: res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + ((" %s "+ _("(ZAP)")) % (FuzzyTime(timer.begin)[1])))) else: res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 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)))) else: if timer.justplay: res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 1, RT_HALIGN_LEFT|RT_VALIGN_CENTER, repeatedtext + (("%s, %s " + _("(ZAP)")) % (FuzzyTime(timer.begin))))) else: res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 400, 20, 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,))))) if not processed: if timer.state == TimerEntry.StateWaiting: state = _("waiting") elif timer.state == TimerEntry.StatePrepared: state = _("about to start") elif timer.state == TimerEntry.StateRunning: if timer.justplay: state = _("zapped") else: state = _("recording...") else: state = _("") else: state = _("done!") if timer.disabled: state = _("disabled") res.append((eListboxPythonMultiContent.TYPE_TEXT, width-240, 50, 240, 20, 1, RT_HALIGN_RIGHT|RT_VALIGN_CENTER, state)) if timer.disabled: png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "redx.png")) res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 490, 5, 40, 40, png)) return res def __init__(self, list): GUIComponent.__init__(self) self.l = eListboxPythonMultiContent() self.l.setBuildFunc(self.buildTimerEntry) self.l.setFont(0, gFont("Regular", 20)) self.l.setFont(1, gFont("Regular", 18)) self.l.setItemHeight(70) self.l.setList(list) def getCurrent(self): cur = self.l.getCurrentSelection() return cur and cur[0] GUI_WIDGET = eListbox def postWidgetCreate(self, instance): instance.setContent(self.l) def moveToIndex(self, index): self.instance.moveSelectionTo(index) def getCurrentIndex(self): return self.instance.getCurrentIndex() currentIndex = property(moveToIndex, getCurrentIndex) currentSelection = property(getCurrent) def moveDown(self): self.instance.moveSelection(self.instance.moveDown) def invalidate(self): self.l.invalidate() def entryRemoved(self, idx): self.l.entryRemoved(idx)