show bskyb HD services in channelselection
[enigma2.git] / lib / python / Screens / InfoBarGenerics.py
index 3320d23d8e1982c43a8bbbe60e28e776cac96cdc..b62a466b7d339962ce3766f1f390013dcb62b53d 100644 (file)
@@ -9,11 +9,8 @@ from Components.Label import Label
 from Components.Pixmap import Pixmap
 from Components.PluginComponent import plugins
 from Components.ServiceEventTracker import ServiceEventTracker
-from Components.Sources.CurrentService import CurrentService
-from Components.Sources.EventInfo import EventInfo
-from Components.Sources.FrontendStatus import FrontendStatus
+from Components.Sources.Source import ObsoleteSource
 from Components.Sources.Boolean import Boolean
-from Components.Sources.Clock import Clock
 from Components.config import config, ConfigBoolean, ConfigClock
 from EpgSelection import EPGSelection
 from Plugins.Plugin import PluginDescriptor
@@ -49,7 +46,6 @@ from Menu import MainMenu, mdom
 class InfoBarDish:
        def __init__(self):
                self.dishDialog = self.session.instantiateDialog(Dish)
-               self.onLayoutFinish.append(self.dishDialog.show)
 
 class InfoBarShowHide:
        """ InfoBar show/hide control, accepts toggleShow and hide actions, might start
@@ -75,7 +71,7 @@ class InfoBarShowHide:
                self.__locked = 0
 
                self.hideTimer = eTimer()
-               self.hideTimer.timeout.get().append(self.doTimerHide)
+               self.hideTimer.callback.append(self.doTimerHide)
                self.hideTimer.start(5000, True)
 
                self.onShow.append(self.__onShow)
@@ -158,7 +154,7 @@ class NumberZap(Screen):
 
                self["number"] = Label(self.field)
 
-               self["actions"] = NumberActionMap( [ "SetupActions" ], 
+               self["actions"] = NumberActionMap( [ "SetupActions" ],
                        {
                                "cancel": self.quit,
                                "ok": self.keyOK,
@@ -175,7 +171,7 @@ class NumberZap(Screen):
                        })
 
                self.Timer = eTimer()
-               self.Timer.timeout.get().append(self.keyOK)
+               self.Timer.callback.append(self.keyOK)
                self.Timer.start(3000, True)
 
 class InfoBarNumberZap:
@@ -203,7 +199,8 @@ class InfoBarNumberZap:
                        else:
                                self.servicelist.recallPrevService()
                else:
-                       self.session.openWithCallback(self.numberEntered, NumberZap, number)
+                       if self.has_key("TimeshiftActions") and not self.timeshift_enabled:
+                               self.session.openWithCallback(self.numberEntered, NumberZap, number)
 
        def numberEntered(self, retval):
 #              print self.servicelist
@@ -251,7 +248,7 @@ class InfoBarNumberZap:
 config.misc.initialchannelselection = ConfigBoolean(default = True)
 
 class InfoBarChannelSelection:
-       """ ChannelSelection - handles the channelSelection dialog and the initial 
+       """ ChannelSelection - handles the channelSelection dialog and the initial
        channelChange actions which open the channelSelection dialog """
        def __init__(self):
                #instantiate forever
@@ -343,7 +340,7 @@ class InfoBarChannelSelection:
 class InfoBarMenu:
        """ Handles a menu action, to open the (main) menu """
        def __init__(self):
-               self["MenuActions"] = HelpableActionMap(self, "InfobarMenuActions", 
+               self["MenuActions"] = HelpableActionMap(self, "InfobarMenuActions",
                        {
                                "mainMenu": (self.mainMenu, _("Enter main menu...")),
                        })
@@ -404,7 +401,7 @@ class InfoBarEPG:
                self.dlg_stack = [ ]
                self.bouquetSel = None
                self.eventView = None
-               self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", 
+               self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions",
                        {
                                "showEventInfo": (self.openEventView, _("show EPG...")),
                                "showSingleServiceEPG": (self.openSingleServiceEPG, _("show single service EPG...")),
@@ -485,7 +482,7 @@ class InfoBarEPG:
                                self.dlg_stack.append(self.bouquetSel)
                        else:
                                self.bouquetSel = self.session.open(BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
-               elif cnt == 1: 
+               elif cnt == 1:
                        self.openBouquetEPG(bouquets[0][1], withCallback)
 
        def openSingleServiceEPG(self):
@@ -544,13 +541,13 @@ class InfoBarEPG:
 class InfoBarTuner:
        """provides a snr/agc/ber display"""
        def __init__(self):
-               self["FrontendStatus"] = FrontendStatus(service_source = self.session.nav.getCurrentService)
+               self["FrontendStatus"] = ObsoleteSource(new_source = "session.FrontendStatus", removal_date = "2008-01")
 
 class InfoBarEvent:
        """provides a current/next event info display"""
        def __init__(self):
-               self["Event_Now"] = EventInfo(self.session.nav, EventInfo.NOW)
-               self["Event_Next"] = EventInfo(self.session.nav, EventInfo.NEXT)
+               self["Event_Now"] = ObsoleteSource(new_source = "session.Event_Now", removal_date = "2008-01")
+               self["Event_Next"] = ObsoleteSource(new_source = "session.Event_Next", removal_date = "2008-01")
 
 class InfoBarRdsDecoder:
        """provides RDS and Rass support/display"""
@@ -602,7 +599,7 @@ class InfoBarRdsDecoder:
 
 class InfoBarServiceName:
        def __init__(self):
-               self["CurrentService"] = CurrentService(self.session.nav)
+               self["CurrentService"] = ObsoleteSource(new_source = "session.CurrentService", removal_date = "2008-01")
 
 class InfoBarSeek:
        """handles actions like seeking, pause"""
@@ -658,7 +655,7 @@ class InfoBarSeek:
                                else:
                                        return HelpableActionMap.action(self, contexts, action)
 
-               self["SeekActions"] = InfoBarSeekActionMap(self, actionmap, 
+               self["SeekActions"] = InfoBarSeekActionMap(self, actionmap,
                        {
                                "playpauseService": self.playpauseService,
                                "pauseService": (self.pauseService, _("pause")),
@@ -668,7 +665,7 @@ class InfoBarSeek:
                                "seekFwdManual": (self.seekFwdManual, _("skip forward (enter time)")),
                                "seekBack": (self.seekBack, _("skip backward")),
                                "seekBackManual": (self.seekBackManual, _("skip backward (enter time)")),
-                               
+
                                "seekFwdDef": (self.seekFwdDef, _("skip forward (self defined)")),
                                "seekBackDef": (self.seekBackDef, _("skip backward (self defined)"))
                        }, prio=-1)
@@ -677,7 +674,7 @@ class InfoBarSeek:
                self["SeekActions"].setEnabled(False)
 
                self.seekstate = self.SEEK_STATE_PLAY
-               
+
                self.seek_flag = True
 
                self.onPlayStateChanged = [ ]
@@ -855,7 +852,7 @@ class InfoBarSeek:
                seekable = self.getSeek()
                if seekable is not None:
                        seekable.seekRelative(1, seconds * 90000)
-               
+
        def seekBackDef(self):
                self.seek_flag = False
                seconds = config.usage.self_defined_seek.value
@@ -863,7 +860,7 @@ class InfoBarSeek:
                seekable = self.getSeek()
                if seekable is not None:
                        seekable.seekRelative(1, 0 - seconds * 90000)
-               
+
        def seekFwdManual(self):
                self.session.openWithCallback(self.fwdSeekTo, MinuteInput)
 
@@ -966,11 +963,11 @@ class InfoBarTimeshiftState(InfoBarPVRState):
 
 class InfoBarShowMovies:
 
-       # i don't really like this class. 
+       # i don't really like this class.
        # it calls a not further specified "movie list" on up/down/movieList,
        # so this is not more than an action map
        def __init__(self):
-               self["MovieListActions"] = HelpableActionMap(self, "InfobarMovieListActions", 
+               self["MovieListActions"] = HelpableActionMap(self, "InfobarMovieListActions",
                        {
                                "movieList": (self.showMovies, _("movie list")),
                                "up": (self.showMovies, _("movie list")),
@@ -1007,7 +1004,7 @@ class InfoBarShowMovies:
 
 class InfoBarTimeshift:
        def __init__(self):
-               self["TimeshiftActions"] = HelpableActionMap(self, "InfobarTimeshiftActions", 
+               self["TimeshiftActions"] = HelpableActionMap(self, "InfobarTimeshiftActions",
                        {
                                "timeshiftStart": (self.startTimeshift, _("start timeshift")),  # the "yellow key"
                                "timeshiftStop": (self.stopTimeshift, _("stop timeshift"))      # currently undefined :), probably 'TV'
@@ -1021,7 +1018,7 @@ class InfoBarTimeshift:
                self.timeshift_enabled = 0
                self.timeshift_state = 0
                self.ts_rewind_timer = eTimer()
-               self.ts_rewind_timer.timeout.get().append(self.rewindService)
+               self.ts_rewind_timer.callback.append(self.rewindService)
 
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                        {
@@ -1310,7 +1307,7 @@ class InfoBarPiP:
 from RecordTimer import parseEvent
 
 class InfoBarInstantRecord:
-       """Instant Record - handles the instantRecord action in order to 
+       """Instant Record - handles the instantRecord action in order to
        start/stop instant records"""
        def __init__(self):
                self["InstantRecordActions"] = HelpableActionMap(self, "InfobarInstantRecord",
@@ -1318,9 +1315,13 @@ class InfoBarInstantRecord:
                                "instantRecord": (self.instantRecord, _("Instant Record...")),
                        })
                self.recording = []
+#### DEPRECATED CODE ####
                self["BlinkingPoint"] = BlinkingPixmapConditional()
-               self["BlinkingPoint"].hide()
                self["BlinkingPoint"].setConnect(self.session.nav.RecordTimer.isRecording)
+               self["BlinkingPoint"].deprecationInfo = (
+                       "session.RecordState source, Pixmap renderer and "
+                       "ConditionalShowHide/Blink Converter", "2008-02")
+#########################
 
        def stopCurrentRecording(self, entry = -1):
                if entry is not None and entry != -1:
@@ -1366,7 +1367,9 @@ class InfoBarInstantRecord:
                recording.dontSave = True
                self.recording.append(recording)
 
-               #self["BlinkingPoint"].setConnect(lambda: self.recording.isRunning())
+#### DEPRECATED CODE ####
+               self["BlinkingPoint"].setConnect(lambda: self.recording.isRunning())
+#########################
 
        def isInstantRecordRunning(self):
                print "self.recording:", self.recording
@@ -1398,7 +1401,7 @@ class InfoBarInstantRecord:
                        if len(self.recording) == 1:
                                self.setEndtime(0)
                        else:
-                               self.session.openWithCallback(self.setEndTime, TimerSelection, list)
+                               self.session.openWithCallback(self.setEndtime, TimerSelection, list)
                elif answer[1] == "stop":
                        if len(self.recording) == 1:
                                self.stopCurrentRecording(0)
@@ -1469,7 +1472,7 @@ from Tools.ISO639 import LanguageCodes
 
 class InfoBarAudioSelection:
        def __init__(self):
-               self["AudioSelectionAction"] = HelpableActionMap(self, "InfobarAudioSelectionActions", 
+               self["AudioSelectionAction"] = HelpableActionMap(self, "InfobarAudioSelectionActions",
                        {
                                "audioSelection": (self.audioSelection, _("Audio Options...")),
                        })
@@ -1656,20 +1659,35 @@ class InfoBarSubserviceSelection:
 
 class InfoBarAdditionalInfo:
        def __init__(self):
-               self["NimA"] = Pixmap()
-               self["NimB"] = Pixmap()
-               self["NimA_Active"] = Pixmap()
-               self["NimB_Active"] = Pixmap()
 
                self["RecordingPossible"] = Boolean(fixed=harddiskmanager.HDDCount() > 0)
                self["TimeshiftPossible"] = self["RecordingPossible"]
                self["ExtensionsAvailable"] = Boolean(fixed=1)
 
-               self.session.nav.event.append(self.gotServiceEvent) # we like to get service events
+######### DEPRECATED CODE ##########
+               self["NimA"] = Pixmap()
+               self["NimA"].deprecationInfo = (
+                       "session.TunerInfo source, Pixmap renderer, TunerInfo/UseMask Converter"
+                       ", ValueBitTest(1) Converter and ConditionalShowHide Converter", "2008-02")
+               self["NimB"] = Pixmap()
+               self["NimB"].deprecationInfo = (
+                       "session.TunerInfo source, Pixmap renderer, TunerInfo/UseMask Converter"
+                       ", ValueBitTest(2) Converter and ConditionalShowHide Converter", "2008-02")
+               self["NimA_Active"] = Pixmap()
+               self["NimA_Active"].deprecationInfo = (
+                       "session.FrontendInfo source, Pixmap renderer, FrontendInfo/NUMBER Converter"
+                       ", ValueRange(1,1) Converter and ConditionalShowHide Converter", "2008-02")
+               self["NimB_Active"] = Pixmap()
+               self["NimB_Active"].deprecationInfo = (
+                       "session.FrontendInfo source, Pixmap renderer, FrontendInfo/NUMBER Converter"
+                       ", ValueRange(1,1) Converter and ConditionalShowHide Converter", "2008-02")
+
                res_mgr = eDVBResourceManager.getInstance()
                if res_mgr:
                        res_mgr.frontendUseMaskChanged.get().append(self.tunerUseMaskChanged)
 
+               self.session.nav.event.append(self.gotServiceEvent) # we like to get service events
+
        def tunerUseMaskChanged(self, mask):
                if mask&1:
                        self["NimA_Active"].show()
@@ -1697,6 +1715,7 @@ class InfoBarAdditionalInfo:
                service = self.session.nav.getCurrentService()
                if ev == iPlayableService.evUpdatedInfo or ev == iPlayableService.evEnd:
                        self.checkTunerState(service)
+####################################
 
 class InfoBarNotifications:
        def __init__(self):
@@ -1759,12 +1778,12 @@ class InfoBarCueSheetSupport:
        ENABLE_RESUME_SUPPORT = False
 
        def __init__(self, actionmap = "InfobarCueSheetActions"):
-               self["CueSheetActions"] = HelpableActionMap(self, actionmap, 
+               self["CueSheetActions"] = HelpableActionMap(self, actionmap,
                        {
                                "jumpPreviousMark": (self.jumpPreviousMark, _("jump to previous marked position")),
                                "jumpNextMark": (self.jumpNextMark, _("jump to next marked position")),
                                "toggleMark": (self.toggleMark, _("toggle a cut mark at the current position"))
-                       }, prio=1) 
+                       }, prio=1)
 
                self.cut_list = [ ]
                self.is_closing = False
@@ -1796,7 +1815,7 @@ class InfoBarCueSheetSupport:
                        if seekable is not None:
                                seekable.seekTo(self.resume_point)
                self.hideAfterResume()
-       
+
        def hideAfterResume(self):
                if isinstance(self, InfoBarShowHide):
                        self.hide()
@@ -1908,18 +1927,28 @@ class InfoBarCueSheetSupport:
 class InfoBarSummary(Screen):
        skin = """
        <screen position="0,0" size="132,64">
-               <widget source="CurrentTime" render="Label" position="56,46" size="82,18" font="Regular;16" >
+               <widget source="global.CurrentTime" render="Label" position="62,46" size="82,18" font="Regular;16" >
                        <convert type="ClockToText">WithSeconds</convert>
                </widget>
-               <widget source="CurrentService" render="Label" position="6,4" size="120,42" font="Regular;18" >
+               <widget source="session.RecordState" render="FixedLabel" text=" " position="62,46" size="82,18" zPosition="1" >
+                       <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
+                       <convert type="ConditionalShowHide">Blink</convert>
+               </widget>
+               <widget source="session.CurrentService" render="Label" position="6,4" size="120,42" font="Regular;18" >
                        <convert type="ServiceName">Name</convert>
                </widget>
+               <widget source="session.Event_Now" render="Progress" position="6,46" size="46,18" borderWidth="1" >
+                       <convert type="EventTime">Progress</convert>
+               </widget>
        </screen>"""
 
+# for picon:  (path="piconlcd" will use LCD picons)
+#              <widget source="session.CurrentService" render="Picon" position="6,0" size="120,64" path="piconlcd" >
+#                      <convert type="ServiceName">Reference</convert>
+#              </widget>
+
        def __init__(self, session, parent):
-               Screen.__init__(self, session)
-               self["CurrentService"] = CurrentService(self.session.nav)
-               self["CurrentTime"] = Clock()
+               Screen.__init__(self, session, parent = parent)
 
 class InfoBarSummarySupport:
        def __init__(self):
@@ -1928,6 +1957,34 @@ class InfoBarSummarySupport:
        def createSummary(self):
                return InfoBarSummary
 
+class InfoBarMoviePlayerSummary(Screen):
+       skin = """
+       <screen position="0,0" size="132,64">
+               <widget source="global.CurrentTime" render="Label" position="62,46" size="64,18" font="Regular;16" halign="right" >
+                       <convert type="ClockToText">WithSeconds</convert>
+               </widget>
+               <widget source="session.RecordState" render="FixedLabel" text=" " position="62,46" size="64,18" zPosition="1" >
+                       <convert type="ConfigEntryTest">config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean</convert>
+                       <convert type="ConditionalShowHide">Blink</convert>
+               </widget>
+               <widget source="session.CurrentService" render="Label" position="6,4" size="120,42" font="Regular;18" >
+                       <convert type="ServiceName">Name</convert>
+               </widget>
+               <widget source="session.CurrentService" render="Progress" position="6,46" size="56,18" borderWidth="1" >
+                       <convert type="ServicePosition">Position</convert>
+               </widget>
+       </screen>"""
+
+       def __init__(self, session, parent):
+               Screen.__init__(self, session)
+
+class InfoBarMoviePlayerSummarySupport:
+       def __init__(self):
+               pass
+
+       def createSummary(self):
+               return InfoBarMoviePlayerSummary
+
 class InfoBarTeletextPlugin:
        def __init__(self):
                self.teletext_plugin = None
@@ -2030,7 +2087,8 @@ class InfoBarServiceErrorPopupSupport:
                        eDVBServicePMTHandler.eventNewProgramInfo: None,
                        eDVBServicePMTHandler.eventTuned: None,
                        eDVBServicePMTHandler.eventSOF: None,
-                       eDVBServicePMTHandler.eventEOF: None
+                       eDVBServicePMTHandler.eventEOF: None,
+                       eDVBServicePMTHandler.eventMisconfiguration: _("Service unavailable!\nCheck tuner configuration!"),
                }
 
                error = errors.get(error) #this returns None when the key not exist in the dict