remove onSelectionChanged callbacks before deleting the configInstance["config"]...
[enigma2.git] / lib / python / Screens / InfoBar.py
index ad38f46ab5ec286b567db1170f54f0268fb03477..a6b2516ec1f1ccd121beb76e843280a4b3013d47 100644 (file)
@@ -1,4 +1,4 @@
-from Tools.Profile import profile, profile_final
+from Tools.Profile import profile
 
 from Screen import Screen
 
 
 from Screen import Screen
 
@@ -20,30 +20,30 @@ from Screens.InfoBarGenerics import InfoBarShowHide, \
        InfoBarSubserviceSelection, InfoBarShowMovies, InfoBarTimeshift,  \
        InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView, \
        InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \
        InfoBarSubserviceSelection, InfoBarShowMovies, InfoBarTimeshift,  \
        InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView, \
        InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \
-       InfoBarSubtitleSupport, InfoBarPiP, InfoBarPlugins, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport
+       InfoBarSubtitleSupport, InfoBarPiP, InfoBarPlugins, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport, InfoBarJobman
 
 profile("LOAD:InitBar_Components")
 from Components.ActionMap import HelpableActionMap
 from Components.config import config
 
 profile("LOAD:InitBar_Components")
 from Components.ActionMap import HelpableActionMap
 from Components.config import config
-from Components.ServiceEventTracker import ServiceEventTracker
+from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
 
 profile("LOAD:HelpableScreen")
 from Screens.HelpMenu import HelpableScreen
 
 
 profile("LOAD:HelpableScreen")
 from Screens.HelpMenu import HelpableScreen
 
-class InfoBar(InfoBarShowHide,
+class InfoBar(InfoBarBase, InfoBarShowHide,
        InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder,
        InfoBarInstantRecord, InfoBarAudioSelection, 
        HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish,
        InfoBarSubserviceSelection, InfoBarTimeshift, InfoBarSeek,
        InfoBarSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions,
        InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder,
        InfoBarInstantRecord, InfoBarAudioSelection, 
        HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish,
        InfoBarSubserviceSelection, InfoBarTimeshift, InfoBarSeek,
        InfoBarSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions,
-       InfoBarPiP, InfoBarPlugins, InfoBarSubtitleSupport, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport,
+       InfoBarPiP, InfoBarPlugins, InfoBarSubtitleSupport, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport, InfoBarJobman,
        Screen):
        
        ALLOW_SUSPEND = True
        Screen):
        
        ALLOW_SUSPEND = True
+       instance = None
 
        def __init__(self, session):
                Screen.__init__(self, session)
 
        def __init__(self, session):
                Screen.__init__(self, session)
-
                self["actions"] = HelpableActionMap(self, "InfobarActions",
                        {
                                "showMovies": (self.showMovies, _("Play recorded movies...")),
                self["actions"] = HelpableActionMap(self, "InfobarActions",
                        {
                                "showMovies": (self.showMovies, _("Play recorded movies...")),
@@ -52,13 +52,13 @@ class InfoBar(InfoBarShowHide,
                        }, prio=2)
                
                for x in HelpableScreen, \
                        }, prio=2)
                
                for x in HelpableScreen, \
-                               InfoBarShowHide, \
+                               InfoBarBase, InfoBarShowHide, \
                                InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder, \
                                InfoBarInstantRecord, InfoBarAudioSelection, \
                                InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarSubserviceSelection, \
                                InfoBarTimeshift, InfoBarSeek, InfoBarSummarySupport, InfoBarTimeshiftState, \
                                InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder, \
                                InfoBarInstantRecord, InfoBarAudioSelection, \
                                InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarSubserviceSelection, \
                                InfoBarTimeshift, InfoBarSeek, InfoBarSummarySupport, InfoBarTimeshiftState, \
-                               InfoBarTeletextPlugin, InfoBarExtensions, InfoBarPiP, InfoBarSubtitleSupport, InfoBarSleepTimer, \
-                               InfoBarPlugins, InfoBarServiceErrorPopupSupport:
+                               InfoBarTeletextPlugin, InfoBarExtensions, InfoBarPiP, InfoBarSubtitleSupport, InfoBarJobman, \
+                               InfoBarSleepTimer, InfoBarPlugins, InfoBarServiceErrorPopupSupport:
                        x.__init__(self)
 
                self.helpList.append((self["actions"], "InfobarActions", [("showMovies", _("view recordings..."))]))
                        x.__init__(self)
 
                self.helpList.append((self["actions"], "InfobarActions", [("showMovies", _("view recordings..."))]))
@@ -70,6 +70,11 @@ class InfoBar(InfoBarShowHide,
                        })
 
                self.current_begin_time=0
                        })
 
                self.current_begin_time=0
+               assert InfoBar.instance is None, "class InfoBar is a singleton class and just one instance of this class is allowed!"
+               InfoBar.instance = self
+
+       def __onClose(self):
+               InfoBar.instance = None
 
        def __eventInfoChanged(self):
                if self.execing:
 
        def __eventInfoChanged(self):
                if self.execing:
@@ -118,7 +123,7 @@ class InfoBar(InfoBarShowHide,
                if service is not None:
                        self.session.open(MoviePlayer, service)
 
                if service is not None:
                        self.session.open(MoviePlayer, service)
 
-class MoviePlayer(InfoBarShowHide, \
+class MoviePlayer(InfoBarBase, InfoBarShowHide, \
                InfoBarMenu, \
                InfoBarSeek, InfoBarShowMovies, InfoBarAudioSelection, HelpableScreen, InfoBarNotifications,
                InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView,
                InfoBarMenu, \
                InfoBarSeek, InfoBarShowMovies, InfoBarAudioSelection, HelpableScreen, InfoBarNotifications,
                InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView,
@@ -137,7 +142,7 @@ class MoviePlayer(InfoBarShowHide, \
                        })
                
                for x in HelpableScreen, InfoBarShowHide, InfoBarMenu, \
                        })
                
                for x in HelpableScreen, InfoBarShowHide, InfoBarMenu, \
-                               InfoBarSeek, InfoBarShowMovies, \
+                               InfoBarBase, InfoBarSeek, InfoBarShowMovies, \
                                InfoBarAudioSelection, InfoBarNotifications, InfoBarSimpleEventView, \
                                InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, \
                                InfoBarMoviePlayerSummarySupport, InfoBarSubtitleSupport, \
                                InfoBarAudioSelection, InfoBarNotifications, InfoBarSimpleEventView, \
                                InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, \
                                InfoBarMoviePlayerSummarySupport, InfoBarSubtitleSupport, \
@@ -147,6 +152,10 @@ class MoviePlayer(InfoBarShowHide, \
                self.lastservice = self.session.nav.getCurrentlyPlayingServiceReference()
                self.session.nav.playService(service)
                self.returning = False
                self.lastservice = self.session.nav.getCurrentlyPlayingServiceReference()
                self.session.nav.playService(service)
                self.returning = False
+               self.onClose.append(self.__onClose)
+
+       def __onClose(self):
+               self.session.nav.playService(self.lastservice)
 
        def leavePlayer(self):
                self.is_closing = True
 
        def leavePlayer(self):
                self.is_closing = True
@@ -166,14 +175,13 @@ class MoviePlayer(InfoBarShowHide, \
        def leavePlayerConfirmed(self, answer):
                answer = answer and answer[1]
                if answer == "quit":
        def leavePlayerConfirmed(self, answer):
                answer = answer and answer[1]
                if answer == "quit":
-                       self.session.nav.playService(self.lastservice)
                        config.movielist.last_videodir.cancel()
                        self.close()
                elif answer == "movielist":
                        ref = self.session.nav.getCurrentlyPlayingServiceReference()
                        self.returning = True
                        self.session.openWithCallback(self.movieSelected, MovieSelection, ref)
                        config.movielist.last_videodir.cancel()
                        self.close()
                elif answer == "movielist":
                        ref = self.session.nav.getCurrentlyPlayingServiceReference()
                        self.returning = True
                        self.session.openWithCallback(self.movieSelected, MovieSelection, ref)
-                       self.session.nav.playService(self.lastservice)
+                       self.session.nav.stopService()
                elif answer == "restart":
                        self.doSeek(0)
 
                elif answer == "restart":
                        self.doSeek(0)