from Components.ProgressBar import *
from Components.ServiceEventTracker import ServiceEventTracker
from Components.ServiceName import ServiceName
-from Components.config import config, configElement, ConfigSubsection, configSequence, configElementBoolean
+from Components.config import config, configElement, ConfigSubsection, configSequence, configElementBoolean, configSelection, configElement_nonSave, getConfigListEntry
from Components.config import configfile, configsequencearg
from Components.TimerList import TimerEntryComponent
from Components.TunerInfo import TunerInfo
from Screens.MinuteInput import MinuteInput
from Screens.TimerSelection import TimerSelection
from Screens.PictureInPicture import PictureInPicture
+from Screens.SubtitleDisplay import SubtitleDisplay
from ServiceReference import ServiceReference
from Tools import Notifications
PIPON = 0
PIPOFF = 1
MOVEPIP = 2
+ PIPSWAP = 3
+ ENABLE_SUBTITLE = 4
def extensions(self):
list = []
elif self.pipshown == True:
list.append((_("Disable Picture in Picture"), self.PIPOFF))
list.append((_("Move Picture in Picture"), self.MOVEPIP))
+ list.append((_("Swap services"), self.PIPSWAP))
+
+ s = self.getCurrentServiceSubtitle()
+
+ for x in s.getSubtitleList():
+ list.append(("DEBUG: Enable Subtitles: " + x[0], self.ENABLE_SUBTITLE, x))
+
self.session.openWithCallback(self.extensionCallback, ChoiceBox, title=_("Please choose an extension..."), list = list)
def extensionCallback(self, answer):
if answer is not None:
if answer[1] == self.PIPON:
-# self.session.nav.stopService()
self.pip = self.session.instantiateDialog(PictureInPicture)
- #self.pip.show()
newservice = self.session.nav.getCurrentlyPlayingServiceReference()
- self.pipservice = eServiceCenter.getInstance().play(newservice)
- if self.pipservice and not self.pipservice.setTarget(1):
- self.pipservice.start()
+
+ if self.pip.playService(newservice):
self.pipshown = True
else:
- self.pipservice = None
+ self.pipshown = False
del self.pip
self.session.nav.playService(newservice)
elif answer[1] == self.PIPOFF:
- #self.pip.hide()
- self.pipservice = None
del self.pip
self.pipshown = False
+ elif answer[1] == self.PIPSWAP:
+ swapservice = self.pip.getCurrentService()
+ self.pip.playService(self.session.nav.getCurrentlyPlayingServiceReference())
+ self.session.nav.playService(swapservice)
+
elif answer[1] == self.MOVEPIP:
self.session.open(PiPSetup, pip = self.pip)
+ elif answer[1] == self.ENABLE_SUBTITLE:
+ self.selected_subtitle = answer[2]
+ self.subtitles_enabled = True
from RecordTimer import parseEvent
def audioSelection(self):
service = self.session.nav.getCurrentService()
audio = service.audioTracks()
- self.audio = audio
+ 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 = []
for x in range(n):
i = audio.getTrackInfo(x)
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
for x in tlist:
if x[1] != selectedAudio:
break
self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection)
+ else:
+ del self.audioTracks
def audioSelected(self, audio):
if audio is not None:
- self.audio.selectTrack(audio[1])
- del self.audio
+ self.audioTracks.selectTrack(audio[1])
+ del self.audioTracks
+# del self.audioChannel
+# del config.audio.audiochannel
class InfoBarSubserviceSelection:
def __init__(self):
def __init__(self):
self.onExecBegin.append(self.checkNotifications)
Notifications.notificationAdded.append(self.checkNotificationsIfExecing)
+ self.onClose.append(self.__removeNotification)
+
+ def __removeNotification(self):
+ Notifications.notificationAdded.remove(self.checkNotificationsIfExecing)
def checkNotificationsIfExecing(self):
if self.execing:
if len(Notifications.notifications):
n = Notifications.notifications[0]
Notifications.notifications = Notifications.notifications[1:]
- print "open",n
cb = n[0]
if cb is not None:
self.session.openWithCallback(cb, n[1], *n[2], **n[3])
def startTeletext(self):
self.teletext_plugin(session=self.session, service=self.session.nav.getCurrentService())
+
+class InfoBarSubtitleSupport(object):
+ def __init__(self):
+ object.__init__(self)
+ self.subtitle_window = self.session.instantiateDialog(SubtitleDisplay)
+ self.__subtitles_enabled = False
+
+ self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
+ {
+ iPlayableService.evStart: self.__serviceStarted,
+ })
+
+ def __serviceStarted(self):
+ # reenable if it was enabled
+ r = self.__subtitles_enabled
+ self.__subtitles_enabled = False
+ self.__selected_subtitle = None
+ self.setSubtitlesEnable(r)
+
+ def getCurrentServiceSubtitle(self):
+ service = self.session.nav.getCurrentService()
+ return service and service.subtitle()
+
+ def setSubtitlesEnable(self, enable=True):
+ subtitle = self.getCurrentServiceSubtitle()
+ if enable and self.__selected_subtitle:
+ if subtitle and not self.__subtitles_enabled:
+ subtitle.enableSubtitles(self.subtitle_window.instance, self.selected_subtitle)
+ self.subtitle_window.show()
+ self.__subtitles_enabled = True
+ else:
+ if subtitle:
+ subtitle.disableSubtitles(self.subtitle_window.instance)
+
+ self.subtitle_window.hide()
+ self.__subtitles_enabled = False
+
+ def setSelectedSubtitle(self, subtitle):
+ if self.__selected_subtitle != subtitle and self.subtitles_enabled:
+ subtitle = self.getCurrentServiceSubtitle()
+
+ # kick
+ self.__serviceStarted()
+ self.__selected_subtitle = subtitle
+
+ subtitles_enabled = property(lambda self: self.__subtitles_enabled, setSubtitlesEnable)
+ selected_subtitle = property(lambda self: self.__selected_subtitle, setSelectedSubtitle)