X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/1cdf6cb021fcaa6548b90ba7b6765cf1e8b8b37b..949a07352f59a32a5ae00f30650a6d067ef59b77:/components.py diff --git a/components.py b/components.py index 219e4f52..af0fbffa 100644 --- a/components.py +++ b/components.py @@ -159,7 +159,8 @@ class Clock(HTMLComponent, GUIComponent, VariableText): # "funktionalitaet" def doClock(self): - self.setText("clock: " + time.asctime()) + t = time.localtime() + self.setText("%2d:%02d:%02d" % (t[3], t[4], t[5])) # realisierung als GUI def createWidget(self, parent, skindata): @@ -270,12 +271,13 @@ class MenuList(HTMLComponent, GUIComponent): def GUIdelete(self): self.instance.setContent(None) + del self.instance class ServiceList(HTMLComponent, GUIComponent): def __init__(self): GUIComponent.__init__(self) self.l = eListboxServiceContent() - + def getCurrent(self): r = eServiceReference() self.l.getCurrent(r) @@ -290,6 +292,19 @@ class ServiceList(HTMLComponent, GUIComponent): def setRoot(self, root): self.l.setRoot(root) + + # mark stuff + def clearMarked(self): + self.l.clearMarked() + + def isMarked(self, ref): + return self.l.isMarked(ref) + + def addMarked(self, ref): + self.l.addMarked(ref) + + def removeMarked(self, ref): + self.l.removeMarked(ref) class ServiceScan: @@ -297,12 +312,25 @@ class ServiceScan: Running = 2 Done = 3 Error = 4 + + Errors = { + 1: "error while scanning", + 2: "no resource manager", + 3: "no channel list" + } + def scanStatusChanged(self): if self.state == self.Running: self.progressbar.setValue(self.scan.getProgress()) if self.scan.isDone(): - self.state = self.Done + errcode = self.scan.getError() + + if errcode == 0: + self.state = self.Done + else: + self.state = self.Error + self.errorcode = errcode else: self.text.setText("scan in progress - %d %% done!\n%d services found!" % (self.scan.getProgress(), self.scan.getNumServices())) @@ -310,40 +338,50 @@ class ServiceScan: self.text.setText("scan done!") if self.state == self.Error: - self.text.setText("ERROR - failed to scan!") + self.text.setText("ERROR - failed to scan (%s)!" % (self.Errors[self.errorcode]) ) def __init__(self, progressbar, text): self.progressbar = progressbar self.text = text self.scan = eComponentScan() + self.state = self.Idle + self.scanStatusChanged() + + def execBegin(self): + self.scan.statusChanged.get().append(self.scanStatusChanged) + self.state = self.Running if self.scan.start(): self.state = self.Error - else: - self.state = self.Running - self.scan.statusChanged.get().append(self.scanStatusChanged) + self.scanStatusChanged() + + def execEnd(self): + self.scan.statusChanged.get().remove(self.scanStatusChanged) + if not self.isDone(): + print "*** warning *** scan was not finished!" def isDone(self): - return self.state == self.Done - - def fix(self): - self.scan.statusChanged.get().remove(self.scanStatusChanged) + print "state is %d " % (self.state) + return self.state == self.Done or self.state == self.Error class ActionMap: - def __init__(self, context, actions = { }, prio=0): + def __init__(self, contexts = [ ], actions = { }, prio=0): self.actions = actions - self.context = context + self.contexts = contexts self.prio = prio self.p = eActionMapPtr() eActionMap.getInstance(self.p) def execBegin(self): - self.p.bindAction(self.context, self.prio, self.action) + for ctx in self.contexts: + self.p.bindAction(ctx, self.prio, self.action) def execEnd(self): - self.p.unbindAction(self.context, self.action) + for ctx in self.contexts: + self.p.unbindAction(ctx, self.action) def action(self, context, action): + print " ".join(("action -> ", context, action)) try: self.actions[action]() except KeyError: @@ -376,15 +414,18 @@ class PerServiceDisplay(GUIComponent, VariableText): class EventInfo(PerServiceDisplay): Now = 0 Next = 1 + Now_Duration = 2 + Next_Duration = 3 + def __init__(self, navcore, now_or_next): # listen to evUpdatedEventInfo and evStopService # note that evStopService will be called once to establish a known state + self.now_or_next = now_or_next PerServiceDisplay.__init__(self, navcore, { pNavigation.evUpdatedEventInfo: self.ourEvent, pNavigation.evStopService: self.stopEvent }) - self.now_or_next = now_or_next def ourEvent(self): info = iServiceInformationPtr() @@ -392,14 +433,17 @@ class EventInfo(PerServiceDisplay): if not self.navcore.getCurrentService(service): if not service.info(info): - print "got info !" ev = eServiceEventPtr() - info.getEvent(ev, self.now_or_next) - self.setText(ev.m_event_name) + info.getEvent(ev, self.now_or_next & 1) + if self.now_or_next & 2: + self.setText("%d min" % (ev.m_duration / 60)) + else: + self.setText(ev.m_event_name) print "new event info in EventInfo! yeah!" def stopEvent(self): - self.setText("waiting for event data..."); + self.setText( + ("waiting for event data...", "", "--:--", "--:--")[self.now_or_next]); class ServiceName(PerServiceDisplay): def __init__(self, navcore):