looking for the sleep timer? just forgot to add it to the infobar :)
[enigma2.git] / lib / python / Screens / InfoBarGenerics.py
index 4d4bd7aab798e4ab2732bcd6f4a14bf085465eed..62d4e969be45715602cdaa8b67443c5862e342a9 100644 (file)
@@ -12,6 +12,7 @@ from Components.ProgressBar import *
 from Components.ServiceEventTracker import ServiceEventTracker
 from Components.Sources.CurrentService import CurrentService
 from Components.Sources.EventInfo import EventInfo
+from Components.Sources.RadioText import RadioText
 from Components.Sources.FrontendStatus import FrontendStatus
 from Components.Sources.Boolean import Boolean
 from Components.Sources.Clock import Clock
@@ -31,6 +32,7 @@ from Screens.MinuteInput import MinuteInput
 from Screens.TimerSelection import TimerSelection
 from Screens.PictureInPicture import PictureInPicture
 from Screens.SubtitleDisplay import SubtitleDisplay
+from Screens.SleepTimerEdit import SleepTimerEdit
 from ServiceReference import ServiceReference
 
 from Tools import Notifications
@@ -84,7 +86,9 @@ class InfoBarShowHide:
        
        def startHideTimer(self):
                if self.__state == self.STATE_SHOWN and not self.__locked:
-                       self.hideTimer.start(5000, True)
+                       idx = config.usage.infobar_timeout.index
+                       if idx:
+                               self.hideTimer.start(idx*1000, True)
 
        def __onHide(self):
                self.__state = self.STATE_HIDDEN
@@ -189,7 +193,8 @@ class InfoBarNumberZap:
 #              print "You pressed number " + str(number)
                if number == 0:
                        self.servicelist.recallPrevService()
-                       self.doShow()
+                       if config.usage.show_infobar_on_zap.value:
+                               self.doShow()
                else:
                        self.session.openWithCallback(self.numberEntered, NumberZap, number)
 
@@ -246,7 +251,6 @@ class InfoBarChannelSelection:
                #instantiate forever
                self.servicelist = self.session.instantiateDialog(ChannelSelection)
                
-               print "__init__: servicelist is", self.servicelist
                if config.misc.initialchannelselection.value:
                        self.onShown.append(self.firstRun)
 
@@ -277,7 +281,6 @@ class InfoBarChannelSelection:
                self.onShown.remove(self.firstRun)
                config.misc.initialchannelselection.value = False
                config.misc.initialchannelselection.save()
-               print "servicelist is", self.servicelist
                self.switchChannelDown()
 
        def historyBack(self):
@@ -313,7 +316,8 @@ class InfoBarChannelSelection:
                else:
                        self.servicelist.moveUp()
                self.servicelist.zap()
-               self.doShow()
+               if config.usage.show_infobar_on_zap.value:
+                       self.doShow()
 
        def zapDown(self):
                if self.servicelist.inBouquet():
@@ -331,7 +335,8 @@ class InfoBarChannelSelection:
                else:
                        self.servicelist.moveDown()
                self.servicelist.zap()
-               self.doShow()
+               if config.usage.show_infobar_on_zap.value:
+                       self.doShow()
 
 class InfoBarMenu:
        """ Handles a menu action, to open the (main) menu """
@@ -340,12 +345,21 @@ class InfoBarMenu:
                        {
                                "mainMenu": (self.mainMenu, _("Enter main menu...")),
                        })
+               self.session.infobar = None
 
        def mainMenu(self):
                print "loading mainmenu XML..."
                menu = mdom.childNodes[0]
                assert menu.tagName == "menu", "root element in menu must be 'menu'!"
-               self.session.open(MainMenu, menu, menu.childNodes)
+
+               self.session.infobar = self
+               # so we can access the currently active infobar from screens opened from within the mainmenu
+               # at the moment used from the SubserviceSelection
+
+               self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu, menu.childNodes)
+
+       def mainMenuClosed(self, *val):
+               self.session.infobar = None
 
 class InfoBarSimpleEventView:
        """ Opens the Eventview for now/next """
@@ -527,6 +541,11 @@ class InfoBarEvent:
                self["Event_Now"] = EventInfo(self.session.nav, EventInfo.NOW)
                self["Event_Next"] = EventInfo(self.session.nav, EventInfo.NEXT)
 
+class InfoBarRadioText:
+       """provides radio (RDS) text info display"""
+       def __init__(self):
+               self["RadioText"] = RadioText(self.session.nav)
+
 class InfoBarServiceName:
        def __init__(self):
                self["CurrentService"] = CurrentService(self.session.nav)
@@ -800,13 +819,14 @@ class InfoBarSeek:
        def checkSkipShowHideLock(self):
                wantlock = self.seekstate != self.SEEK_STATE_PLAY
                
-               if self.lockedBecauseOfSkipping and not wantlock:
-                       self.unlockShow()
-                       self.lockedBecauseOfSkipping = False
+               if config.usage.show_infobar_on_zap.value:
+                       if self.lockedBecauseOfSkipping and not wantlock:
+                               self.unlockShow()
+                               self.lockedBecauseOfSkipping = False
                
-               if wantlock and not self.lockedBecauseOfSkipping:
-                       self.lockShow()
-                       self.lockedBecauseOfSkipping = True
+                       if wantlock and not self.lockedBecauseOfSkipping:
+                               self.lockShow()
+                               self.lockedBecauseOfSkipping = True
 
        def __evEOF(self):
                if self.seekstate != self.SEEK_STATE_PLAY:
@@ -926,8 +946,8 @@ class InfoBarTimeshift:
                print "enable timeshift"
                ts = self.getTimeshift()
                if ts is None:
-#                      self.session.open(MessageBox, _("Timeshift not possible!"), MessageBox.TYPE_ERROR)
-#                      print "no ts interface"
+                       self.session.open(MessageBox, _("Timeshift not possible!"), MessageBox.TYPE_ERROR)
+                       print "no ts interface"
                        return 0;
                
                if self.timeshift_enabled:
@@ -1101,7 +1121,6 @@ class InfoBarPlugins:
        def __init__(self):
                self.addExtension(extension = self.getPluginList, type = InfoBarExtensions.EXTENSION_LIST)
                
-               
        def getPluginName(self, name):
                return name
                
@@ -1114,47 +1133,28 @@ class InfoBarPlugins:
        def runPlugin(self, plugin):
                plugin(session = self.session)
 
-# depends on InfoBarExtensions and InfoBarSubtitleSupport
-class InfoBarSubtitles:
+# depends on InfoBarExtensions
+class InfoBarSleepTimer:
        def __init__(self):
-               self.addExtension((self.getDisableSubtitleName, self.disableSubtitles, self.subtitlesEnabled), "4")
-               self.addExtension(extension = self.getSubtitleList, type = InfoBarExtensions.EXTENSION_LIST)
+               self.addExtension((self.getSleepTimerName, self.showSleepTimerSetup, self.available), "1")      
                
-       def getDisableSubtitleName(self):
-               return _("Disable subtitles")
+       def available(self):
+               return True
 
-       def getSubtitleList(self):
-               list = []
-               s = self.getCurrentServiceSubtitle()
-               l = s and s.getSubtitleList() or [ ]
+       def getSleepTimerName(self):
+               return _("Sleep Timer")
 
-               for x in l:
-                       list.append(((boundFunction(self.getSubtitleEntryName, x[0]), boundFunction(self.enableSubtitle, x[1]), lambda: True), None))
-               return list
-       
-       def getSubtitleEntryName(self, name):
-               return "Enable Subtitles: " + name
-
-       def enableSubtitle(self, subtitles):
-               print "enable subitles", subtitles
-               self.selected_subtitle = subtitles
-               self.subtitles_enabled = True
-               
-       def subtitlesEnabled(self):
-               return self.subtitles_enabled
-               
-       def disableSubtitles(self):
-               self.subtitles_enabled = False
+       def showSleepTimerSetup(self):
+               self.session.open(SleepTimerEdit)
 
 # depends on InfoBarExtensions
 class InfoBarPiP:
        def __init__(self):
                self.session.pipshown = False
-               
-               self.addExtension((self.getShowHideName, self.showPiP, self.available), "1")
-               self.addExtension((self.getMoveName, self.movePiP, self.pipShown), "2")
-               self.addExtension((self.getSwapName, self.swapPiP, self.pipShown), "3")
 
+               self.addExtension((self.getShowHideName, self.showPiP, self.available), "blue")
+               self.addExtension((self.getMoveName, self.movePiP, self.pipShown), "green")
+               self.addExtension((self.getSwapName, self.swapPiP, self.pipShown), "yellow")
        
        def available(self):
                return True
@@ -1356,9 +1356,8 @@ class InfoBarAudioSelection:
                                language = i.getLanguage()
                                description = i.getDescription()
        
-                               if len(language) == 3:
-                                       if language in LanguageCodes:
-                                               language = LanguageCodes[language][0]
+                               if LanguageCodes.has_key(language):
+                                       language = LanguageCodes[language][0]
        
                                if len(description):
                                        description += " (" + language + ")"
@@ -1403,7 +1402,6 @@ class InfoBarAudioSelection:
                        self.audioChannel.selectChannel(mode[1])
                del self.audioChannel
 
-               
 class InfoBarSubserviceSelection:
        def __init__(self):
                self["SubserviceSelectionAction"] = HelpableActionMap(self, "InfobarSubserviceSelectionActions",
@@ -1453,7 +1451,8 @@ class InfoBarSubserviceSelection:
                                if newservice.valid():
                                        del subservices
                                        del service
-                                       self.doShow()
+                                       if config.usage.show_infobar_on_zap.value:
+                                               self.doShow()
                                        self.session.nav.playService(newservice)
 
        def subserviceSelection(self):
@@ -1485,7 +1484,8 @@ class InfoBarSubserviceSelection:
                                        self.session.open(SubservicesQuickzap, service[2])
                        else:
                                self["SubserviceQuickzapAction"].setEnabled(True)
-                               self.doShow()
+                               if config.usage.show_infobar_on_zap.value:
+                                       self.doShow()
                                self.session.nav.playService(service[1])
 
 class InfoBarAdditionalInfo:
@@ -1762,15 +1762,26 @@ class InfoBarSubtitleSupport(object):
 
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                        {
-                               iPlayableService.evStart: self.__serviceStarted,
+                               iPlayableService.evEnd: self.__serviceStopped,
+                               iPlayableService.evUpdatedInfo: self.__updatedInfo
                        })
+               self.cached_subtitle_checked = False
 
-       def __serviceStarted(self):
-               # reenable if it was enabled
-               r = self.__subtitles_enabled
+       def __serviceStopped(self):
+               self.subtitle_window.hide()
                self.__subtitles_enabled = False
-               self.__selected_subtitle = None
-               self.setSubtitlesEnable(r)
+               self.cached_subtitle_checked = False
+
+       def __updatedInfo(self):
+               if not self.cached_subtitle_checked:
+                       subtitle = self.getCurrentServiceSubtitle()
+                       self.cached_subtitle_checked = True
+                       if subtitle:
+                               self.__selected_subtitle = subtitle.getCachedSubtitle()
+                       if self.__selected_subtitle:
+                               subtitle.enableSubtitles(self.subtitle_window.instance, self.selected_subtitle)
+                               self.subtitle_window.show()
+                               self.__subtitles_enabled = True
 
        def getCurrentServiceSubtitle(self):
                service = self.session.nav.getCurrentService()
@@ -1778,7 +1789,7 @@ class InfoBarSubtitleSupport(object):
        
        def setSubtitlesEnable(self, enable=True):
                subtitle = self.getCurrentServiceSubtitle()
-               if enable and self.__selected_subtitle:
+               if enable and self.__selected_subtitle is not None:
                        if subtitle and not self.__subtitles_enabled:
                                subtitle.enableSubtitles(self.subtitle_window.instance, self.selected_subtitle)
                                self.subtitle_window.show()
@@ -1786,17 +1797,11 @@ class InfoBarSubtitleSupport(object):
                else:
                        if subtitle:
                                subtitle.disableSubtitles(self.subtitle_window.instance)
-
-                       self.subtitle_window.hide()
                        self.__subtitles_enabled = False
+                       self.subtitle_window.hide()
 
        def setSelectedSubtitle(self, subtitle):
-               if self.__selected_subtitle != subtitle and self.subtitles_enabled:
-                       # kick
-                       self.__selected_subtitle = subtitle
-                       self.__serviceStarted()
-               else:
-                       self.__selected_subtitle = subtitle
+               self.__selected_subtitle = subtitle
 
        subtitles_enabled = property(lambda self: self.__subtitles_enabled, setSubtitlesEnable)
        selected_subtitle = property(lambda self: self.__selected_subtitle, setSelectedSubtitle)