X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/9fe975821792486e21350b365217717ed29ca9bb..2f71009743e6a1a516b82ac06c4a89ee4d6ea703:/lib/python/Screens/InfoBarGenerics.py diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 528bca2e..d43c9dda 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -262,6 +262,18 @@ class InfoBarChannelSelection: "openServiceList": (self.openServiceList, _("open service list")), }) + def showTvChannelList(self, zap=False): + self.servicelist.setModeTv() + if zap: + self.servicelist.zap() + self.session.execDialog(self.servicelist) + + def showRadioChannelList(self, zap=False): + self.servicelist.setModeRadio() + if zap: + self.servicelist.zap() + self.session.execDialog(self.servicelist) + def firstRun(self): self.onShown.remove(self.firstRun) config.misc.initialchannelselection.value = 0 @@ -1017,7 +1029,7 @@ from Screens.PiPSetup import PiPSetup class InfoBarExtensions: def __init__(self): - self.pipshown = False + self.session.pipshown = False self["InstantExtensionsActions"] = HelpableActionMap(self, "InfobarExtensions", { @@ -1032,9 +1044,9 @@ class InfoBarExtensions: def extensions(self): list = [] - if self.pipshown == False: + if self.session.pipshown == False: list.append((_("Activate Picture in Picture"), self.PIPON)) - elif self.pipshown == True: + elif self.session.pipshown == True: list.append((_("Disable Picture in Picture"), self.PIPOFF)) list.append((_("Move Picture in Picture"), self.MOVEPIP)) list.append((_("Swap services"), self.PIPSWAP)) @@ -1050,26 +1062,32 @@ class InfoBarExtensions: def extensionCallback(self, answer): if answer is not None: if answer[1] == self.PIPON: - self.pip = self.session.instantiateDialog(PictureInPicture) - + self.session.pip = self.session.instantiateDialog(PictureInPicture) newservice = self.session.nav.getCurrentlyPlayingServiceReference() - - if self.pip.playService(newservice): - self.pipshown = True + if self.session.pip.playService(newservice): + self.session.pipshown = True + self.session.pip.servicePath = self.servicelist.getCurrentServicePath() else: - self.pipshown = False - del self.pip + self.session.pipshown = False + del self.session.pip self.session.nav.playService(newservice) elif answer[1] == self.PIPOFF: - del self.pip - self.pipshown = False + del self.session.pip + self.session.pipshown = False elif answer[1] == self.PIPSWAP: - swapservice = self.pip.getCurrentService() - self.pip.playService(self.session.nav.getCurrentlyPlayingServiceReference()) - self.session.nav.playService(swapservice) - + swapservice = self.session.nav.getCurrentlyPlayingServiceReference() + if self.session.pip.servicePath: + servicepath = self.servicelist.getCurrentServicePath() + ref=servicepath[len(servicepath)-1] + pipref=self.session.pip.getCurrentService() + self.session.pip.playService(swapservice) + self.servicelist.setCurrentServicePath(self.session.pip.servicePath) + if pipref.toString() != ref.toString(): # is a subservice ? + self.session.nav.stopService() # stop portal + self.session.nav.playService(pipref) # start subservice + self.session.pip.servicePath=servicepath elif answer[1] == self.MOVEPIP: - self.session.open(PiPSetup, pip = self.pip) + self.session.open(PiPSetup, pip = self.session.pip) elif answer[1] == self.ENABLE_SUBTITLE: self.selected_subtitle = answer[2] self.subtitles_enabled = True @@ -1093,7 +1111,7 @@ class InfoBarInstantRecord: if entry is not None and entry != -1: self.session.nav.RecordTimer.removeEntry(self.recording[entry]) self.recording.remove(self.recording[entry]) - + def startInstantRecording(self, limitEvent = False): serviceref = self.session.nav.getCurrentlyPlayingServiceReference() @@ -1211,17 +1229,19 @@ class InfoBarAudioSelection: def audioSelection(self): service = self.session.nav.getCurrentService() - audio = service.audioTracks() + audio = service and service.audioTracks() self.audioTracks = audio - n = audio.getNumberOfTracks() - if n > 0: -# self.audioChannel = service.audioChannel() -# config.audio.audiochannel = configElement_nonSave("config.audio.audiochannel", configSelection, self.audioChannel.getCurrentChannel(), (("left", _("Left >")), ("stereo", _("< Stereo >")), ("right", _("< Right")))) - tlist = [] + n = audio and audio.getNumberOfTracks() + keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n + tlist = [] + print "tlist:", tlist + if n and n > 0: + self.audioChannel = service.audioChannel() + for x in range(n): i = audio.getTrackInfo(x) language = i.getLanguage() - description = i.getDescription(); + description = i.getDescription() if len(language) == 3: if language in LanguageCodes: @@ -1237,25 +1257,38 @@ class InfoBarAudioSelection: selectedAudio = tlist[0][1] tlist.sort(lambda x,y : cmp(x[0], y[0])) -# tlist.insert(0, getConfigListEntry(_("Audio Channel"), config.audio.audiochannel)) - - selection = 0 + selection = 2 for x in tlist: if x[1] != selectedAudio: selection += 1 else: break - - self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection) + + tlist = [([_("Left"), _("Stereo"), _("Right")][self.audioChannel.getCurrentChannel()], "mode"), ("--", "")] + tlist + self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection, keys = keys) else: del self.audioTracks def audioSelected(self, audio): if audio is not None: - self.audioTracks.selectTrack(audio[1]) + if isinstance(audio[1], str): + if audio[1] == "mode": + keys = ["red", "green", "yellow"] + selection = self.audioChannel.getCurrentChannel() + tlist = [(_("left"), 0), (_("stereo"), 1), (_("right"), 2)] + self.session.openWithCallback(self.modeSelected, ChoiceBox, title=_("Select audio mode"), list = tlist, selection = selection, keys = keys) + else: + del self.audioChannel + if self.session.nav.getCurrentService().audioTracks().getNumberOfTracks() > audio[1]: + self.audioTracks.selectTrack(audio[1]) + else: + del self.audioChannel del self.audioTracks -# del self.audioChannel -# del config.audio.audiochannel + + def modeSelected(self, mode): + if mode is not None: + self.audioChannel.selectChannel(mode[1]) + del self.audioChannel class InfoBarSubserviceSelection: def __init__(self): @@ -1276,8 +1309,8 @@ class InfoBarSubserviceSelection: def checkSubservicesAvail(self, ev): if ev == iPlayableService.evUpdatedEventInfo: service = self.session.nav.getCurrentService() - subservices = service.subServices() - if subservices.getNumberOfSubservices() == 0: + subservices = service and service.subServices() + if not subservices or subservices.getNumberOfSubservices() == 0: self["SubserviceQuickzapAction"].setEnabled(False) def nextSubservice(self): @@ -1288,9 +1321,9 @@ class InfoBarSubserviceSelection: def changeSubservice(self, direction): service = self.session.nav.getCurrentService() - subservices = service.subServices() - n = subservices.getNumberOfSubservices() - if n > 0: + subservices = service and service.subServices() + n = subservices and subservices.getNumberOfSubservices() + if n and n > 0: selection = -1 ref = self.session.nav.getCurrentlyPlayingServiceReference() for x in range(n): @@ -1310,11 +1343,11 @@ class InfoBarSubserviceSelection: def subserviceSelection(self): service = self.session.nav.getCurrentService() - subservices = service.subServices() + subservices = service and service.subServices() - n = subservices.getNumberOfSubservices() + n = subservices and subservices.getNumberOfSubservices() selection = 0 - if n > 0: + if n and n > 0: ref = self.session.nav.getCurrentlyPlayingServiceReference() tlist = [] for x in range(n): @@ -1332,10 +1365,15 @@ class InfoBarSubserviceSelection: class InfoBarAdditionalInfo: def __init__(self): + self["NimA"] = Pixmap() + self["NimB"] = Pixmap() + self["TextActive"] = Pixmap() self["DolbyActive"] = Pixmap() self["CryptActive"] = Pixmap() self["FormatActive"] = Pixmap() - + self["NimA_Active"] = Pixmap() + self["NimB_Active"] = Pixmap() + self["ButtonRed"] = PixmapConditional(withTimer = False) self["ButtonRed"].setConnect(lambda: harddiskmanager.HDDCount() > 0) self.onLayoutFinish.append(self["ButtonRed"].update) @@ -1361,6 +1399,19 @@ class InfoBarAdditionalInfo: self.onLayoutFinish.append(self["ButtonBlueText"].update) self.session.nav.event.append(self.gotServiceEvent) # we like to get service events + res_mgr = eDVBResourceManagerPtr() + if eDVBResourceManager.getInstance(res_mgr) == 0: + res_mgr.frontendUseMaskChanged.get().append(self.tunerUseMaskChanged) + + def tunerUseMaskChanged(self, mask): + if mask&1: + self["NimA_Active"].show() + else: + self["NimA_Active"].hide() + if mask&2: + self["NimB_Active"].show() + else: + self["NimB_Active"].hide() def hideSubServiceIndication(self): self["ButtonGreen"].hide() @@ -1372,15 +1423,25 @@ class InfoBarAdditionalInfo: def checkFormat(self, service): info = service.info() - if info is not None: + if info: aspect = info.getInfo(iServiceInformation.sAspect) if aspect in [ 3, 4, 7, 8, 0xB, 0xC, 0xF, 0x10 ]: self["FormatActive"].show() - else: - self["FormatActive"].hide() + return + self["FormatActive"].hide() + + def checkText(self, service): + info = service.info() + if info: + tpid = info.getInfo(iServiceInformation.sTXTPID) + if tpid != -1: + self["TextActive"].show() + return + self["TextActive"].hide() def checkSubservices(self, service): - if service.subServices().getNumberOfSubservices() > 0: + subservices = service.subServices() + if subservices and subservices.getNumberOfSubservices() > 0: self.showSubServiceIndication() else: self.hideSubServiceIndication() @@ -1389,7 +1450,7 @@ class InfoBarAdditionalInfo: # FIXME dolby = False audio = service.audioTracks() - if audio is not None: + if audio: n = audio.getNumberOfTracks() for x in range(n): i = audio.getTrackInfo(x) @@ -1404,25 +1465,41 @@ class InfoBarAdditionalInfo: def checkCrypted(self, service): info = service.info() - if info is not None: - if info.getInfo(iServiceInformation.sIsCrypted) > 0: - self["CryptActive"].show() - else: - self["CryptActive"].hide() + if info and info.getInfo(iServiceInformation.sIsCrypted) > 0: + self["CryptActive"].show() + else: + self["CryptActive"].hide() + + def checkTunerState(self, service): + info = service.frontendInfo() + feNumber = info and info.getFrontendInfo(iFrontendInformation.frontendNumber) + if feNumber is None: + self["NimA"].hide() + self["NimB"].hide() + elif feNumber == 0: + self["NimB"].hide() + self["NimA"].show() + elif feNumber == 1: + self["NimA"].hide() + self["NimB"].show() def gotServiceEvent(self, ev): service = self.session.nav.getCurrentService() - if ev == iPlayableService.evUpdatedEventInfo: + if ev == iPlayableService.evStart: + self.checkTunerState(service) + elif ev == iPlayableService.evUpdatedEventInfo: self.checkSubservices(service) self.checkFormat(service) elif ev == iPlayableService.evUpdatedInfo: self.checkCrypted(service) self.checkDolby(service) + self.checkText(service) elif ev == iPlayableService.evEnd: self.hideSubServiceIndication() self["CryptActive"].hide() self["DolbyActive"].hide() self["FormatActive"].hide() + self["TextActive"].hide() class InfoBarNotifications: def __init__(self):