from Components.ActionMap import ActionMap, HelpableActionMap
from Components.ActionMap import NumberActionMap
from Components.BlinkingPixmap import BlinkingPixmapConditional
-from Components.Clock import Clock
-from Components.EventInfo import EventInfo, EventInfoProgress
from Components.Harddisk import harddiskmanager
from Components.Input import Input
from Components.Label import *
from Components.PluginComponent import plugins
from Components.ProgressBar import *
from Components.ServiceEventTracker import ServiceEventTracker
-from Components.ServiceName import ServiceName
+from Components.Sources.CurrentService import CurrentService
+from Components.Sources.EventInfo import EventInfo
+from Components.Sources.FrontendStatus import FrontendStatus
+from Components.Sources.Boolean import Boolean
+from Components.Sources.Clock import Clock
+from Components.TimerList import TimerEntryComponent
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 EpgSelection import EPGSelection
from Plugins.Plugin import PluginDescriptor
def __init__(self):
self["MenuActions"] = HelpableActionMap(self, "InfobarMenuActions",
{
- "mainMenu": (self.mainMenu, "Enter main menu..."),
+ "mainMenu": (self.mainMenu, _("Enter main menu...")),
})
def mainMenu(self):
class InfoBarTuner:
"""provides a snr/agc/ber display"""
def __init__(self):
- self["snr"] = Label()
- self["agc"] = Label()
- self["ber"] = Label()
- self["snr_percent"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, servicefkt = self.session.nav.getCurrentService)
- self["agc_percent"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, servicefkt = self.session.nav.getCurrentService)
- self["ber_count"] = TunerInfo(TunerInfo.BER_VALUE, servicefkt = self.session.nav.getCurrentService)
- self["snr_progress"] = TunerInfo(TunerInfo.SNR_BAR, servicefkt = self.session.nav.getCurrentService)
- self["agc_progress"] = TunerInfo(TunerInfo.AGC_BAR, servicefkt = self.session.nav.getCurrentService)
- self["ber_progress"] = TunerInfo(TunerInfo.BER_BAR, servicefkt = self.session.nav.getCurrentService)
- self.timer = eTimer()
- self.timer.timeout.get().append(self.updateTunerInfo)
- self.timer.start(1000)
-
- def updateTunerInfo(self):
- if self.instance.isVisible():
- self["snr_percent"].update()
- self["agc_percent"].update()
- self["ber_count"].update()
- self["snr_progress"].update()
- self["agc_progress"].update()
- self["ber_progress"].update()
+ self["FrontendStatus"] = FrontendStatus(service_source = self.session.nav.getCurrentService)
class InfoBarEvent:
"""provides a current/next event info display"""
def __init__(self):
- self["Event_Now_StartTime"] = EventInfo(self.session.nav, EventInfo.Now_StartTime)
- self["Event_Next_StartTime"] = EventInfo(self.session.nav, EventInfo.Next_StartTime)
-
- self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
- self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
-
- self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Remaining)
- self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
-
- self["Now_ProgressBar"] = EventInfoProgress(self.session.nav, EventInfo.Now)
+ self["Event_Now"] = EventInfo(self.session.nav, EventInfo.NOW)
+ self["Event_Next"] = EventInfo(self.session.nav, EventInfo.NEXT)
class InfoBarServiceName:
def __init__(self):
- self["ServiceName"] = ServiceName(self.session.nav)
+ self["CurrentService"] = CurrentService(self.session.nav)
class InfoBarSeek:
"""handles actions like seeking, pause"""
self["SeekActions"] = InfoBarSeekActionMap(self, "InfobarSeekActions",
{
- "pauseService": (self.pauseService, "pause"),
- "unPauseService": (self.unPauseService, "continue"),
+ "pauseService": (self.pauseService, _("pause")),
+ "unPauseService": (self.unPauseService, _("continue")),
- "seekFwd": (self.seekFwd, "skip forward"),
+ "seekFwd": (self.seekFwd, _("skip forward")),
"seekFwdDown": self.seekFwdDown,
"seekFwdUp": self.seekFwdUp,
- "seekBack": (self.seekBack, "skip backward"),
+ "seekBack": (self.seekBack, _("skip backward")),
"seekBackDown": self.seekBackDown,
"seekBackUp": self.seekBackUp,
}, prio=-1)
def __init__(self):
self["TimeshiftActions"] = HelpableActionMap(self, "InfobarTimeshiftActions",
{
- "timeshiftStart": (self.startTimeshift, "start timeshift"), # the "yellow key"
- "timeshiftStop": (self.stopTimeshift, "stop timeshift") # currently undefined :), probably 'TV'
+ "timeshiftStart": (self.startTimeshift, _("start timeshift")), # the "yellow key"
+ "timeshiftStop": (self.stopTimeshift, _("stop timeshift")) # currently undefined :), probably 'TV'
}, prio=1)
self["TimeshiftActivateActions"] = ActionMap(["InfobarTimeshiftActivateActions"],
{
if not ts.startTimeshift():
import time
self.timeshift_enabled = 1
- self.pvrStateDialog["timeshift"].setRelative(time.time())
+ # we remove the "relative time" for now.
+ #self.pvrStateDialog["timeshift"].setRelative(time.time())
+
# PAUSE.
self.setSeekState(self.SEEK_STATE_PAUSE)
class InfoBarExtensions:
def __init__(self):
- self.pipshown = False
+ self.session.pipshown = False
self["InstantExtensionsActions"] = HelpableActionMap(self, "InfobarExtensions",
{
- "extensions": (self.extensions, "Extensions..."),
+ "extensions": (self.extensions, _("view extensions...")),
})
PIPON = 0
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))
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
def __init__(self):
self["InstantRecordActions"] = HelpableActionMap(self, "InfobarInstantRecord",
{
- "instantRecord": (self.instantRecord, "Instant Record..."),
+ "instantRecord": (self.instantRecord, _("Instant Record...")),
})
self.recording = []
self["BlinkingPoint"] = BlinkingPixmapConditional()
def __init__(self):
self["AudioSelectionAction"] = HelpableActionMap(self, "InfobarAudioSelectionActions",
{
- "audioSelection": (self.audioSelection, "Audio Options..."),
+ "audioSelection": (self.audioSelection, _("Audio Options...")),
})
def audioSelection(self):
service = self.session.nav.getCurrentService()
- audio = service.audioTracks()
+ audio = service and service.audioTracks()
self.audioTracks = audio
- n = audio.getNumberOfTracks()
+ n = audio and audio.getNumberOfTracks()
keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n
tlist = []
print "tlist:", tlist
- if n > 0:
+ if n and n > 0:
self.audioChannel = service.audioChannel()
for x in range(n):
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)
- self["ButtonRedText"] = LabelConditional(text = _("Record"), withTimer = False)
- self["ButtonRedText"].setConnect(lambda: harddiskmanager.HDDCount() > 0)
- self.onLayoutFinish.append(self["ButtonRedText"].update)
-
- self["ButtonGreen"] = Pixmap()
- self["ButtonGreenText"] = Label(_("Subservices"))
-
- self["ButtonYellow"] = PixmapConditional(withTimer = False)
- self["ButtonYellow"].setConnect(lambda: harddiskmanager.HDDCount() > 0)
- self["ButtonYellowText"] = LabelConditional(text = _("Timeshifting"), withTimer = False)
- self["ButtonYellowText"].setConnect(lambda: harddiskmanager.HDDCount() > 0)
- self.onLayoutFinish.append(self["ButtonYellow"].update)
- self.onLayoutFinish.append(self["ButtonYellowText"].update)
-
- self["ButtonBlue"] = PixmapConditional(withTimer = False)
- self["ButtonBlue"].setConnect(lambda: True)
- self["ButtonBlueText"] = LabelConditional(text = _("Extensions"), withTimer = False)
- self["ButtonBlueText"].setConnect(lambda: True)
- self.onLayoutFinish.append(self["ButtonBlue"].update)
- self.onLayoutFinish.append(self["ButtonBlueText"].update)
+ 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
res_mgr = eDVBResourceManagerPtr()
else:
self["NimB_Active"].hide()
- def hideSubServiceIndication(self):
- self["ButtonGreen"].hide()
- self["ButtonGreenText"].hide()
-
- def showSubServiceIndication(self):
- self["ButtonGreen"].show()
- self["ButtonGreenText"].show()
-
- def checkFormat(self, service):
- info = service.info()
- if info:
- aspect = info.getInfo(iServiceInformation.sAspect)
- if aspect in [ 3, 4, 7, 8, 0xB, 0xC, 0xF, 0x10 ]:
- self["FormatActive"].show()
- 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):
- subservices = service.subServices()
- if subservices and subservices.getNumberOfSubservices() > 0:
- self.showSubServiceIndication()
- else:
- self.hideSubServiceIndication()
-
- def checkDolby(self, service):
- # FIXME
- dolby = False
- audio = service.audioTracks()
- if audio:
- n = audio.getNumberOfTracks()
- for x in range(n):
- i = audio.getTrackInfo(x)
- description = i.getDescription();
- if description.find("AC3") != -1 or description.find("DTS") != -1:
- dolby = True
- break
- if dolby:
- self["DolbyActive"].show()
- else:
- self["DolbyActive"].hide()
-
- def checkCrypted(self, service):
- info = service.info()
- 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)
service = self.session.nav.getCurrentService()
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):
class InfoBarSummary(Screen):
skin = """
<screen position="0,0" size="132,64">
- <widget name="Clock" position="50,46" size="82,18" font="Regular;16" />
- <widget name="CurrentService" position="0,4" size="132,42" font="Regular;18" />
+ <widget source="CurrentTime" render="Label" position="50,46" size="82,18" font="Regular;16" >
+ <convert type="ClockToText">WithSeconds</convert>
+ </widget>
+ <widget source="CurrentService" render="Label" position="0,4" size="132,42" font="Regular;18" >
+ <convert type="ServiceName">Name</convert>
+ </widget>
</screen>"""
def __init__(self, session, parent):
Screen.__init__(self, session)
- self["CurrentService"] = ServiceName(self.session.nav)
- self["Clock"] = Clock()
+ self["CurrentService"] = CurrentService(self.session.nav)
+ self["CurrentTime"] = Clock()
class InfoBarSummarySupport:
def __init__(self):
if self.teletext_plugin is not None:
self["TeletextActions"] = HelpableActionMap(self, "InfobarTeletextActions",
{
- "startTeletext": (self.startTeletext, "View teletext...")
+ "startTeletext": (self.startTeletext, _("View teletext..."))
})
else:
print "no teletext plugin found!"