aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Screens
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2009-02-11 12:52:48 +0100
committerFelix Domke <tmbinc@elitedvb.net>2009-02-11 12:52:48 +0100
commitbbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b (patch)
treec5945c791698c14723e989449e6b4bfcc275c05d /lib/python/Screens
parent4f7990ff2a55874b9eb65e3c9cd47dacb9f76deb (diff)
parent5e6f814d005a01caa437a532e61f4b338617ff67 (diff)
downloadenigma2-bbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b.tar.gz
enigma2-bbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b.zip
Merge branch 'master' of /home/tmbinc/enigma2-git into tmbinc/FixTimingBugs
Conflicts: lib/dvb/decoder.cpp
Diffstat (limited to 'lib/python/Screens')
-rw-r--r--lib/python/Screens/ChannelSelection.py2
-rw-r--r--lib/python/Screens/Console.py3
-rw-r--r--lib/python/Screens/EpgSelection.py99
-rw-r--r--lib/python/Screens/EventView.py56
-rw-r--r--lib/python/Screens/InfoBarGenerics.py74
-rwxr-xr-xlib/python/Screens/Makefile.am3
-rw-r--r--lib/python/Screens/Menu.py71
-rw-r--r--lib/python/Screens/Satconfig.py163
-rw-r--r--lib/python/Screens/ScanSetup.py361
-rw-r--r--lib/python/Screens/ServiceInfo.py37
-rw-r--r--lib/python/Screens/Setup.py52
-rw-r--r--lib/python/Screens/Standby.py6
-rw-r--r--lib/python/Screens/TextBox.py26
-rw-r--r--lib/python/Screens/TimerEdit.py59
-rw-r--r--lib/python/Screens/TimerEntry.py49
-rwxr-xr-x[-rw-r--r--]lib/python/Screens/Wizard.py10
16 files changed, 689 insertions, 382 deletions
diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py
index b203b24e..ebfbe812 100644
--- a/lib/python/Screens/ChannelSelection.py
+++ b/lib/python/Screens/ChannelSelection.py
@@ -76,7 +76,7 @@ def append_when_current_valid(current, menu, args, level = 0):
class ChannelContextMenu(Screen):
def __init__(self, session, csel):
Screen.__init__(self, session)
- #raise "we need a better summary screen here"
+ #raise Exception("we need a better summary screen here")
self.csel = csel
self.bsel = None
diff --git a/lib/python/Screens/Console.py b/lib/python/Screens/Console.py
index b57f2400..c6b156cf 100644
--- a/lib/python/Screens/Console.py
+++ b/lib/python/Screens/Console.py
@@ -55,6 +55,7 @@ class Console(Screen):
str = self["text"].getText()
str += _("Execution finished!!");
self["text"].setText(str)
+ self["text"].lastPage()
if self.finishedCallback is not None:
self.finishedCallback()
if not retval and self.closeOnSuccess:
@@ -67,4 +68,4 @@ class Console(Screen):
self.container.dataAvail.remove(self.dataAvail)
def dataAvail(self, str):
- self["text"].setText(self["text"].getText() + str)
+ self["text"].setText(self["text"].getText() + str) \ No newline at end of file
diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py
index 6740bfb6..e7388fc2 100644
--- a/lib/python/Screens/EpgSelection.py
+++ b/lib/python/Screens/EpgSelection.py
@@ -5,11 +5,13 @@ from Components.Pixmap import Pixmap
from Components.Label import Label
from Components.EpgList import EPGList, EPG_TYPE_SINGLE, EPG_TYPE_SIMILAR, EPG_TYPE_MULTI
from Components.ActionMap import ActionMap
+from Components.TimerSanityCheck import TimerSanityCheck
from Screens.TimerEdit import TimerSanityConflict
from Screens.EventView import EventViewSimple
+from Screens.MessageBox import MessageBox
from TimeDateInput import TimeDateInput
from enigma import eServiceReference
-from RecordTimer import RecordTimerEntry, parseEvent
+from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
from TimerEntry import TimerEntry
from ServiceReference import ServiceReference
from time import localtime, time
@@ -17,6 +19,12 @@ from time import localtime, time
mepg_config_initialized = False
class EPGSelection(Screen):
+ EMPTY = 0
+ ADD_TIMER = 1
+ REMOVE_TIMER = 2
+
+ ZAP = 1
+
def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None):
Screen.__init__(self, session)
self.bouquetChangeCB = bouquetChangeCB
@@ -58,6 +66,8 @@ class EPGSelection(Screen):
self.zapFunc = zapFunc
self["key_green"] = Button(_("Add timer"))
+ self.key_green_choice = self.ADD_TIMER
+ self.key_red_choice = self.EMPTY
self["list"] = EPGList(type = self.type, selChangedCB = self.onSelectionChanged, timer = self.session.nav.RecordTimer)
self["actions"] = ActionMap(["EPGSelectActions", "OkCancelActions"],
@@ -125,6 +135,7 @@ class EPGSelection(Screen):
l.recalcEntrySize()
if self.type == EPG_TYPE_MULTI:
l.fillMultiEPG(self.services, self.ask_time)
+ l.moveToService(self.session.nav.getCurrentlyPlayingServiceReference())
elif self.type == EPG_TYPE_SINGLE:
l.fillSingleEPG(self.currentService)
else:
@@ -145,7 +156,7 @@ class EPGSelection(Screen):
setEvent(cur[0])
def zapTo(self): # just used in multiepg
- if self.zapFunc and self["key_red"].getText() == "Zap":
+ if self.zapFunc and self.key_red_choice == self.ZAP:
lst = self["list"]
count = lst.getCurrentChangeCount()
if count == 0:
@@ -179,14 +190,28 @@ class EPGSelection(Screen):
if self.type == EPG_TYPE_MULTI:
self["list"].updateMultiEPG(1)
+ def removeTimer(self, timer):
+ timer.afterEvent = AFTEREVENT.NONE
+ self.session.nav.RecordTimer.removeEntry(timer)
+ self["key_green"].setText(_("Add timer"))
+ self.key_green_choice = self.ADD_TIMER
+
def timerAdd(self):
cur = self["list"].getCurrent()
event = cur[0]
serviceref = cur[1]
if event is None:
return
- newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
- self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
+ eventid = event.getEventId()
+ refstr = serviceref.ref.toString()
+ for timer in self.session.nav.RecordTimer.timer_list:
+ if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+ cb_func = lambda ret : not ret or self.removeTimer(timer)
+ self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
+ break
+ else:
+ newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
+ self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def finishedAdd(self, answer):
print "finished add"
@@ -194,14 +219,18 @@ class EPGSelection(Screen):
entry = answer[1]
simulTimerList = self.session.nav.RecordTimer.record(entry)
if simulTimerList is not None:
- if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
- simulTimerList[1].end = entry.begin - 30
- self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
- self.session.nav.RecordTimer.record(entry)
- else:
+ for x in simulTimerList:
+ if x.setAutoincreaseEnd(entry):
+ self.session.nav.RecordTimer.timeChanged(x)
+ simulTimerList = self.session.nav.RecordTimer.record(entry)
+ if simulTimerList is not None:
self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
+ self["key_green"].setText(_("Remove timer"))
+ self.key_green_choice = self.REMOVE_TIMER
else:
- print "Timeredit aborted"
+ self["key_green"].setText(_("Add timer"))
+ self.key_green_choice = self.ADD_TIMER
+ print "Timeredit aborted"
def finishSanityCorrection(self, answer):
self.finishedAdd(answer)
@@ -211,7 +240,7 @@ class EPGSelection(Screen):
def moveDown(self):
self["list"].moveDown()
-
+
def applyButtonState(self, state):
if state == 0:
self["now_button"].hide()
@@ -226,13 +255,11 @@ class EPGSelection(Screen):
self["key_red"].setText("")
else:
if state == 1:
- self["key_red"].setText("Zap")
self["now_button_sel"].show()
self["now_button"].hide()
else:
self["now_button"].show()
self["now_button_sel"].hide()
- self["key_red"].setText("")
if state == 2:
self["next_button_sel"].show()
@@ -249,6 +276,16 @@ class EPGSelection(Screen):
self["more_button_sel"].hide()
def onSelectionChanged(self):
+ cur = self["list"].getCurrent()
+ if cur is None:
+ if self.key_green_choice != self.EMPTY:
+ self["key_green"].setText("")
+ self.key_green_choice = self.EMPTY
+ if self.key_red_choice != self.EMPTY:
+ self["key_red"].setText("")
+ self.key_red_choice = self.EMPTY
+ return
+ event = cur[0]
if self.type == EPG_TYPE_MULTI:
count = self["list"].getCurrentChangeCount()
if self.ask_time != -1:
@@ -260,8 +297,7 @@ class EPGSelection(Screen):
else:
self.applyButtonState(1)
days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ]
- datastr = ""
- event = self["list"].getCurrent()[0]
+ datestr = ""
if event is not None:
now = time()
beg = event.getBeginTime()
@@ -272,3 +308,36 @@ class EPGSelection(Screen):
else:
datestr = '%s %d.%d.'%(_("Today"), begTime[2], begTime[1])
self["date"].setText(datestr)
+
+ if cur[1] is None or cur[1].getServiceName() == "":
+ if self.key_green_choice != self.EMPTY:
+ self["key_green"].setText("")
+ self.key_green_choice = self.EMPTY
+ if self.key_red_choice != self.EMPTY:
+ self["key_red"].setText("")
+ self.key_red_choice = self.EMPTY
+ return
+ elif self.key_red_choice != self.ZAP and self.type == EPG_TYPE_MULTI:
+ self["key_red"].setText("Zap")
+ self.key_red_choice = self.ZAP
+
+ if event is None:
+ if self.key_green_choice != self.EMPTY:
+ self["key_green"].setText("")
+ self.key_green_choice = self.EMPTY
+ return
+
+ serviceref = cur[1]
+ eventid = event.getEventId()
+ refstr = serviceref.ref.toString()
+ isRecordEvent = False
+ for timer in self.session.nav.RecordTimer.timer_list:
+ if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+ isRecordEvent = True
+ break
+ if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER:
+ self["key_green"].setText(_("Remove timer"))
+ self.key_green_choice = self.REMOVE_TIMER
+ elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER:
+ self["key_green"].setText(_("Add timer"))
+ self.key_green_choice = self.ADD_TIMER
diff --git a/lib/python/Screens/EventView.py b/lib/python/Screens/EventView.py
index 5d50d9bc..6aed1e11 100644
--- a/lib/python/Screens/EventView.py
+++ b/lib/python/Screens/EventView.py
@@ -1,17 +1,21 @@
from Screen import Screen
from Screens.TimerEdit import TimerSanityConflict
+from Screens.MessageBox import MessageBox
from Components.ActionMap import ActionMap
from Components.Button import Button
from Components.Label import Label
from Components.ScrollLabel import ScrollLabel
from Components.TimerList import TimerList
from enigma import eEPGCache, eTimer, eServiceReference
-from RecordTimer import RecordTimerEntry, parseEvent
+from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
from TimerEntry import TimerEntry
from time import localtime
from Components.config import config
class EventViewBase:
+ ADD_TIMER = 0
+ REMOVE_TIMER = 1
+
def __init__(self, Event, Ref, callback=None, similarEPGCB=None):
self.similarEPGCB = similarEPGCB
self.cbFunc = callback
@@ -28,6 +32,7 @@ class EventViewBase:
self.SimilarBroadcastTimer.callback.append(self.getSimilarEvents)
else:
self.SimilarBroadcastTimer = None
+ self.key_green_choice = self.ADD_TIMER
if self.isRecording:
self["key_green"] = Button("")
else:
@@ -59,8 +64,25 @@ class EventViewBase:
if self.cbFunc is not None:
self.cbFunc(self.setEvent, self.setService, +1)
+ def removeTimer(self, timer):
+ timer.afterEvent = AFTEREVENT.NONE
+ self.session.nav.RecordTimer.removeEntry(timer)
+ self["key_green"].setText(_("Add timer"))
+ self.key_green_choice = self.ADD_TIMER
+
def timerAdd(self):
- if not self.isRecording:
+ event = self.event
+ serviceref = self.currentService
+ if event is None:
+ return
+ eventid = event.getEventId()
+ refstr = serviceref.ref.toString()
+ for timer in self.session.nav.RecordTimer.timer_list:
+ if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+ cb_func = lambda ret : not ret or self.removeTimer(timer)
+ self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
+ break
+ else:
newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, *parseEvent(self.event))
self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
@@ -70,13 +92,17 @@ class EventViewBase:
entry = answer[1]
simulTimerList = self.session.nav.RecordTimer.record(entry)
if simulTimerList is not None:
- if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
- simulTimerList[1].end = entry.begin - 30
- self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
- self.session.nav.RecordTimer.record(entry)
- else:
+ for x in simulTimerList:
+ if x.setAutoincreaseEnd(entry):
+ self.session.nav.RecordTimer.timeChanged(x)
+ simulTimerList = self.session.nav.RecordTimer.record(entry)
+ if simulTimerList is not None:
self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
+ self["key_green"].setText(_("Remove timer"))
+ self.key_green_choice = self.REMOVE_TIMER
else:
+ self["key_green"].setText(_("Add timer"))
+ self.key_green_choice = self.ADD_TIMER
print "Timeredit aborted"
def finishSanityCorrection(self, answer):
@@ -123,6 +149,22 @@ class EventViewBase:
if self.SimilarBroadcastTimer is not None:
self.SimilarBroadcastTimer.start(400,True)
+ serviceref = self.currentService
+ eventid = self.event.getEventId()
+ refstr = serviceref.ref.toString()
+ isRecordEvent = False
+ for timer in self.session.nav.RecordTimer.timer_list:
+ if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+ isRecordEvent = True
+ break
+ if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER:
+ self["key_green"].setText(_("Remove timer"))
+ self.key_green_choice = self.REMOVE_TIMER
+ elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER:
+ self["key_green"].setText(_("Add timer"))
+ self.key_green_choice = self.ADD_TIMER
+
+
def pageUp(self):
self["epg_description"].pageUp()
diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py
index 409018de..89a6b8e3 100644
--- a/lib/python/Screens/InfoBarGenerics.py
+++ b/lib/python/Screens/InfoBarGenerics.py
@@ -29,7 +29,7 @@ from Screens.TimeDateInput import TimeDateInput
from ServiceReference import ServiceReference
from Tools import Notifications
-from Tools.Directories import SCOPE_HDD, resolveFilename, pathExists
+from Tools.Directories import SCOPE_HDD, resolveFilename, fileExists
from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \
iPlayableService, eServiceReference, eEPGCache
@@ -348,14 +348,14 @@ class InfoBarMenu:
def mainMenu(self):
print "loading mainmenu XML..."
- menu = mdom.childNodes[0]
- assert menu.tagName == "menu", "root element in menu must be 'menu'!"
+ menu = mdom.getroot()
+ assert menu.tag == "menu", "root element in menu must be 'menu'!"
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)
+ self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu)
def mainMenuClosed(self, *val):
self.session.infobar = None
@@ -403,7 +403,7 @@ class InfoBarEPG:
self.eventView = None
self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions",
{
- "showEventView": (self.openEventView, _("show EPG...")),
+ "showEventInfo": (self.openEventView, _("show EPG...")),
"showEventInfoPlugin": (self.showEventInfoPlugins, _("show single service EPG...")),
"showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible,
})
@@ -1033,7 +1033,13 @@ class InfoBarPVRState:
def __playStateChanged(self, state):
playstateString = state[3]
self.pvrStateDialog["state"].setText(playstateString)
- self._mayShow()
+
+ # if we return into "PLAY" state, ensure that the dialog gets hidden if there will be no infobar displayed
+ if not config.usage.show_infobar_on_skip.value and self.seekstate == self.SEEK_STATE_PLAY:
+ self.pvrStateDialog.hide()
+ else:
+ self._mayShow()
+
class InfoBarTimeshiftState(InfoBarPVRState):
def __init__(self):
@@ -1321,7 +1327,6 @@ class InfoBarJobman:
self.session.openWithCallback(self.JobViewCB, JobView, job)
def JobViewCB(self, in_background):
- from Screens.TaskView import JobView
job_manager.in_background = in_background
# depends on InfoBarExtensions
@@ -1437,8 +1442,8 @@ class InfoBarInstantRecord:
except:
pass
- begin = time()
- end = time() + 3600 * 24 * 365 * 1 # 1 year
+ begin = int(time())
+ end = begin + 3600 # dummy
name = "instant record"
description = ""
eventid = None
@@ -1459,19 +1464,28 @@ class InfoBarInstantRecord:
recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value)
recording.dontSave = True
- recording.autoincrease = True
-
- simulTimerList = self.session.nav.RecordTimer.record(recording)
- if simulTimerList is not None:
- print "timer conflict detected!"
- if (len(simulTimerList) > 1):
- print "tsc_list > 1"
- recording.end = simulTimerList[1].begin - 30
+
+ if event is None or limitEvent == False:
+ recording.autoincrease = True
+ if recording.setAutoincreaseEnd():
self.session.nav.RecordTimer.record(recording)
- print "new endtime applied"
- else:
- print "conflict with only one timer? ! ?"
- self.recording.append(recording)
+ self.recording.append(recording)
+ else:
+ simulTimerList = self.session.nav.RecordTimer.record(recording)
+ if simulTimerList is not None: # conflict with other recording
+ name = simulTimerList[1].name
+ name_date = name + strftime(" %c", localtime(simulTimerList[1].begin))
+ print "[TIMER] conflicts with", name_date
+ recording.autoincrease = True # start with max available length, then increment
+ if recording.setAutoincreaseEnd():
+ self.session.nav.RecordTimer.record(recording)
+ self.recording.append(recording)
+ self.session.open(MessageBox, _("Record time limited due to conflicting timer %s") % name_date, MessageBox.TYPE_INFO)
+ else:
+ self.session.open(MessageBox, _("Couldn't record due to conflicting timer %s") % name, MessageBox.TYPE_INFO)
+ recording.autoincrease = False
+ else:
+ self.recording.append(recording)
def isInstantRecordRunning(self):
print "self.recording:", self.recording
@@ -1544,12 +1558,12 @@ class InfoBarInstantRecord:
print "stopping recording after", int(value), "minutes."
if int(value) != 0:
self.recording[self.selectedEntry].autoincrease = False
- self.recording[self.selectedEntry].end = time() + 60 * int(value)
+ self.recording[self.selectedEntry].end = int(time()) + 60 * int(value)
self.session.nav.RecordTimer.timeChanged(self.recording[self.selectedEntry])
def instantRecord(self):
dir = config.movielist.last_videodir.value
- if not pathExists(dir):
+ if not fileExists(dir, 'w'):
dir = resolveFilename(SCOPE_HDD)
try:
stat = os_stat(dir)
@@ -1561,21 +1575,21 @@ class InfoBarInstantRecord:
if self.isInstantRecordRunning():
self.session.openWithCallback(self.recordQuestionCallback, ChoiceBox, \
title=_("A recording is currently running.\nWhat do you want to do?"), \
- list=[(_("stop recording"), "stop"), \
- (_("change recording (duration)"), "changeduration"), \
- (_("change recording (endtime)"), "changeendtime"), \
- (_("add recording (indefinitely)"), "indefinitely"), \
- (_("add recording (stop after current event)"), "event"), \
+ list=[(_("add recording (stop after current event)"), "event"), \
(_("add recording (enter recording duration)"), "manualduration"), \
(_("add recording (enter recording endtime)"), "manualendtime"), \
+ (_("add recording (indefinitely)"), "indefinitely"), \
+ (_("change recording (duration)"), "changeduration"), \
+ (_("change recording (endtime)"), "changeendtime"), \
+ (_("stop recording"), "stop"), \
(_("do nothing"), "no")])
else:
self.session.openWithCallback(self.recordQuestionCallback, ChoiceBox, \
title=_("Start recording?"), \
- list=[(_("add recording (indefinitely)"), "indefinitely"), \
- (_("add recording (stop after current event)"), "event"), \
+ list=[(_("add recording (stop after current event)"), "event"), \
(_("add recording (enter recording duration)"), "manualduration"), \
(_("add recording (enter recording endtime)"), "manualendtime"), \
+ (_("add recording (indefinitely)"), "indefinitely"), \
(_("don't record"), "no")])
from Tools.ISO639 import LanguageCodes
diff --git a/lib/python/Screens/Makefile.am b/lib/python/Screens/Makefile.am
index a3cf70bb..cde2d6c3 100755
--- a/lib/python/Screens/Makefile.am
+++ b/lib/python/Screens/Makefile.am
@@ -13,5 +13,6 @@ install_PYTHON = \
TimerSelection.py PictureInPicture.py TimeDateInput.py \
SubtitleDisplay.py SubservicesQuickzap.py ParentalControlSetup.py NumericalTextInputHelpDialog.py \
SleepTimerEdit.py Ipkg.py RdsDisplay.py Globals.py DefaultWizard.py \
- SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py
+ SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py \
+ TextBox.py
diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py
index 92039b42..93f23dfb 100644
--- a/lib/python/Screens/Menu.py
+++ b/lib/python/Screens/Menu.py
@@ -9,12 +9,10 @@ from Components.SystemInfo import SystemInfo
from Tools.Directories import resolveFilename, SCOPE_SKIN
-import xml.dom.minidom
+import xml.etree.cElementTree
from Screens.Setup import Setup, getSetupTitle
-from Tools import XMLTools
-
# <item text="TV-Mode">self.setModeTV()</item>
# <item text="Radio-Mode">self.setModeRadio()</item>
# <item text="File-Mode">self.setModeFile()</item>
@@ -22,9 +20,7 @@ from Tools import XMLTools
# read the menu
-menufile = file(resolveFilename(SCOPE_SKIN, 'menu.xml'), 'r')
-mdom = xml.dom.minidom.parseString(menufile.read())
-menufile.close()
+mdom = xml.etree.cElementTree.parse(resolveFilename(SCOPE_SKIN, 'menu.xml'))
class boundFunction:
def __init__(self, fnc, *args):
@@ -103,17 +99,17 @@ class Menu(Screen):
self.session.openWithCallback(self.menuClosed, Setup, dialog)
def addMenu(self, destList, node):
- requires = node.getAttribute("requires")
+ requires = node.get("requires")
if requires and not SystemInfo.get(requires, False):
return
- MenuTitle = _(node.getAttribute("text").encode("UTF-8") or "??")
- entryID = node.getAttribute("entryID") or "undefined"
- weight = node.getAttribute("weight") or 50
- x = node.getAttribute("flushConfigOnClose")
+ MenuTitle = _(node.get("text", "??").encode("UTF-8"))
+ entryID = node.get("entryID", "undefined")
+ weight = node.get("weight", 50)
+ x = node.get("flushConfigOnClose")
if x:
- a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node, node.childNodes)
+ a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node)
else:
- a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node, node.childNodes)
+ a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node)
#TODO add check if !empty(node.childNodes)
destList.append((MenuTitle, a, entryID, weight))
@@ -126,18 +122,16 @@ class Menu(Screen):
self.close(True)
def addItem(self, destList, node):
- requires = node.getAttribute("requires")
+ requires = node.get("requires")
if requires and not SystemInfo.get(requires, False):
return
- item_text = node.getAttribute("text").encode("UTF-8")
- entryID = node.getAttribute("entryID") or "undefined"
- weight = node.getAttribute("weight") or 50
- for x in node.childNodes:
- if x.nodeType != xml.dom.minidom.Element.nodeType:
- continue
- elif x.tagName == 'screen':
- module = x.getAttribute("module") or None
- screen = x.getAttribute("screen") or None
+ item_text = node.get("text", "").encode("UTF-8")
+ entryID = node.get("entryID", "undefined")
+ weight = node.get("weight", 50)
+ for x in node:
+ if x.tag == 'screen':
+ module = x.get("module")
+ screen = x.get("screen")
if screen is None:
screen = module
@@ -150,16 +144,16 @@ class Menu(Screen):
# check for arguments. they will be appended to the
# openDialog call
- args = XMLTools.mergeText(x.childNodes)
+ args = x.text or ""
screen += ", " + args
destList.append((_(item_text or "??"), boundFunction(self.runScreen, (module, screen)), entryID, weight))
return
- elif x.tagName == 'code':
- destList.append((_(item_text or "??"), boundFunction(self.execText, XMLTools.mergeText(x.childNodes)), entryID, weight))
+ elif x.tag == 'code':
+ destList.append((_(item_text or "??"), boundFunction(self.execText, x.text), entryID, weight))
return
- elif x.tagName == 'setup':
- id = x.getAttribute("id")
+ elif x.tag == 'setup':
+ id = x.get("id")
if item_text == "":
item_text = _(getSetupTitle(id)) + "..."
else:
@@ -169,26 +163,23 @@ class Menu(Screen):
destList.append((item_text, self.nothing, entryID, weight))
- def __init__(self, session, parent, childNode):
+ def __init__(self, session, parent):
Screen.__init__(self, session)
list = []
menuID = None
- for x in childNode: #walk through the actual nodelist
- if x.nodeType != xml.dom.minidom.Element.nodeType:
- continue
- elif x.tagName == 'item':
- item_level = int(x.getAttribute("level") or "0")
-
+ for x in parent: #walk through the actual nodelist
+ if x.tag == 'item':
+ item_level = int(x.get("level", 0))
if item_level <= config.usage.setup_level.index:
self.addItem(list, x)
count += 1
- elif x.tagName == 'menu':
+ elif x.tag == 'menu':
self.addMenu(list, x)
count += 1
- elif x.tagName == "id":
- menuID = x.getAttribute("val")
+ elif x.tag == "id":
+ menuID = x.get("val")
count = 0
if menuID is not None:
@@ -237,10 +228,10 @@ class Menu(Screen):
"9": self.keyNumberGlobal
})
- a = parent.getAttribute("title").encode("UTF-8") or None
+ a = parent.get("title", "").encode("UTF-8") or None
a = a and _(a)
if a is None:
- a = _(parent.getAttribute("text").encode("UTF-8"))
+ a = _(parent.get("text", "").encode("UTF-8"))
self["title"] = StaticText(a)
self.menu_title = a
diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py
index 6489f28f..da6fcc12 100644
--- a/lib/python/Screens/Satconfig.py
+++ b/lib/python/Screens/Satconfig.py
@@ -87,6 +87,10 @@ class NimSetup(Screen, ConfigListScreen):
self.uncommittedDiseqcCommand = None
self.cableScanType = None
self.have_advanced = False
+ self.advancedUnicable = None
+ self.advancedType = None
+ self.advancedManufacturer = None
+ self.advancedSCR = None
if self.nim.isCompatible("DVB-S"):
self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
@@ -190,6 +194,7 @@ class NimSetup(Screen, ConfigListScreen):
checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
+ self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, \
self.uncommittedDiseqcCommand, self.cableScanType)
for x in checkList:
if self["config"].getCurrent() == x:
@@ -216,19 +221,57 @@ class NimSetup(Screen, ConfigListScreen):
if isinstance(currLnb, ConfigNothing):
currLnb = None
- self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
- self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
- if currLnb and currLnb.diseqcMode.value == "1_2":
- if lnbnum < 33:
- self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals)
- self.list.append(self.advancedUsalsEntry)
- if not Sat.usals.value:
- self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition))
-
# LNBs
self.advancedLnbsEntry = getConfigListEntry(_("LNB"), Sat.lnb)
self.list.append(self.advancedLnbsEntry)
+
if currLnb:
+ self.list.append(getConfigListEntry(_("Priority"), currLnb.prio))
+ self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
+ self.list.append(self.advancedLof)
+ if currLnb.lof.value == "user_defined":
+ self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
+ self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
+ self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
+# self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v))
+
+ if currLnb.lof.value == "unicable":
+ self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable)
+ self.list.append(self.advancedUnicable)
+ if currLnb.unicable.value == "unicable_user":
+ self.advancedSCR = getConfigListEntry(_("Channel"), currLnb.satcruser)
+ self.list.append(self.advancedSCR)
+ self.list.append(getConfigListEntry(_("Frequency"), currLnb.satcrvcouser[currLnb.satcruser.index]))
+ self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
+ self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
+ self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
+ elif currLnb.unicable.value == "unicable_matrix":
+ manufacturer_name = currLnb.unicableMatrixManufacturer.value
+ manufacturer = currLnb.unicableMatrix[manufacturer_name]
+ product_name = manufacturer.product.value
+ self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer)
+ self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
+ self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
+ self.list.append(self.advancedManufacturer)
+ self.list.append(self.advancedType)
+ self.list.append(self.advancedSCR)
+ self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index]))
+ elif currLnb.unicable.value == "unicable_lnb":
+ manufacturer_name = currLnb.unicableLnbManufacturer.value
+ manufacturer = currLnb.unicableLnb[manufacturer_name]
+ product_name = manufacturer.product.value
+ self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer)
+ self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
+ self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
+ self.list.append(self.advancedManufacturer)
+ self.list.append(self.advancedType)
+ self.list.append(self.advancedSCR)
+ self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index]))
+ else: #kein Unicable
+ self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
+ self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
+ self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
+
if lnbnum < 33:
self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
self.list.append(self.advancedDiseqcMode)
@@ -275,14 +318,12 @@ class NimSetup(Screen, ConfigListScreen):
if currLnb.powerMeasurement.value:
currLnb.powerMeasurement.value = False
currLnb.powerMeasurement.save()
- self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
- self.list.append(self.advancedLof)
- if currLnb.lof.value == "user_defined":
- self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
- self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
- self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
-# self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v))
- self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
+ self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals)
+ self.list.append(self.advancedUsalsEntry)
+ if not Sat.usals.value:
+ self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition))
+
+
def fillAdvancedList(self):
self.list = [ ]
@@ -383,18 +424,26 @@ class NimSelection(Screen):
self.list = [None] * nimmanager.getSlotCount()
self["nimlist"] = List(self.list)
self.updateList()
+
+ self.setResultClass()
self["actions"] = ActionMap(["OkCancelActions"],
{
"ok": self.okbuttonClick ,
"cancel": self.close
}, -2)
+
+ def setResultClass(self):
+ self.resultclass = NimSetup
def okbuttonClick(self):
nim = self["nimlist"].getCurrent()
nim = nim and nim[3]
if nim is not None and not nim.empty:
- self.session.openWithCallback(self.updateList, NimSetup, nim.slot)
+ self.session.openWithCallback(self.updateList, self.resultclass, nim.slot)
+
+ def showNim(self, nim):
+ return True
def updateList(self):
self.list = [ ]
@@ -402,42 +451,44 @@ class NimSelection(Screen):
slotid = x.slot
nimConfig = nimmanager.getNimConfig(x.slot)
text = nimConfig.configMode.value
- if x.isCompatible("DVB-S"):
- if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends"]:
- text = { "loopthrough": _("loopthrough to"),
- "equal": _("equal to"),
- "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
- text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)]
- elif nimConfig.configMode.value == "nothing":
- text = _("nothing connected")
- elif nimConfig.configMode.value == "simple":
- if nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
- text = _("Sats") + ": "
- if nimConfig.diseqcA.orbital_position != 3601:
- text += nimmanager.getSatName(int(nimConfig.diseqcA.value))
- if nimConfig.diseqcMode.value in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
- if nimConfig.diseqcB.orbital_position != 3601:
- text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value))
- if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
- if nimConfig.diseqcC.orbital_position != 3601:
- text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value))
- if nimConfig.diseqcD.orbital_position != 3601:
- text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value))
- elif nimConfig.diseqcMode.value == "positioner":
- text = _("Positioner") + ":"
- if nimConfig.positionerMode.value == "usals":
- text += _("USALS")
- elif nimConfig.positionerMode.value == "manual":
- text += _("manual")
- else:
- text = _("simple")
- elif nimConfig.configMode.value == "advanced":
- text = _("advanced")
- elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"):
- if nimConfig.configMode.value == "nothing":
- text = _("nothing connected")
- elif nimConfig.configMode.value == "enabled":
- text = _("enabled")
-
- self.list.append((slotid, x.friendly_full_description, text, x))
+ if self.showNim(x):
+ if x.isCompatible("DVB-S"):
+ if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends"]:
+ text = { "loopthrough": _("loopthrough to"),
+ "equal": _("equal to"),
+ "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
+ text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)]
+ elif nimConfig.configMode.value == "nothing":
+ text = _("nothing connected")
+ elif nimConfig.configMode.value == "simple":
+ if nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
+ text = _("Sats") + ": "
+ if nimConfig.diseqcA.orbital_position != 3601:
+ text += nimmanager.getSatName(int(nimConfig.diseqcA.value))
+ if nimConfig.diseqcMode.value in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
+ if nimConfig.diseqcB.orbital_position != 3601:
+ text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value))
+ if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
+ if nimConfig.diseqcC.orbital_position != 3601:
+ text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value))
+ if nimConfig.diseqcD.orbital_position != 3601:
+ text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value))
+ elif nimConfig.diseqcMode.value == "positioner":
+ text = _("Positioner") + ":"
+ if nimConfig.positionerMode.value == "usals":
+ text += _("USALS")
+ elif nimConfig.positionerMode.value == "manual":
+ text += _("manual")
+ else:
+ text = _("simple")
+ elif nimConfig.configMode.value == "advanced":
+ text = _("advanced")
+ elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"):
+ if nimConfig.configMode.value == "nothing":
+ text = _("nothing connected")
+ elif nimConfig.configMode.value == "enabled":
+ text = _("enabled")
+
+ self.list.append((slotid, x.friendly_full_description, text, x))
+ self["nimlist"].setList(self.list)
self["nimlist"].updateList(self.list) \ No newline at end of file
diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py
index 608dcb2d..7089074a 100644
--- a/lib/python/Screens/ScanSetup.py
+++ b/lib/python/Screens/ScanSetup.py
@@ -17,64 +17,17 @@ def buildTerTransponder(frequency,
inversion=2, bandwidth = 3, fechigh = 6, feclow = 6,
modulation = 2, transmission = 2, guard = 4,
hierarchy = 4):
-
# print "freq", frequency, "inv", inversion, "bw", bandwidth, "fech", fechigh, "fecl", feclow, "mod", modulation, "tm", transmission, "guard", guard, "hierarchy", hierarchy
-
- # WARNING: normally, enums are working directly.
- # Don't copy this (very bad)!! Instead either fix swig (good) or
- # move this into a central place.
- Bw8MHz = 0
- Bw7MHz = 1
- Bw6MHz = 2
- #Bw5MHz = 3 #not implemented for e1 compatibilty
- BwAuto = 3
-
- f1_2 = 0
- f2_3 = 1
- f3_4 = 2
- f5_6 = 3
- f7_8 = 4
- fAuto = 5
-
- TM2k = 0
- TM8k = 1
- #TM4k = 2 #not implemented for e1 compatibilty
- TMAuto = 2
-
- GI_1_32 = 0
- GI_1_16 = 1
- GI_1_8 = 2
- GI_1_4 = 3
- GI_Auto = 4
-
- HNone = 0
- H1 = 1
- H2 = 2
- H4 = 3
- HAuto = 4
-
- QPSK = 0
- QAM16 = 1
- QAM64 = 2
- Auto = 3
-
- Off = 0
- On = 1
- Unknown = 2
-
parm = eDVBFrontendParametersTerrestrial()
-
parm.frequency = frequency
-
- parm.inversion = [Off, On, Unknown][inversion]
- parm.bandwidth = [Bw8MHz, Bw7MHz, Bw6MHz, BwAuto][bandwidth] # Bw5MHz unsupported
- parm.code_rate_HP = [f1_2, f2_3, f3_4, f5_6, f7_8, fAuto][fechigh]
- parm.code_rate_LP = [f1_2, f2_3, f3_4, f5_6, f7_8, fAuto][feclow]
- parm.modulation = [QPSK, QAM16, QAM64, Auto][modulation]
- parm.transmission_mode = [TM2k, TM8k, TMAuto][transmission] # TM4k unsupported
- parm.guard_interval = [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto][guard]
- parm.hierarchy = [HNone, H1, H2, H4, HAuto][hierarchy]
-
+ parm.inversion = inversion
+ parm.bandwidth = bandwidth
+ parm.code_rate_HP = fechigh
+ parm.code_rate_LP = feclow
+ parm.modulation = modulation
+ parm.transmission_mode = transmission
+ parm.guard_interval = guard
+ parm.hierarchy = hierarchy
return parm
def getInitialTransponderList(tlist, pos):
@@ -103,7 +56,7 @@ def getInitialCableTransponderList(tlist, nim):
parm.symbol_rate = x[2]
parm.modulation = x[3]
parm.fec_inner = x[4]
- parm.inversion = 2 # AUTO
+ parm.inversion = parm.Inversion_Unknown
#print "frequency:", x[1]
#print "symbol_rate:", x[2]
#print "modulation:", x[3]
@@ -178,10 +131,22 @@ class CableTransponderSearchSupport:
if len(data):
if data[0] == 'OK':
print str
- qam = { "QAM16" : 1, "QAM32" : 2, "QAM64" : 3, "QAM128" : 4, "QAM256" : 5 }
- inv = { "INVERSION_OFF" : 0, "INVERSION_ON" : 1 }
- fec = { "FEC_AUTO" : 0, "FEC_1_2" : 1, "FEC_2_3" : 2, "FEC_3_4" : 3, "FEC_5_6": 4, "FEC_7_8" : 5, "FEC_8_9" : 6, "FEC_NONE" : 15 }
parm = eDVBFrontendParametersCable()
+ qam = { "QAM16" : parm.Modulation_QAM16,
+ "QAM32" : parm.Modulation_QAM32,
+ "QAM64" : parm.Modulation_QAM64,
+ "QAM128" : parm.Modulation_QAM128,
+ "QAM256" : parm.Modulation_QAM256 }
+ inv = { "INVERSION_OFF" : parm.Inversion_Off,
+ "INVERSION_ON" : parm.Inversion_On }
+ fec = { "FEC_AUTO" : parm.FEC_Auto,
+ "FEC_1_2" : parm.FEC_1_2,
+ "FEC_2_3" : parm.FEC_2_3,
+ "FEC_3_4" : parm.FEC_3_4,
+ "FEC_5_6": parm.FEC_5_6,
+ "FEC_7_8" : parm.FEC_7_8,
+ "FEC_8_9" : parm.FEC_8_9,
+ "FEC_NONE" : parm.FEC_None }
parm.frequency = int(data[1])
parm.symbol_rate = int(data[2])
parm.fec_inner = fec[data[3]]
@@ -381,15 +346,15 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
self.list.append(self.systemEntry)
else:
# downgrade to dvb-s, in case a -s2 config was active
- self.scan_sat.system.value = "dvb-s"
+ self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
self.list.append(getConfigListEntry(_('Satellite'), self.scan_satselection[index_to_scan]))
self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
- if self.scan_sat.system.value == "dvb-s":
+ if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
- elif self.scan_sat.system.value == "dvb-s2":
+ elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
self.list.append(self.modulationEntry)
@@ -447,7 +412,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
if cur == self.typeOfScanEntry or \
cur == self.tunerEntry or \
cur == self.systemEntry or \
- (self.modulationEntry and self.systemEntry[1].value == "dvb-s2" and cur == self.modulationEntry):
+ (self.modulationEntry and self.systemEntry[1].value == eDVBFrontendParametersSatellite.System_DVB_S2 and cur == self.modulationEntry):
self.createSetup()
def createConfig(self, frontendData):
@@ -481,34 +446,65 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
#("Transmission Mode", frontendData["transmission_mode"], TYPE_TEXT),
#("Guard Interval", frontendData["guard_interval"], TYPE_TEXT),
#("Hierarchy Inform.", frontendData["hierarchy_information"], TYPE_TEXT),
- defaultSat = { "orbpos": 192, "system": "dvb-s", "frequency": 11836, "inversion": "auto", "symbolrate": 27500, "polarization": "horizontal", "fec": "auto", "fec_s2": "9_10", "modulation": "qpsk" }
- defaultCab = {"frequency": 466, "inversion": "auto", "modulation": "64qam", "fec": "auto", "symbolrate": 6900}
+ defaultSat = {
+ "orbpos": 192,
+ "system": eDVBFrontendParametersSatellite.System_DVB_S,
+ "frequency": 11836,
+ "inversion": eDVBFrontendParametersSatellite.Inversion_Unknown,
+ "symbolrate": 27500,
+ "polarization": eDVBFrontendParametersSatellite.Polarisation_Horizontal,
+ "fec": eDVBFrontendParametersSatellite.FEC_Auto,
+ "fec_s2": eDVBFrontendParametersSatellite.FEC_9_10,
+ "modulation": eDVBFrontendParametersSatellite.Modulation_QPSK }
+ defaultCab = {
+ "frequency": 466,
+ "inversion": eDVBFrontendParametersCable.Inversion_Unknown,
+ "modulation": eDVBFrontendParametersCable.Modulation_QAM64,
+ "fec": eDVBFrontendParametersCable.FEC_Auto,
+ "symbolrate": 6900 }
+ defaultTer = {
+ "frequency" : 466000,
+ "inversion" : eDVBFrontendParametersTerrestrial.Inversion_Unknown,
+ "bandwidth" : eDVBFrontendParametersTerrestrial.Bandwidth_7MHz,
+ "fechigh" : eDVBFrontendParametersTerrestrial.FEC_Auto,
+ "feclow" : eDVBFrontendParametersTerrestrial.FEC_Auto,
+ "modulation" : eDVBFrontendParametersTerrestrial.Modulation_Auto,
+ "transmission_mode" : eDVBFrontendParametersTerrestrial.TransmissionMode_Auto,
+ "guard_interval" : eDVBFrontendParametersTerrestrial.GuardInterval_Auto,
+ "hierarchy": eDVBFrontendParametersTerrestrial.Hierarchy_Auto }
+
if frontendData is not None:
ttype = frontendData.get("tuner_type", "UNKNOWN")
if ttype == "DVB-S":
- defaultSat["system"] = {"DVB-S": "dvb-s", "DVB-S2": "dvb-s2"}[frontendData.get("system", "DVB-S")]
- defaultSat["frequency"] = int(frontendData.get("frequency", 0) / 1000)
- defaultSat["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")]
- defaultSat["symbolrate"] = int(frontendData.get("symbol_rate", 0) / 1000)
- defaultSat["polarization"] = {"HORIZONTAL": "horizontal", "VERTICAL": "vertical", "CIRCULAR_LEFT": "circular_left", "CIRCULAR_RIGHT": "circular_right", "UNKNOWN": None}[frontendData.get("polarization", "HORIZONTAL")]
-
- if frontendData.get("system", "DVB-S") == "DVB-S2":
- defaultSat["fec_s2"] = {"FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_4_5": "4_5", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_8_9": "8_9", "FEC_9_10": "9_10"} \
- [frontendData.get("fec_inner", "FEC_AUTO")]
- defaultSat["rolloff"] = {"ROLLOFF_0_35" : "0_35", "ROLLOFF_0_25" : "0_25", "ROLLOFF_0_20" : "0_20"}[frontendData.get("rolloff", "ROLLOFF_0_35")]
- defaultSat["pilot"] = {"PILOT_ON" : "on", "PILOT_OFF" : "off", "PILOT_AUTO" : "auto"}[frontendData.get("pilot", "PILOT_AUTO")]
+ defaultSat["system"] = frontendData.get("system", eDVBFrontendParametersSatellite.System_DVB_S)
+ defaultSat["frequency"] = frontendData.get("frequency", 0) / 1000
+ defaultSat["inversion"] = frontendData.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown)
+ defaultSat["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
+ defaultSat["polarization"] = frontendData.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal)
+ if defaultSat["system"] == eDVBFrontendParametersSatellite.System_DVB_S2:
+ defaultSat["fec_s2"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
+ defaultSat["rolloff"] = frontendData.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35)
+ defaultSat["pilot"] = frontendData.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown)
else:
- defaultSat["fec"] = {"FEC_AUTO": "auto", "FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_NONE": "none"} \
- [frontendData.get("fec_inner", "FEC_AUTO")]
-
- defaultSat["modulation"] = {"QPSK": "qpsk", "8PSK": "8psk"}[frontendData.get("modulation", "QPSK")]
+ defaultSat["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
+ defaultSat["modulation"] = frontendData.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK)
defaultSat["orbpos"] = frontendData.get("orbital_position", 0)
elif ttype == "DVB-C":
- defaultCab["frequency"] = int(frontendData.get("frequency", 0) / 1000)
- defaultCab["symbolrate"] = int(frontendData.get("symbol_rate", 0) / 1000)
- defaultCab["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")]
- defaultCab["fec"] = {"FEC_AUTO": "auto", "FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_8_9": "8_9", "FEC_NONE": "none"}[frontendData.get("fec_inner", "FEC_AUTO")]
- defaultCab["modulation"] = {"QAM_AUTO": "auto", "QAM_16": "16qam", "QAM_32": "32qam", "QAM_64": "64qam", "QAM_128": "128qam", "QAM_256": "256qam"}[frontendData.get("modulation", "QAM_16")]
+ defaultCab["frequency"] = frontendData.get("frequency", 0) / 1000
+ defaultCab["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
+ defaultCab["inversion"] = frontendData.get("inversion", eDVBFrontendParametersCable.Inversion_Unknown)
+ defaultCab["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersCable.FEC_Auto)
+ defaultCab["modulation"] = frontendData.get("modulation", eDVBFrontendParametersCable.Modulation_QAM16)
+ elif ttype == "DVB-T":
+ defaultTer["frequency"] = frontendData.get("frequency", 0)
+ defaultTer["inversion"] = frontendData.get("inversion", eDVBFrontendParametersTerrestrial.Inversion_Unknown)
+ defaultTer["bandwidth"] = frontendData.get("bandwidth", eDVBFrontendParametersTerrestrial.Bandwidth_7MHz)
+ defaultTer["fechigh"] = frontendData.get("code_rate_hp", eDVBFrontendParametersTerrestrial.FEC_Auto)
+ defaultTer["feclow"] = frontendData.get("code_rate_lp", eDVBFrontendParametersTerrestrial.FEC_Auto)
+ defaultTer["modulation"] = frontendData.get("constellation", eDVBFrontendParametersTerrestrial.Modulation_Auto)
+ defaultTer["transmission_mode"] = frontendData.get("transmission_mode", eDVBFrontendParametersTerrestrial.TransmissionMode_Auto)
+ defaultTer["guard_interval"] = frontendData.get("guard_interval", eDVBFrontendParametersTerrestrial.GuardInterval_Auto)
+ defaultTer["hierarchy"] = frontendData.get("hierarchy_information", eDVBFrontendParametersTerrestrial.Hierarchy_Auto)
self.scan_sat = ConfigSubsection()
self.scan_cab = ConfigSubsection()
@@ -524,7 +520,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
nim_list = []
# collect all nims which are *not* set to "nothing"
for n in nimmanager.nim_slots:
- if n.config_mode != "nothing":
+ if not n.config_mode in ("loopthrough", "satposdepends", "nothing"):
nim_list.append((str(n.slot), n.friendly_full_description))
self.scan_nims = ConfigSelection(choices = nim_list)
@@ -538,36 +534,120 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
self.scan_ber.enabled = False
# sat
- self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = [("dvb-s", _("DVB-S")), ("dvb-s2", _("DVB-S2"))])
+ self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = [
+ (eDVBFrontendParametersSatellite.System_DVB_S, _("DVB-S")),
+ (eDVBFrontendParametersSatellite.System_DVB_S2, _("DVB-S2"))])
self.scan_sat.frequency = ConfigInteger(default = defaultSat["frequency"], limits = (1, 99999))
- self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
+ self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [
+ (eDVBFrontendParametersSatellite.Inversion_Off, _("off")),
+ (eDVBFrontendParametersSatellite.Inversion_On, _("on")),
+ (eDVBFrontendParametersSatellite.Inversion_Unknown, _("Auto"))])
self.scan_sat.symbolrate = ConfigInteger(default = defaultSat["symbolrate"], limits = (1, 99999))
- self.scan_sat.polarization = ConfigSelection(default = defaultSat["polarization"], choices = [("horizontal", _("horizontal")), ("vertical", _("vertical")), ("circular_left", _("circular left")), ("circular_right", _("circular right"))])
- self.scan_sat.fec = ConfigSelection(default = defaultSat["fec"], choices = [("auto", _("Auto")), ("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("none", _("None"))])
- self.scan_sat.fec_s2 = ConfigSelection(default = defaultSat["fec_s2"], choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("3_5", "3/5"), ("4_5", "4/5"), ("5_6", "5/6"), ("7_8", "7/8"), ("8_9", "8/9"), ("9_10", "9/10")])
- self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [("qpsk", "QPSK"), ("8psk", "8PSK")])
- self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", "0_35"), choices = [("0_35", "0.35"), ("0_25", "0.25"), ("0_20", "0.20")])
- self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", "auto"), choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
+ self.scan_sat.polarization = ConfigSelection(default = defaultSat["polarization"], choices = [
+ (eDVBFrontendParametersSatellite.Polarisation_Horizontal, _("horizontal")),
+ (eDVBFrontendParametersSatellite.Polarisation_Vertical, _("vertical")),
+ (eDVBFrontendParametersSatellite.Polarisation_CircularLeft, _("circular left")),
+ (eDVBFrontendParametersSatellite.Polarisation_CircularRight, _("circular right"))])
+ self.scan_sat.fec = ConfigSelection(default = defaultSat["fec"], choices = [
+ (eDVBFrontendParametersSatellite.FEC_Auto, _("Auto")),
+ (eDVBFrontendParametersSatellite.FEC_1_2, "1/2"),
+ (eDVBFrontendParametersSatellite.FEC_2_3, "2/3"),
+ (eDVBFrontendParametersSatellite.FEC_3_4, "3/4"),
+ (eDVBFrontendParametersSatellite.FEC_5_6, "5/6"),
+ (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"),
+ (eDVBFrontendParametersSatellite.FEC_None, _("None"))])
+ self.scan_sat.fec_s2 = ConfigSelection(default = defaultSat["fec_s2"], choices = [
+ (eDVBFrontendParametersSatellite.FEC_1_2, "1/2"),
+ (eDVBFrontendParametersSatellite.FEC_2_3, "2/3"),
+ (eDVBFrontendParametersSatellite.FEC_3_4, "3/4"),
+ (eDVBFrontendParametersSatellite.FEC_3_5, "3/5"),
+ (eDVBFrontendParametersSatellite.FEC_4_5, "4/5"),
+ (eDVBFrontendParametersSatellite.FEC_5_6, "5/6"),
+ (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"),
+ (eDVBFrontendParametersSatellite.FEC_8_9, "8/9"),
+ (eDVBFrontendParametersSatellite.FEC_9_10, "9/10")])
+ self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [
+ (eDVBFrontendParametersSatellite.Modulation_QPSK, "QPSK"),
+ (eDVBFrontendParametersSatellite.Modulation_8PSK, "8PSK")])
+ self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35), choices = [
+ (eDVBFrontendParametersSatellite.RollOff_alpha_0_35, "0.35"),
+ (eDVBFrontendParametersSatellite.RollOff_alpha_0_25, "0.25"),
+ (eDVBFrontendParametersSatellite.RollOff_alpha_0_20, "0.20")])
+ self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown), choices = [
+ (eDVBFrontendParametersSatellite.Pilot_Off, _("off")),
+ (eDVBFrontendParametersSatellite.Pilot_On, _("on")),
+ (eDVBFrontendParametersSatellite.Pilot_Unknown, _("Auto"))])
# cable
self.scan_cab.frequency = ConfigInteger(default = defaultCab["frequency"], limits = (50, 999))
- self.scan_cab.inversion = ConfigSelection(default = defaultCab["inversion"], choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
- self.scan_cab.modulation = ConfigSelection(default = defaultCab["modulation"], choices = [("16qam", "16-QAM"), ("32qam", "32-QAM"), ("64qam", "64-QAM"), ("128qam", "128-QAM"), ("256qam", "256-QAM")])
- self.scan_cab.fec = ConfigSelection(default = defaultCab["fec"], choices = [("auto", _("Auto")), ("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("8_9", "8/9"), ("none", _("None"))])
+ self.scan_cab.inversion = ConfigSelection(default = defaultCab["inversion"], choices = [
+ (eDVBFrontendParametersCable.Inversion_Off, _("off")),
+ (eDVBFrontendParametersCable.Inversion_On, _("on")),
+ (eDVBFrontendParametersCable.Inversion_Unknown, _("Auto"))])
+ self.scan_cab.modulation = ConfigSelection(default = defaultCab["modulation"], choices = [
+ (eDVBFrontendParametersCable.Modulation_QAM16, "16-QAM"),
+ (eDVBFrontendParametersCable.Modulation_QAM32, "32-QAM"),
+ (eDVBFrontendParametersCable.Modulation_QAM64, "64-QAM"),
+ (eDVBFrontendParametersCable.Modulation_QAM128, "128-QAM"),
+ (eDVBFrontendParametersCable.Modulation_QAM256, "256-QAM")])
+ self.scan_cab.fec = ConfigSelection(default = defaultCab["fec"], choices = [
+ (eDVBFrontendParametersCable.FEC_Auto, _("Auto")),
+ (eDVBFrontendParametersCable.FEC_1_2, "1/2"),
+ (eDVBFrontendParametersCable.FEC_2_3, "2/3"),
+ (eDVBFrontendParametersCable.FEC_3_4, "3/4"),
+ (eDVBFrontendParametersCable.FEC_5_6, "5/6"),
+ (eDVBFrontendParametersCable.FEC_7_8, "7/8"),
+ (eDVBFrontendParametersCable.FEC_8_9, "8/9"),
+ (eDVBFrontendParametersCable.FEC_None, _("None"))])
self.scan_cab.symbolrate = ConfigInteger(default = defaultCab["symbolrate"], limits = (1, 99999))
# terrestial
self.scan_ter.frequency = ConfigInteger(default = 466000, limits = (50000, 999000))
- self.scan_ter.inversion = ConfigSelection(default = "auto", choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
+ self.scan_ter.inversion = ConfigSelection(default = defaultTer["inversion"], choices = [
+ (eDVBFrontendParametersTerrestrial.Inversion_Off, _("off")),
+ (eDVBFrontendParametersTerrestrial.Inversion_On, _("on")),
+ (eDVBFrontendParametersTerrestrial.Inversion_Unknown, _("Auto"))])
# WORKAROUND: we can't use BW-auto
- self.scan_ter.bandwidth = ConfigSelection(default = "8MHz", choices = [("8MHz", "8MHz"), ("7MHz", "7MHz"), ("6MHz", "6MHz")])
- #, ("auto", _("Auto"))))
- self.scan_ter.fechigh = ConfigSelection(default = "auto", choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("auto", _("Auto"))])
- self.scan_ter.feclow = ConfigSelection(default = "auto", choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("auto", _("Auto"))])
- self.scan_ter.modulation = ConfigSelection(default = "auto", choices = [("qpsk", "QPSK"), ("qam16", "QAM16"), ("qam64", "QAM64"), ("auto", _("Auto"))])
- self.scan_ter.transmission = ConfigSelection(default = "auto", choices = [("2k", "2K"), ("8k", "8K"), ("auto", _("Auto"))])
- self.scan_ter.guard = ConfigSelection(default = "auto", choices = [("1_32", "1/32"), ("1_16", "1/16"), ("1_8", "1/8"), ("1_4", "1/4"), ("auto", _("Auto"))])
- self.scan_ter.hierarchy = ConfigSelection(default = "auto", choices = [("none", _("None")), ("1", "1"), ("2", "2"), ("4", "4"), ("auto", _("Auto"))])
+ self.scan_ter.bandwidth = ConfigSelection(default = defaultTer["bandwidth"], choices = [
+ (eDVBFrontendParametersTerrestrial.Bandwidth_8MHz, "8MHz"),
+ (eDVBFrontendParametersTerrestrial.Bandwidth_7MHz, "7MHz"),
+ (eDVBFrontendParametersTerrestrial.Bandwidth_6MHz, "6MHz")])
+ #, (eDVBFrontendParametersTerrestrial.Bandwidth_Auto, _("Auto"))))
+ self.scan_ter.fechigh = ConfigSelection(default = defaultTer["fechigh"], choices = [
+ (eDVBFrontendParametersTerrestrial.FEC_1_2, "1/2"),
+ (eDVBFrontendParametersTerrestrial.FEC_2_3, "2/3"),
+ (eDVBFrontendParametersTerrestrial.FEC_3_4, "3/4"),
+ (eDVBFrontendParametersTerrestrial.FEC_5_6, "5/6"),
+ (eDVBFrontendParametersTerrestrial.FEC_7_8, "7/8"),
+ (eDVBFrontendParametersTerrestrial.FEC_Auto, _("Auto"))])
+ self.scan_ter.feclow = ConfigSelection(default = defaultTer["feclow"], choices = [
+ (eDVBFrontendParametersTerrestrial.FEC_1_2, "1/2"),
+ (eDVBFrontendParametersTerrestrial.FEC_2_3, "2/3"),
+ (eDVBFrontendParametersTerrestrial.FEC_3_4, "3/4"),
+ (eDVBFrontendParametersTerrestrial.FEC_5_6, "5/6"),
+ (eDVBFrontendParametersTerrestrial.FEC_7_8, "7/8"),
+ (eDVBFrontendParametersTerrestrial.FEC_Auto, _("Auto"))])
+ self.scan_ter.modulation = ConfigSelection(default = defaultTer["modulation"], choices = [
+ (eDVBFrontendParametersTerrestrial.Modulation_QPSK, "QPSK"),
+ (eDVBFrontendParametersTerrestrial.Modulation_QAM16, "QAM16"),
+ (eDVBFrontendParametersTerrestrial.Modulation_QAM64, "QAM64"),
+ (eDVBFrontendParametersTerrestrial.Modulation_Auto, _("Auto"))])
+ self.scan_ter.transmission = ConfigSelection(default = defaultTer["transmission_mode"], choices = [
+ (eDVBFrontendParametersTerrestrial.TransmissionMode_2k, "2K"),
+ (eDVBFrontendParametersTerrestrial.TransmissionMode_8k, "8K"),
+ (eDVBFrontendParametersTerrestrial.TransmissionMode_Auto, _("Auto"))])
+ self.scan_ter.guard = ConfigSelection(default = defaultTer["guard_interval"], choices = [
+ (eDVBFrontendParametersTerrestrial.GuardInterval_1_32, "1/32"),
+ (eDVBFrontendParametersTerrestrial.GuardInterval_1_16, "1/16"),
+ (eDVBFrontendParametersTerrestrial.GuardInterval_1_8, "1/8"),
+ (eDVBFrontendParametersTerrestrial.GuardInterval_1_4, "1/4"),
+ (eDVBFrontendParametersTerrestrial.GuardInterval_Auto, _("Auto"))])
+ self.scan_ter.hierarchy = ConfigSelection(default = defaultTer["hierarchy"], choices = [
+ (eDVBFrontendParametersTerrestrial.Hierarchy_None, _("None")),
+ (eDVBFrontendParametersTerrestrial.Hierarchy_1, "1"),
+ (eDVBFrontendParametersTerrestrial.Hierarchy_2, "2"),
+ (eDVBFrontendParametersTerrestrial.Hierarchy_4, "4"),
+ (eDVBFrontendParametersTerrestrial.Hierarchy_Auto, _("Auto"))])
self.scan_scansat = {}
for sat in nimmanager.satList:
@@ -577,7 +657,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
self.scan_satselection = []
for slot in nimmanager.nim_slots:
if slot.isCompatible("DVB-S"):
- self.scan_satselection.append(getConfigSatlist(int(defaultSat["orbpos"]), self.satList[slot.slot]))
+ self.scan_satselection.append(getConfigSatlist(defaultSat["orbpos"], self.satList[slot.slot]))
else:
self.scan_satselection.append(None)
@@ -594,36 +674,20 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
def updateStatus(self):
print "updatestatus"
- fecmap = { "auto": 0,
- "1_2": 1,
- "2_3": 2,
- "3_4": 3,
- "5_6": 4,
- "7_8": 5,
- "8_9": 6,
- "3_5": 7,
- "4_5": 8,
- "9_10": 9,
- "none": 15
- }
-
def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot):
- print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(self.fecmap[fec]) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot)
+ print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(fec) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot)
print "orbpos: " + str(orbital_position)
parm = eDVBFrontendParametersSatellite()
- if modulation == 1:
- parm.modulation = 2 # eDVBFrontendParametersSatellite.Modulation.8PSK
- else:
- parm.modulation = 1 # eDVBFrontendParametersSatellite.Modulation.QPSK
+ parm.modulation = modulation
parm.system = system
parm.frequency = frequency * 1000
parm.symbol_rate = symbol_rate * 1000
parm.polarisation = polarisation
- parm.fec = self.fecmap[fec]
+ parm.fec = fec
parm.inversion = inversion
- parm.orbital_position = int(orbital_position)
- parm.rolloff = int(rolloff)
- parm.pilot = int(pilot)
+ parm.orbital_position = orbital_position
+ parm.rolloff = rolloff
+ parm.pilot = pilot
tlist.append(parm)
def addCabTransponder(self, tlist, frequency, symbol_rate, modulation, fec, inversion):
@@ -632,7 +696,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
parm.frequency = frequency * 1000
parm.symbol_rate = symbol_rate * 1000
parm.modulation = modulation
- parm.fec = self.fecmap[fec]
+ parm.fec = fec
parm.inversion = inversion
tlist.append(parm)
@@ -665,21 +729,21 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
# however, the satList itself could be empty. in that case, "index" is 0 (for "None").
if len(nimsats):
orbpos = nimsats[selsatidx][0]
- if self.scan_sat.system.value == "dvb-s":
+ if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
fec = self.scan_sat.fec.value
else:
fec = self.scan_sat.fec_s2.value
print "add sat transponder"
self.addSatTransponder(tlist, self.scan_sat.frequency.value,
self.scan_sat.symbolrate.value,
- self.scan_sat.polarization.index,
+ self.scan_sat.polarization.value,
fec,
- self.scan_sat.inversion.index,
+ self.scan_sat.inversion.value,
orbpos,
- self.scan_sat.system.index,
- self.scan_sat.modulation.index,
- self.scan_sat.rolloff.index,
- self.scan_sat.pilot.index)
+ self.scan_sat.system.value,
+ self.scan_sat.modulation.value,
+ self.scan_sat.rolloff.value,
+ self.scan_sat.pilot.value)
removeAll = False
elif self.scan_type.value == "single_satellite":
sat = self.satList[index_to_scan][self.scan_satselection[index_to_scan].index]
@@ -693,12 +757,11 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
elif nim.isCompatible("DVB-C"):
if self.scan_typecable.value == "single_transponder":
- fec = self.scan_cab.fec.value
self.addCabTransponder(tlist, self.scan_cab.frequency.value,
self.scan_cab.symbolrate.value,
- self.scan_cab.modulation.index + 1,
- fec,
- self.scan_cab.inversion.index)
+ self.scan_cab.modulation.value,
+ self.scan_cab.fec.value,
+ self.scan_cab.inversion.value)
removeAll = False
elif self.scan_typecable.value == "complete":
if config.Nims[index_to_scan].cable.scan_type.value == "provider":
@@ -710,14 +773,14 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
if self.scan_typeterrestrial.value == "single_transponder":
self.addTerTransponder(tlist,
self.scan_ter.frequency.value * 1000,
- inversion = self.scan_ter.inversion.index,
- bandwidth = self.scan_ter.bandwidth.index,
- fechigh = self.scan_ter.fechigh.index,
- feclow = self.scan_ter.feclow.index,
- modulation = self.scan_ter.modulation.index,
- transmission = self.scan_ter.transmission.index,
- guard = self.scan_ter.guard.index,
- hierarchy = self.scan_ter.hierarchy.index)
+ inversion = self.scan_ter.inversion.value,
+ bandwidth = self.scan_ter.bandwidth.value,
+ fechigh = self.scan_ter.fechigh.value,
+ feclow = self.scan_ter.feclow.value,
+ modulation = self.scan_ter.modulation.value,
+ transmission = self.scan_ter.transmission.value,
+ guard = self.scan_ter.guard.value,
+ hierarchy = self.scan_ter.hierarchy.value)
removeAll = False
elif self.scan_typeterrestrial.value == "complete":
getInitialTerrestrialTransponderList(tlist, nimmanager.getTerrestrialDescription(index_to_scan))
diff --git a/lib/python/Screens/ServiceInfo.py b/lib/python/Screens/ServiceInfo.py
index 4606f883..e07b3208 100644
--- a/lib/python/Screens/ServiceInfo.py
+++ b/lib/python/Screens/ServiceInfo.py
@@ -5,6 +5,7 @@ from Components.ActionMap import ActionMap
from Components.Label import Label
from ServiceReference import ServiceReference
from enigma import eListboxPythonMultiContent, eListbox, gFont, iServiceInformation, eServiceCenter
+from Tools.Transponder import ConvertToHumanReadable
RT_HALIGN_LEFT = 0
@@ -131,27 +132,28 @@ class ServiceInfo(Screen):
self.fillList(Labels)
else:
if self.transponder_info:
- conv = { "type" : _("Transponder Type"),
+ tp_info = ConvertToHumanReadable(self.transponder_info)
+ conv = { "tuner_type" : _("Transponder Type"),
"system" : _("System"),
"modulation" : _("Modulation"),
- "orbital position" : _("Orbital Position"),
+ "orbital_position" : _("Orbital Position"),
"frequency" : _("Frequency"),
- "symbolrate" : _("Symbolrate"),
+ "symbol_rate" : _("Symbolrate"),
"bandwidth" : _("Bandwidth"),
"polarization" : _("Polarization"),
"inversion" : _("Inversion"),
"pilot" : _("Pilot"),
- "roll off" : _("Rolloff"),
- "fec inner" : _("FEC"),
- "code rate lp" : _("Coderate LP"),
- "code rate hp" : _("Coderate HP"),
+ "rolloff" : _("Rolloff"),
+ "fec_inner" : _("FEC"),
+ "code_rate_lp" : _("Coderate LP"),
+ "code_rate_hp" : _("Coderate HP"),
"constellation" : _("Constellation"),
- "transmission mode": _("Transmission Mode"),
- "guard interval" : _("Guard Interval"),
- "hierarchy" : _("Hierarchy Information") }
+ "transmission_mode": _("Transmission Mode"),
+ "guard_interval" : _("Guard Interval"),
+ "hierarchy_information": _("Hierarchy Information") }
Labels = [ ]
- for i in self.transponder_info.keys():
- Labels.append( (conv[i], self.transponder_info[i], TYPE_TEXT) )
+ for i in tp_info.keys():
+ Labels.append( (conv[i], tp_info[i], TYPE_VALUE_DEC) )
self.fillList(Labels)
def pids(self):
@@ -180,9 +182,10 @@ class ServiceInfo(Screen):
if self.type == TYPE_SERVICE_INFO:
self.showFrontendData(False)
- def getFEData(self, frontendData):
- if frontendData and len(frontendData):
- if frontendData["tuner_type"] == "DVB-S":
+ def getFEData(self, frontendDataOrg):
+ if frontendDataOrg and len(frontendDataOrg):
+ frontendData = ConvertToHumanReadable(frontendDataOrg)
+ if frontendDataOrg["tuner_type"] == "DVB-S":
return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
("Type", frontendData["system"], TYPE_TEXT),
("Modulation", frontendData["modulation"], TYPE_TEXT),
@@ -194,7 +197,7 @@ class ServiceInfo(Screen):
("FEC inner", frontendData["fec_inner"], TYPE_TEXT),
("Pilot", frontendData.get("pilot", None), TYPE_TEXT),
("Rolloff", frontendData.get("rolloff", None), TYPE_TEXT))
- elif frontendData["tuner_type"] == "DVB-C":
+ elif frontendDataOrg["tuner_type"] == "DVB-C":
return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
("Type", frontendData["tuner_type"], TYPE_TEXT),
("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
@@ -202,7 +205,7 @@ class ServiceInfo(Screen):
("Modulation", frontendData["modulation"], TYPE_TEXT),
("Inversion", frontendData["inversion"], TYPE_TEXT),
("FEC inner", frontendData["fec_inner"], TYPE_TEXT))
- elif frontendData["tuner_type"] == "DVB-T":
+ elif frontendDataOrg["tuner_type"] == "DVB-T":
return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
("Type", frontendData["tuner_type"], TYPE_TEXT),
("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
diff --git a/lib/python/Screens/Setup.py b/lib/python/Screens/Setup.py
index 3ff0b76e..1d035b8a 100644
--- a/lib/python/Screens/Setup.py
+++ b/lib/python/Screens/Setup.py
@@ -6,8 +6,7 @@ from Components.ConfigList import ConfigListScreen
from Components.Label import Label
from Components.Pixmap import Pixmap
-import xml.dom.minidom
-from Tools import XMLTools
+import xml.etree.cElementTree
# FIXME: use resolveFile!
# read the setupmenu
@@ -17,9 +16,16 @@ try:
except:
# if not found in the current path, we use the global datadir-path
setupfile = file('/usr/share/enigma2/setup.xml', 'r')
-setupdom = xml.dom.minidom.parseString(setupfile.read())
+setupdom = xml.etree.cElementTree.parse(setupfile)
setupfile.close()
+class SetupError(Exception):
+ def __init__(self, message):
+ self.message = message
+
+ def __str__(self):
+ return self.message
+
class SetupSummary(Screen):
skin = """
<screen position="6,0" size="120,64">
@@ -63,16 +69,12 @@ class Setup(ConfigListScreen, Screen):
self["config"].setList(list)
def refill(self, list):
- xmldata = setupdom.childNodes[0]
- entries = xmldata.childNodes
- for x in entries: #walk through the actual nodelist
- if x.nodeType != xml.dom.minidom.Element.nodeType:
+ xmldata = setupdom.getroot()
+ for x in xmldata.findall("setup"):
+ if x.get("key") != self.setup:
continue
- elif x.tagName == 'setup':
- if x.getAttribute("key") != self.setup:
- continue
- self.addItems(list, x.childNodes);
- self.setup_title = x.getAttribute("title").encode("UTF-8")
+ self.addItems(list, x);
+ self.setup_title = x.get("title", "").encode("UTF-8")
def __init__(self, session, setup):
Screen.__init__(self, session)
@@ -118,12 +120,10 @@ class Setup(ConfigListScreen, Screen):
def createSummary(self):
return SetupSummary
- def addItems(self, list, childNode):
- for x in childNode:
- if x.nodeType != xml.dom.minidom.Element.nodeType:
- continue
- elif x.tagName == 'item':
- item_level = int(x.getAttribute("level") or "0")
+ def addItems(self, list, parentNode):
+ for x in parentNode:
+ if x.tag == 'item':
+ item_level = int(x.get("level", 0))
if not self.levelChanged in config.usage.setup_level.notifiers:
config.usage.setup_level.notifiers.append(self.levelChanged)
@@ -132,12 +132,12 @@ class Setup(ConfigListScreen, Screen):
if item_level > config.usage.setup_level.index:
continue
- requires = x.getAttribute("requires")
+ requires = x.get("requires")
if requires and not SystemInfo.get(requires, False):
continue;
- item_text = _(x.getAttribute("text").encode("UTF-8") or "??")
- b = eval(XMLTools.mergeText(x.childNodes));
+ item_text = _(x.get("text", "??").encode("UTF-8"))
+ b = eval(x.text or "");
if b == "":
continue
#add to configlist
@@ -148,8 +148,8 @@ class Setup(ConfigListScreen, Screen):
list.append( (item_text, item) )
def getSetupTitle(id):
- xmldata = setupdom.childNodes[0].childNodes
- for x in XMLTools.elementsWithTag(xmldata, "setup"):
- if x.getAttribute("key") == id:
- return x.getAttribute("title").encode("UTF-8")
- raise "unknown setup id '%s'!" % repr(id)
+ xmldata = setupdom.getroot()
+ for x in xmldata.findall("setup"):
+ if x.get("key") == id:
+ return x.get("title", "").encode("UTF-8")
+ raise SetupError("unknown setup id '%s'!" % repr(id))
diff --git a/lib/python/Screens/Standby.py b/lib/python/Screens/Standby.py
index 4c3a1720..d09f28af 100644
--- a/lib/python/Screens/Standby.py
+++ b/lib/python/Screens/Standby.py
@@ -2,6 +2,7 @@ from Screen import Screen
from Components.ActionMap import ActionMap
from Components.config import config
from Components.AVSwitch import AVSwitch
+from Components.SystemInfo import SystemInfo
from enigma import eDVBVolumecontrol
inStandby = None
@@ -49,7 +50,10 @@ class Standby(Screen):
#stop actual played dvb-service
self.session.nav.stopService()
#set input to vcr scart
- self.avswitch.setInput("SCART")
+ if SystemInfo["ScartSwitch"]:
+ self.avswitch.setInput("SCART")
+ else:
+ self.avswitch.setInput("AUX")
#set lcd brightness to standby value
config.lcd.standby.apply()
self.onShow.append(self.__onShow)
diff --git a/lib/python/Screens/TextBox.py b/lib/python/Screens/TextBox.py
new file mode 100644
index 00000000..44b8a3cf
--- /dev/null
+++ b/lib/python/Screens/TextBox.py
@@ -0,0 +1,26 @@
+from Screens.Screen import Screen
+
+from Components.ActionMap import ActionMap
+from Components.Sources.StaticText import StaticText
+from Components.ScrollLabel import ScrollLabel
+
+class TextBox(Screen):
+ def __init__(self, session, text = ""):
+ Screen.__init__(self, session)
+
+ self.text = text
+ self["text"] = ScrollLabel(self.text)
+
+ self["actions"] = ActionMap(["OkCancelActions", "DirectionActions"],
+ {
+ "cancel": self.cancel,
+ "ok": self.ok,
+ "up": self["text"].pageUp,
+ "down": self["text"].pageDown,
+ }, -1)
+
+ def ok(self):
+ self.close()
+
+ def cancel(self):
+ self.close()
diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py
index aae345db..bb2d3c76 100644
--- a/lib/python/Screens/TimerEdit.py
+++ b/lib/python/Screens/TimerEdit.py
@@ -199,9 +199,11 @@ class TimerEditList(Screen):
self.updateState()
def removeTimerQuestion(self):
- if not self["timerlist"].getCurrent():
+ cur = self["timerlist"].getCurrent()
+ if not cur:
return
- self.session.openWithCallback(self.removeTimer, MessageBox, _("Really delete this timer?"))
+
+ self.session.openWithCallback(self.removeTimer, MessageBox, _("Do you really want to delete %s?") % (cur.name))
def removeTimer(self, result):
if not result:
@@ -212,18 +214,6 @@ class TimerEditList(Screen):
timer = cur
timer.afterEvent = AFTEREVENT.NONE
self.session.nav.RecordTimer.removeEntry(timer)
- if not timer.dontSave:
- for timer in self.session.nav.RecordTimer.timer_list:
- if timer.dontSave and timer.autoincrease:
- timer.end = timer.begin + (3600 * 24 * 356 * 1)
- self.session.nav.RecordTimer.timeChanged(timer)
- timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list,timer)
- if not timersanitycheck.check():
- tsc_list = timersanitycheck.getSimulTimerList()
- if len(tsc_list) > 1:
- timer.end = tsc_list[1].begin - 30
- self.session.nav.RecordTimer.timeChanged(timer)
-
self.refill()
self.updateState()
@@ -259,6 +249,7 @@ class TimerEditList(Screen):
def addTimer(self, timer):
self.session.openWithCallback(self.finishedAdd, TimerEntry, timer)
+
def finishedEdit(self, answer):
print "finished edit"
@@ -267,19 +258,25 @@ class TimerEditList(Screen):
print "Edited timer"
entry = answer[1]
timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, entry)
+ success = False
if not timersanitycheck.check():
simulTimerList = timersanitycheck.getSimulTimerList()
- if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
- simulTimerList[1].end = entry.begin - 30
- self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
- self.session.nav.RecordTimer.timeChanged(entry)
- else:
- print "Sanity check failed"
- self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList())
+ if simulTimerList is not None:
+ for x in simulTimerList:
+ if x.setAutoincreaseEnd(entry):
+ self.session.nav.RecordTimer.timeChanged(x)
+ if not timersanitycheck.check():
+ simulTimerList = timersanitycheck.getSimulTimerList()
+ if simulTimerList is not None:
+ self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList())
+ else:
+ success = True
else:
+ succsess = True
+ if success:
print "Sanity check passed"
- if not timersanitycheck.doubleCheck():
- self.session.nav.RecordTimer.timeChanged(entry)
+ self.session.nav.RecordTimer.timeChanged(entry)
+
self.fillTimerList()
self.updateState()
else:
@@ -291,11 +288,11 @@ class TimerEditList(Screen):
entry = answer[1]
simulTimerList = self.session.nav.RecordTimer.record(entry)
if simulTimerList is not None:
- if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
- simulTimerList[1].end = entry.begin - 30
- self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
- self.session.nav.RecordTimer.record(entry)
- else:
+ for x in simulTimerList:
+ if x.setAutoincreaseEnd(entry):
+ self.session.nav.RecordTimer.timeChanged(x)
+ simulTimerList = self.session.nav.RecordTimer.record(entry)
+ if simulTimerList is not None:
self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
self.fillTimerList()
self.updateState()
@@ -333,6 +330,8 @@ class TimerSanityConflict(Screen):
self.list.append((_("Conflicting timer") + " " + str(count), x))
self.list2.append((timer[count], False))
count += 1
+ if count == 1:
+ self.list.append((_("Channel not in services list")))
self["list"] = MenuList(self.list)
self["timer2"] = TimerList(self.list2)
@@ -409,7 +408,7 @@ class TimerSanityConflict(Screen):
self["actions"].actions.update({"green":self.toggleTimer1})
self["key_green"].setText(_("Enable"))
self.key_green_choice = self.ENABLE
- elif self.timer[0].isRunning() and not timer[0].repeated and self.key_green_choice != self.EMPTY:
+ elif self.timer[0].isRunning() and not self.timer[0].repeated and self.key_green_choice != self.EMPTY:
self.removeAction("green")
self["key_green"].setText(" ")
self.key_green_choice = self.EMPTY
@@ -429,7 +428,7 @@ class TimerSanityConflict(Screen):
self["actions"].actions.update({"blue":self.toggleTimer2})
self["key_blue"].setText(_("Enable"))
self.key_blue_choice = self.ENABLE
- elif self.timer[x].isRunning() and not timer[x].repeated and self.key_blue_choice != self.EMPTY:
+ elif self.timer[x].isRunning() and not self.timer[x].repeated and self.key_blue_choice != self.EMPTY:
self.removeAction("blue")
self["key_blue"].setText(" ")
self.key_blue_choice = self.EMPTY
diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py
index 1774061d..0544eff1 100644
--- a/lib/python/Screens/TimerEntry.py
+++ b/lib/python/Screens/TimerEntry.py
@@ -32,11 +32,15 @@ class TimerEntry(Screen, ConfigListScreen):
self.createConfig()
- self["actions"] = NumberActionMap(["SetupActions"],
+ self["actions"] = NumberActionMap(["SetupActions", "GlobalActions", "PiPSetupActions"],
{
"ok": self.keySelect,
"save": self.keyGo,
"cancel": self.keyCancel,
+ "volumeUp": self.incrementStart,
+ "volumeDown": self.decrementStart,
+ "size+": self.incrementEnd,
+ "size-": self.decrementEnd
}, -2)
self.list = []
@@ -46,7 +50,12 @@ class TimerEntry(Screen, ConfigListScreen):
def createConfig(self):
justplay = self.timer.justplay
- afterevent = { AFTEREVENT.NONE: "nothing", AFTEREVENT.DEEPSTANDBY: "deepstandby", AFTEREVENT.STANDBY: "standby"}[self.timer.afterEvent]
+ afterevent = {
+ AFTEREVENT.NONE: "nothing",
+ AFTEREVENT.DEEPSTANDBY: "deepstandby",
+ AFTEREVENT.STANDBY: "standby",
+ AFTEREVENT.AUTO: "auto"
+ }[self.timer.afterEvent]
weekday_table = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
@@ -84,7 +93,7 @@ class TimerEntry(Screen, ConfigListScreen):
day[weekday] = 1
self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay])
- self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = afterevent)
+ self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby")), ("auto", _("auto"))], default = afterevent)
self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type)
self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False)
self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False)
@@ -155,9 +164,14 @@ class TimerEntry(Screen, ConfigListScreen):
self.entryDate = getConfigListEntry(_("Date"), self.timerentry_date)
if self.timerentry_type.value == "once":
self.list.append(self.entryDate)
- self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime))
+
+ self.entryStartTime = getConfigListEntry(_("StartTime"), self.timerentry_starttime)
+ self.list.append(self.entryStartTime)
if self.timerentry_justplay.value != "zap":
- self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime))
+ self.entryEndTime = getConfigListEntry(_("EndTime"), self.timerentry_endtime)
+ self.list.append(self.entryEndTime)
+ else:
+ self.entryEndTime = None
self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service)
self.list.append(self.channelEntry)
@@ -250,7 +264,12 @@ class TimerEntry(Screen, ConfigListScreen):
self.timer.description = self.timerentry_description.value
self.timer.justplay = self.timerentry_justplay.value == "zap"
self.timer.resetRepeated()
- self.timer.afterEvent = {"nothing": AFTEREVENT.NONE, "deepstandby": AFTEREVENT.DEEPSTANDBY, "standby": AFTEREVENT.STANDBY}[self.timerentry_afterevent.value]
+ self.timer.afterEvent = {
+ "nothing": AFTEREVENT.NONE,
+ "deepstandby": AFTEREVENT.DEEPSTANDBY,
+ "standby": AFTEREVENT.STANDBY,
+ "auto": AFTEREVENT.AUTO
+ }[self.timerentry_afterevent.value]
self.timer.service_ref = self.timerentry_service_ref
self.timer.tags = self.timerentry_tags
@@ -309,6 +328,24 @@ class TimerEntry(Screen, ConfigListScreen):
self.saveTimer()
self.close((True, self.timer))
+ def incrementStart(self):
+ self.timerentry_starttime.increment()
+ self["config"].invalidate(self.entryStartTime)
+
+ def decrementStart(self):
+ self.timerentry_starttime.decrement()
+ self["config"].invalidate(self.entryStartTime)
+
+ def incrementEnd(self):
+ if self.entryEndTime is not None:
+ self.timerentry_endtime.increment()
+ self["config"].invalidate(self.entryEndTime)
+
+ def decrementEnd(self):
+ if self.entryEndTime is not None:
+ self.timerentry_endtime.decrement()
+ self["config"].invalidate(self.entryEndTime)
+
def subserviceSelected(self, service):
if not service is None:
self.timer.service_ref = ServiceReference(service[1])
diff --git a/lib/python/Screens/Wizard.py b/lib/python/Screens/Wizard.py
index 23d6253a..feba8ac2 100644..100755
--- a/lib/python/Screens/Wizard.py
+++ b/lib/python/Screens/Wizard.py
@@ -3,7 +3,8 @@ from Screen import Screen
import string
from Screens.HelpMenu import HelpableScreen
-from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_DELETE, KEY_BACKSPACE
+from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS
+
from Components.Label import Label
from Components.Slider import Slider
from Components.ActionMap import NumberActionMap
@@ -215,8 +216,9 @@ class Wizard(Screen):
self.disableKeys = False
- self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions"],
+ self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions"],
{
+ "gotAsciiCode": self.keyGotAscii,
"ok": self.ok,
"back": self.back,
"left": self.left,
@@ -368,6 +370,10 @@ class Wizard(Screen):
def keyNumberGlobal(self, number):
if (self.wizard[self.currStep]["config"]["screen"] != None):
self.configInstance.keyNumberGlobal(number)
+
+ def keyGotAscii(self):
+ if (self.wizard[self.currStep]["config"]["screen"] != None):
+ self["config"].handleKey(KEY_ASCII)
def left(self):
self.resetCounter()