diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-01-02 11:45:49 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-01-02 11:45:49 +0000 |
| commit | 1213cbcff4f8b31aa77825325f102a134d246e0a (patch) | |
| tree | 54be1f88c4788a6bdf126add13690b183e332717 /lib/python/Screens | |
| parent | a194b290cad5bfd10126b9a225b08e2c58c5c990 (diff) | |
| download | enigma2-1213cbcff4f8b31aa77825325f102a134d246e0a.tar.gz enigma2-1213cbcff4f8b31aa77825325f102a134d246e0a.zip | |
add two native python epg views
Diffstat (limited to 'lib/python/Screens')
| -rw-r--r-- | lib/python/Screens/ChannelSelection.py | 50 | ||||
| -rw-r--r-- | lib/python/Screens/EpgSelection.py | 101 | ||||
| -rw-r--r-- | lib/python/Screens/EventView.py | 16 | ||||
| -rw-r--r-- | lib/python/Screens/InfoBarGenerics.py | 33 |
4 files changed, 146 insertions, 54 deletions
diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index 45de7abd..8eb8b887 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -12,8 +12,8 @@ from Components.NimManager import nimmanager import xml.dom.minidom class BouquetSelector(FixedMenu): - def __init__(self, session, bouquets, parent): - self.parent=parent + def __init__(self, session, bouquets, selectedFunc): + self.selectedFunc=selectedFunc entrys = [ ] for x in bouquets: entrys.append((x[0], self.bouquetSelected, x[1])) @@ -21,8 +21,7 @@ class BouquetSelector(FixedMenu): self.skinName = "Menu" def bouquetSelected(self): - self.parent.addCurrentServiceToBouquet(self["menu"].getCurrent()[2]) - self.close() + self.selectedFunc(self["menu"].getCurrent()[2]) class ChannelContextMenu(FixedMenu): def __init__(self, session, csel): @@ -68,21 +67,13 @@ class ChannelContextMenu(FixedMenu): self.skinName = "Menu" def addServiceToBouquetSelected(self): - bouquets = [ ] - serviceHandler = eServiceCenter.getInstance() - list = serviceHandler.list(self.csel.bouquet_root) - if not list is None: - while True: - s = list.getNext() - if not s.valid(): - break - if ((s.flags & eServiceReference.flagDirectory) == eServiceReference.flagDirectory): - info = serviceHandler.info(s) - if not info is None: - bouquets.append((info.getName(s), s)) - cnt = len(bouquets) + bouquets = self.csel.getBouquetList() + if bouquets is None: + cnt = 0 + else: + cnt = len(bouquets) if cnt > 1: # show bouquet list - self.session.open(BouquetSelector, bouquets, self) + self.session.open(BouquetSelector, bouquets, self.addCurrentServiceToBouquet) elif cnt == 1: # add to only one existing bouquet self.addCurrentServiceToBouquet(bouquet[0][1]) else: #no bouquets in root.. so assume only one favourite list is used @@ -370,6 +361,29 @@ class ChannelSelectionBase(Screen): def cancel(self): self.close(None) + def getBouquetList(self): + serviceCount=0 + bouquets = [ ] + serviceHandler = eServiceCenter.getInstance() + list = serviceHandler.list(self.bouquet_root) + if not list is None: + while True: + s = list.getNext() + if not s.valid(): + break + if ((s.flags & eServiceReference.flagDirectory) == eServiceReference.flagDirectory): + info = serviceHandler.info(s) + if not info is None: + bouquets.append((info.getName(s), s)) + else: + serviceCount += 1 + if len(bouquets) == 0 and serviceCount > 0: + info = serviceHandler.info(self.bouquet_root) + if not info is None: + bouquets.append((info.getName(self.bouquet_root), self.bouquet_root)) + return bouquets + return None + class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit): def __init__(self, session): ChannelSelectionBase.__init__(self,session) diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py index efdd0f1b..6f556003 100644 --- a/lib/python/Screens/EpgSelection.py +++ b/lib/python/Screens/EpgSelection.py @@ -1,6 +1,6 @@ from Screen import Screen from Components.Button import Button -from Components.EpgList import EPGList +from Components.EpgList import * from Components.ActionMap import ActionMap from Screens.EventView import EventView from enigma import eServiceReference, eServiceEventPtr @@ -13,60 +13,107 @@ from ServiceReference import ServiceReference import xml.dom.minidom class EPGSelection(Screen): - def __init__(self, session, root): + def __init__(self, session, service): Screen.__init__(self, session) - self["list"] = EPGList() + self["key_red"] = Button("") + self["key_green"] = Button(_("Add timer")) + + if isinstance(service, eServiceReference): + self.type = EPG_TYPE_SINGLE + self["key_yellow"] = Button() + self["key_blue"] = Button() + self.currentService=ServiceReference(service) + else: + self.type = EPG_TYPE_MULTI + self["key_yellow"] = Button(_("Prev")) + self["key_blue"] = Button(_("Next")) + self.services = service + + self["list"] = EPGList(self.type) class ChannelActionMap(ActionMap): def action(self, contexts, action): - ActionMap.action(self, contexts, action) - - self["key_red"] = Button("") - self["key_green"] = Button(_("Add timer")) - self["key_yellow"] = Button("") - self["key_blue"] = Button("") + ActionMap.action(self, contexts, action) - self["actions"] = ChannelActionMap(["EPGSelectActions", "OkCancelActions"], + self["actions"] = ChannelActionMap(["EPGSelectActions", "OkCancelActions"], { "cancel": self.close, "ok": self.eventSelected, - "timerAdd": self.timerAdd + "timerAdd": self.timerAdd, + "yellow": self.yellowButtonPressed, + "blue": self.blueButtonPressed }) self["actions"].csel = self - self.setRoot(root) - def eventViewCallback(self, setEvent, val): + self.onLayoutFinish.append(self.onCreate) + + #just used in multipeg + def onCreate(self): + l = self["list"] + if self.type == EPG_TYPE_MULTI: + l.recalcEntrySize() + l.fillMultiEPG(self.services) + else: + if SINGLE_CPP == 0: + l.recalcEntrySize() + l.fillSingleEPG(self.currentService) + + def eventViewCallback(self, setEvent, setService, val): + l = self["list"] + old = l.getCurrent() if val == -1: self.moveUp() - setEvent(self["list"].getCurrent()) elif val == +1: self.moveDown() - setEvent(self["list"].getCurrent()) + cur = l.getCurrent() + if self.type == EPG_TYPE_SINGLE: + setEvent(cur) + else: + if self.type == EPG_TYPE_MULTI and cur[0] is None and cur[1].ref != old[1].ref: + self.eventViewCallback(setEvent, setService, val) + else: + setEvent(cur[0]) + setService(cur[1]) def eventSelected(self): - event = self["list"].getCurrent() - self.session.open(EventView, event, self.currentService, self.eventViewCallback) - + if self.type == EPG_TYPE_SINGLE: + event = self["list"].getCurrent() + service = self.currentService + else: # EPG_TYPE_MULTI + cur = self["list"].getCurrent() + event = cur[0] + service = cur[1] + if event is not None: + self.session.open(EventView, event, service, self.eventViewCallback) + + def yellowButtonPressed(self): + if self.type == EPG_TYPE_MULTI: + self["list"].updateMultiEPG(-1) + + def blueButtonPressed(self): + if self.type == EPG_TYPE_MULTI: + self["list"].updateMultiEPG(1) + def timerAdd(self): - event = self["list"].getCurrent() - + if self.type == EPG_TYPE_SINGLE: + event = self["list"].getCurrent() + serviceref = self.currentService + else: + cur = self["list"].getCurrent() + event = cur[0] + serviceref = cur[1] if event is None: return - - newEntry = RecordTimerEntry(self.currentService, *parseEvent(event)) + newEntry = RecordTimerEntry(serviceref, *parseEvent(event)) self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry) - + def timerEditFinished(self, answer): if (answer[0]): self.session.nav.RecordTimer.record(answer[1]) else: print "Timeredit aborted" - def setRoot(self, root): - self.currentService=ServiceReference(root) - self["list"].setRoot(root) - def moveUp(self): self["list"].moveUp() diff --git a/lib/python/Screens/EventView.py b/lib/python/Screens/EventView.py index e3585b67..d96be6d6 100644 --- a/lib/python/Screens/EventView.py +++ b/lib/python/Screens/EventView.py @@ -11,7 +11,8 @@ class EventView(Screen): def __init__(self, session, Event, Ref, callback=None): Screen.__init__(self, session) self.cbFunc = callback - self.currentService=None + self.currentService=Ref + self.event = Event self["epg_description"] = ScrollLabel() self["datetime"] = Label() self["channel"] = Label() @@ -26,17 +27,20 @@ class EventView(Screen): "nextEvent": self.nextEvent, "timerAdd": self.timerAdd }) - self.setEvent(Event) - self.setService(Ref) + self.onShown.append(self.onCreate) + + def onCreate(self): + self.setEvent(self.event) + self.setService(self.currentService) def prevEvent(self): if self.cbFunc is not None: - self.cbFunc(self.setEvent, -1) + self.cbFunc(self.setEvent, self.setService, -1) def nextEvent(self): if self.cbFunc is not None: - self.cbFunc(self.setEvent, +1) - + self.cbFunc(self.setEvent, self.setService, +1) + def timerAdd(self): newEntry = RecordTimerEntry(self.currentService, *parseEvent(self.event)) self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry) diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index a659b5be..e3fa423f 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -5,7 +5,7 @@ from Components.Label import * from Components.ProgressBar import * from Components.config import configfile, configsequencearg from Components.config import config, configElement, ConfigSubsection, configSequence -from ChannelSelection import ChannelSelection +from ChannelSelection import ChannelSelection, BouquetSelector from Components.Pixmap import Pixmap, PixmapConditional from Components.BlinkingPixmap import BlinkingPixmapConditional @@ -362,7 +362,34 @@ class InfoBarEPG: }) def showEPGList(self): - ref=self.session.nav.getCurrentlyPlayingServiceReference() + bouquets = self.servicelist.getBouquetList() + if bouquets is None: + cnt = 0 + else: + cnt = len(bouquets) + if cnt > 1: # show bouquet list + self.session.open(BouquetSelector, bouquets, self.openBouquetEPG) + elif cnt == 1: # add to only one existing bouquet + self.openBouquetEPG(bouquets[0][1]) + else: #no bouquets so we open single epg + self.openSingleEPGSelector(self.session.nav.getCurrentlyPlayingServiceReference()) + + def openBouquetEPG(self, bouquet): + ptr=eEPGCache.getInstance() + services = [ ] + servicelist = eServiceCenter.getInstance().list(bouquet) + if not servicelist is None: + while True: + service = servicelist.getNext() + if not service.valid(): #check if end of list + break + if service.flags: #ignore non playable services + continue + services.append(ServiceReference(service)) + if len(services): + self.session.open(EPGSelection, services) + + def openSingleEPGSelector(self, ref): ptr=eEPGCache.getInstance() if ptr.startTimeQuery(ref) != -1: self.session.open(EPGSelection, ref) @@ -383,7 +410,7 @@ class InfoBarEPG: except: pass - def eventViewCallback(self, setEvent, val): #used for now/next displaying + def eventViewCallback(self, setEvent, setService, val): #used for now/next displaying if len(self.epglist) > 1: tmp = self.epglist[0] self.epglist[0]=self.epglist[1] |
