make bouquet +/- useable in multiepg to change directly from one to another bouquet epg
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Thu, 27 Apr 2006 09:22:18 +0000 (09:22 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Thu, 27 Apr 2006 09:22:18 +0000 (09:22 +0000)
data/keymap.xml
lib/python/Components/MenuList.py
lib/python/Screens/ChannelSelection.py
lib/python/Screens/EpgSelection.py
lib/python/Screens/InfoBarGenerics.py

index 578c93220d4c2e839e480f9fcf7e722f9c82f34a..783dbf13fca83500a414f92931b1f040bc8d74ee 100644 (file)
                <key id="KEY_BLUE" mapto="blue" flags="mr" />
                <key id="KEY_INFO" mapto="info" flags="m" />
                <key id="KEY_MENU" mapto="input_date_time" flags="m" />
+               <key id="KEY_CHANNELUP" mapto="nextBouquet" flags="m" />
+               <key id="KEY_CHANNELDOWN" mapto="prevBouquet" flags="m" />
        </map>
 
        <map context="EventViewActions">
index 0e33719860ef5019294bd0dfcd0caa2a1734dc8b..f4b2c361c7ed17bfc480f2a80b3ed1e2206061b1 100644 (file)
@@ -4,12 +4,13 @@ from GUIComponent import *
 from enigma import eListboxPythonStringContent, eListbox
 
 class MenuList(HTMLComponent, GUIComponent):
-       def __init__(self, list):
+       def __init__(self, list, enableWrapAround=False):
                GUIComponent.__init__(self)
                self.list = list
                self.l = eListboxPythonStringContent()
                self.l.setList(self.list)
                self.onSelectionChanged = [ ]
+               self.enableWrapAround = enableWrapAround
        
        def getCurrent(self):
                return self.l.getCurrentSelection()
@@ -18,6 +19,8 @@ class MenuList(HTMLComponent, GUIComponent):
                self.instance = eListbox(parent)
                self.instance.setContent(self.l)
                self.instance.selectionChanged.get().append(self.selectionChanged)
+               if self.enableWrapAround:
+                       self.instance.setWrapAround(True)
        
        def GUIdelete(self):
                self.instance.setContent(None)
@@ -52,4 +55,4 @@ class MenuList(HTMLComponent, GUIComponent):
                        
        def selectionEnabled(self, enabled):
                if self.instance is not None:
-                       self.instance.setSelectionEnable(enabled)
\ No newline at end of file
+                       self.instance.setSelectionEnable(enabled)
index a38182edca1431ceb414089ce24555b997317f04..32c3b1079c95ffd7e82f50a4ed6d6b1e07484235 100644 (file)
@@ -21,7 +21,7 @@ from os import remove
 import xml.dom.minidom
 
 class BouquetSelector(Screen):
-       def __init__(self, session, bouquets, selectedFunc):
+       def __init__(self, session, bouquets, selectedFunc, enableWrapAround=False):
                Screen.__init__(self, session)
 
                self.selectedFunc=selectedFunc
@@ -34,16 +34,25 @@ class BouquetSelector(Screen):
                entrys = [ ]
                for x in bouquets:
                        entrys.append((x[0], x[1]))
-               self["menu"] = MenuList(entrys)
+               self["menu"] = MenuList(entrys, enableWrapAround)
+
+       def getCurrent(self):
+               cur = self["menu"].getCurrent()
+               return cur and cur[1]
 
        def okbuttonClick(self):
-               self.selectedFunc(self["menu"].getCurrent()[1])
+               self.selectedFunc(self.getCurrent())
+
+       def up(self):
+               self["menu"].up()
+
+       def down(self):
+               self["menu"].down()
 
        def cancelClick(self):
                self.close(False)
 
 class ChannelContextMenu(Screen):
-       
        def __init__(self, session, csel):
                Screen.__init__(self, session)
                self.csel = csel
index a5b61a1cfe540d41a0eb761b3029d27600b74efc..1af2cbb933d353fb619a57f0d3dfd47c4094a168 100644 (file)
@@ -19,9 +19,10 @@ from time import localtime
 import xml.dom.minidom
 
 class EPGSelection(Screen):
-       def __init__(self, session, service, zapFunc=None, eventid=None):
+       def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None):
                Screen.__init__(self, session)
-               self.asked_specific_time = False
+               self.bouquetChangeCB = bouquetChangeCB
+               self.ask_time = -1 #now
                self["key_red"] = Button("")
                self.closeRecursive = False
                if isinstance(service, str) and eventid != None:
@@ -70,12 +71,22 @@ class EPGSelection(Screen):
                                "blue": self.blueButtonPressed,
                                "info": self.infoKeyPressed,
                                "zapTo": self.zapTo,
-                               "input_date_time": self.enterDateTime
+                               "input_date_time": self.enterDateTime,
+                               "nextBouquet": self.nextBouquet,
+                               "prevBouquet": self.prevBouquet
                        })
                self["actions"].csel = self
 
                self.onLayoutFinish.append(self.onCreate)
 
+       def nextBouquet(self):
+               if self.bouquetChangeCB:
+                       self.bouquetChangeCB(1, self)
+
+       def prevBouquet(self):
+               if self.bouquetChangeCB:
+                       self.bouquetChangeCB(-1, self)
+
        def enterDateTime(self):
                if self.type == EPG_TYPE_MULTI:
                        self.session.openWithCallback(self.onDateTimeInputClosed, TimeDateInput)
@@ -83,7 +94,7 @@ class EPGSelection(Screen):
        def onDateTimeInputClosed(self, ret):
                if len(ret) > 1:
                        if ret[0]:
-                               self.asked_specific_time=True
+                               self.ask_time=ret[1]
                                self["list"].fillMultiEPG(self.services, ret[1])
 
        def closeScreen(self):
@@ -106,12 +117,16 @@ class EPGSelection(Screen):
        def openSimilarList(self, eventid, refstr):
                self.session.open(EPGSelection, refstr, None, eventid)
 
+       def setServices(self, services):
+               self.services = services
+               self.onCreate()
+
        #just used in multipeg
        def onCreate(self):
                l = self["list"]
                if self.type == EPG_TYPE_MULTI:
                        l.recalcEntrySize()
-                       l.fillMultiEPG(self.services)
+                       l.fillMultiEPG(self.services, self.ask_time)
                elif self.type == EPG_TYPE_SINGLE:
                        if SINGLE_CPP == 0:
                                l.recalcEntrySize()
@@ -218,7 +233,7 @@ class EPGSelection(Screen):
        def onSelectionChanged(self):
                if self.type == EPG_TYPE_MULTI:
                        count = self["list"].getCurrentChangeCount()
-                       if self.asked_specific_time:
+                       if self.ask_time != -1:
                                self.applyButtonState(0)
                        elif count > 1:
                                self.applyButtonState(3)
index d826dedf6937b344a8e4a51adc518cf3509a82f8..9daea0b96c88d16a64eee7710942502dc9686568 100644 (file)
@@ -343,6 +343,7 @@ class InfoBarEPG:
        """ EPG - Opens an EPG list when the showEPGList action fires """
        def __init__(self):
                self.dlg_stack = [ ]
+               self.bouquetSel = None
                self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", 
                        {
                                "showEventInfo": (self.openEventView, _("show EPG...")),
@@ -358,8 +359,7 @@ class InfoBarEPG:
                        self.servicelist.setCurrentSelection(service) #select the service in servicelist
                        self.servicelist.zap()
 
-       def openBouquetEPG(self, bouquet, withCallback=True):
-               ptr=eEPGCache.getInstance()
+       def getBouquetServices(self, bouquet):
                services = [ ]
                servicelist = eServiceCenter.getInstance().list(bouquet)
                if not servicelist is None:
@@ -370,15 +370,33 @@ class InfoBarEPG:
                                if service.flags: #ignore non playable services
                                        continue
                                services.append(ServiceReference(service))
+               return services
+
+       def openBouquetEPG(self, bouquet, withCallback=True):
+               services = self.getBouquetServices(bouquet)
                if len(services):
                        self.epg_bouquet = bouquet
                        if withCallback:
-                               self.dlg_stack.append(self.session.openWithCallback(self.closed, EPGSelection, services, self.zapToService))
+                               self.dlg_stack.append(self.session.openWithCallback(self.closed, EPGSelection, services, self.zapToService, None, self.changeBouquetCB))
+                       else:
+                               self.session.open(EPGSelection, services, self.zapToService, None, self.changeBouquetCB)
+
+       def changeBouquetCB(self, direction, epg):
+               if self.bouquetSel:
+                       if direction > 0:
+                               self.bouquetSel.down()
                        else:
-                               self.session.open(EPGSelection, services, self.zapToService)
+                               self.bouquetSel.up()
+                       bouquet = self.bouquetSel.getCurrent()
+                       services = self.getBouquetServices(bouquet)
+                       if len(services):
+                               self.epg_bouquet = bouquet
+                               epg.setServices(services)
 
        def closed(self, ret=False):
-               self.dlg_stack.pop()
+               closedScreen = self.dlg_stack.pop()
+               if self.bouquetSel and closedScreen == self.bouquetSel:
+                       self.bouquetSel = None
                if ret:
                        dlgs=len(self.dlg_stack)
                        assert dlgs>0
@@ -392,9 +410,10 @@ class InfoBarEPG:
                        cnt = len(bouquets)
                if cnt > 1: # show bouquet list
                        if withCallback:
-                               self.dlg_stack.append(self.session.openWithCallback(self.closed, BouquetSelector, bouquets, self.openBouquetEPG))
+                               self.bouquetSel = self.session.openWithCallback(self.closed, BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
+                               self.dlg_stack.append(self.bouquetSel)
                        else:
-                               self.session.open(BouquetSelector, bouquets, self.openBouquetEPG)
+                               self.bouquetSel = self.session.open(BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
                elif cnt == 1: 
                        self.openBouquetEPG(bouquets[0][1], withCallback)