X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/a9589a258f6173fc8af17d802def10d0d918bc16..37d2bc32217dfcabeee9c952e901e2fa6d3809a4:/lib/python/Screens/ChannelSelection.py diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index 0ff4042b..e8bbce15 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -21,10 +21,12 @@ profile("ChannelSelection.py 2.3") from Components.Input import Input profile("ChannelSelection.py 3") from Components.ParentalControl import parentalControl +from Components.ChoiceList import ChoiceList, ChoiceEntryComponent from Screens.InputBox import InputBox, PinInput from Screens.MessageBox import MessageBox from Screens.ServiceInfo import ServiceInfo profile("ChannelSelection.py 4") +from Screens.PictureInPicture import PictureInPicture from Screens.RdsDisplay import RassInteractive from ServiceReference import ServiceReference from Tools.BoundFunction import boundFunction @@ -69,9 +71,9 @@ OFF = 0 EDIT_BOUQUET = 1 EDIT_ALTERNATIVES = 2 -def append_when_current_valid(current, menu, args, level = 0): +def append_when_current_valid(current, menu, args, level = 0, key = ""): if current and current.valid() and level <= config.usage.setup_level.index: - menu.append(args) + menu.append(ChoiceEntryComponent(key, args)) class ChannelContextMenu(Screen): def __init__(self, session, csel): @@ -80,13 +82,15 @@ class ChannelContextMenu(Screen): self.csel = csel self.bsel = None - self["actions"] = ActionMap(["OkCancelActions"], + self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "NumberActions"], { "ok": self.okbuttonClick, - "cancel": self.cancelClick + "cancel": self.cancelClick, + "blue": self.showServiceInPiP }) menu = [ ] + self.pipAvailable = False current = csel.getCurrentSelection() current_root = csel.getRoot() current_sel_path = current.getPath() @@ -122,8 +126,11 @@ class ChannelContextMenu(Screen): append_when_current_valid(current, menu, (_("remove entry"), self.removeCurrentService), level = 0) if current_root and current_root.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1: append_when_current_valid(current, menu, (_("remove new found flag"), self.removeNewFoundFlag), level = 0) + if isPlayable: + append_when_current_valid(current, menu, (_("Activate Picture in Picture"), self.showServiceInPiP), level = 0, key = "blue") + self.pipAvailable = True else: - menu.append((_("add bouquet"), self.showBouquetInputBox)) + menu.append(ChoiceEntryComponent(text = (_("add bouquet"), self.showBouquetInputBox))) append_when_current_valid(current, menu, (_("remove entry"), self.removeBouquet), level = 0) if inBouquet: # current list is editable? @@ -131,7 +138,7 @@ class ChannelContextMenu(Screen): if not csel.movemode: append_when_current_valid(current, menu, (_("enable move mode"), self.toggleMoveMode), level = 1) if not inBouquetRootList and current_root and not (current_root.flags & eServiceReference.isGroup): - menu.append((_("add marker"), self.showMarkerInputBox)) + menu.append(ChoiceEntryComponent(text = (_("add marker"), self.showMarkerInputBox))) if haveBouquets: append_when_current_valid(current, menu, (_("enable bouquet edit"), self.bouquetMarkStart), level = 0) else: @@ -156,11 +163,11 @@ class ChannelContextMenu(Screen): append_when_current_valid(current, menu, (_("end alternatives edit"), self.bouquetMarkEnd), level = 0) append_when_current_valid(current, menu, (_("abort alternatives edit"), self.bouquetMarkAbort), level = 0) - menu.append((_("back"), self.cancelClick)) - self["menu"] = MenuList(menu) + menu.append(ChoiceEntryComponent(text = (_("back"), self.cancelClick))) + self["menu"] = ChoiceList(menu) def okbuttonClick(self): - self["menu"].getCurrent()[1]() + self["menu"].getCurrent()[0][1]() def cancelClick(self): self.close(False) @@ -189,6 +196,23 @@ class ChannelContextMenu(Screen): self.close() else: self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR) + + def showServiceInPiP(self): + if not self.pipAvailable: + return + if self.session.pipshown: + del self.session.pip + self.session.pip = self.session.instantiateDialog(PictureInPicture) + self.session.pip.show() + newservice = self.csel.servicelist.getCurrent() + if self.session.pip.playService(newservice): + self.session.pipshown = True + self.session.pip.servicePath = self.csel.getCurrentServicePath() + self.close() + else: + self.session.pipshown = False + del self.session.pip + self.session.openWithCallback(self.close, MessageBox, _("Could not open Picture in Picture"), MessageBox.TYPE_ERROR) def addServiceToBouquetSelected(self): bouquets = self.csel.getBouquetList() @@ -526,7 +550,7 @@ class ChannelSelectionEdit: self.mutableList = self.getMutableList() # add all services from the current list to internal marked set in listboxservicecontent self.clearMarks() # this clears the internal marked set in the listboxservicecontent - self.saved_title = self.instance.getTitle() + self.saved_title = self.getTitle() pos = self.saved_title.find(')') new_title = self.saved_title[:pos+1] if type == EDIT_ALTERNATIVES: @@ -626,7 +650,7 @@ class ChannelSelectionEdit: self.mutableList = self.getMutableList() self.movemode = True self.pathChangeDisabled = True # no path change allowed in movemode - self.saved_title = self.instance.getTitle() + self.saved_title = self.getTitle() new_title = self.saved_title pos = self.saved_title.find(')') new_title = self.saved_title[:pos+1] + ' ' + _("[move mode]") + self.saved_title[pos+1:] @@ -653,9 +677,18 @@ class ChannelSelectionEdit: MODE_TV = 0 MODE_RADIO = 1 -# this makes it much simple to implement a selectable radio or tv mode :) -service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) || (type == 134)' -service_types_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2)' +# type 1 = digital television service +# type 4 = nvod reference service (NYI) +# type 17 = MPEG-2 HD digital television service +# type 22 = advanced codec SD digital television +# type 24 = advanced codec SD NVOD reference service (NYI) +# type 25 = advanced codec HD digital television +# type 27 = advanced codec HD NVOD reference service (NYI) +# type 2 = digital radio sound service +# type 10 = advanced codec digital radio sound service + +service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 22) || (type == 25) || (type == 134) || (type == 195)' +service_types_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2) || (type == 10)' class ChannelSelectionBase(Screen): def __init__(self, session): @@ -752,7 +785,7 @@ class ChannelSelectionBase(Screen): self.mode = MODE_TV self.servicePath = self.servicePathTV self.recallBouquetMode() - title = self.instance.getTitle() + title = self.getTitle() pos = title.find(" (") if pos != -1: title = title[:pos] @@ -763,7 +796,7 @@ class ChannelSelectionBase(Screen): self.mode = MODE_RADIO self.servicePath = self.servicePathRadio self.recallBouquetMode() - title = self.instance.getTitle() + title = self.getTitle() pos = title.find(" (") if pos != -1: title = title[:pos] @@ -805,7 +838,7 @@ class ChannelSelectionBase(Screen): return str def buildTitleString(self): - titleStr = self.instance.getTitle() + titleStr = self.getTitle() pos = titleStr.find(']') if pos == -1: pos = titleStr.find(')') @@ -1483,9 +1516,6 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS class SimpleChannelSelection(ChannelSelectionBase): def __init__(self, session, title): ChannelSelectionBase.__init__(self, session) - self.title = title - self.onShown.append(self.__onExecCallback) - self["actions"] = ActionMap(["OkCancelActions", "TvRadioActions"], { "cancel": self.close, @@ -1493,9 +1523,10 @@ class SimpleChannelSelection(ChannelSelectionBase): "keyRadio": self.setModeRadio, "keyTV": self.setModeTv, }) + self.title = title + self.onLayoutFinish.append(self.layoutFinished) - def __onExecCallback(self): - self.setTitle(self.title) + def layoutFinished(self): self.setModeTv() def channelSelected(self): # just return selected service