aboutsummaryrefslogtreecommitdiff
path: root/lib/python
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python')
-rw-r--r--lib/python/Components/ConfigList.py18
-rw-r--r--lib/python/Components/config.py38
-rw-r--r--lib/python/Screens/Setup.py13
3 files changed, 57 insertions, 12 deletions
diff --git a/lib/python/Components/ConfigList.py b/lib/python/Components/ConfigList.py
index 5b959dc2..2de075c6 100644
--- a/lib/python/Components/ConfigList.py
+++ b/lib/python/Components/ConfigList.py
@@ -10,17 +10,18 @@ class ConfigList(HTMLComponent, GUIComponent, object):
self.l = eListboxPythonConfigContent()
self.l.setSeperation(100)
self.timer = eTimer()
- self.timer.timeout.get().append(self.timeout)
self.list = list
self.onSelectionChanged = [ ]
self.current = None
self.help_window = None
self.setHelpWindowSession(session)
- def execEnd(self):
- self.timer = eTimer()
+ def execBegin(self):
self.timer.timeout.get().append(self.timeout)
+ def execEnd(self):
+ self.timer.timeout.get().remove(self.timeout)
+
def setHelpWindowSession(self, session):
assert self.help_window is None, "you can't move a help window to another session"
self.session = session
@@ -91,7 +92,7 @@ class ConfigList(HTMLComponent, GUIComponent, object):
self.handleKey(KEY_TIMEOUT)
class ConfigListScreen:
- def __init__(self, list, session = None):
+ def __init__(self, list, session = None, on_change = None):
self["config_actions"] = NumberActionMap(["SetupActions", "TextInputActions"],
{
"ok": self.keyOK,
@@ -111,18 +112,27 @@ class ConfigListScreen:
}, -1) # to prevent left/right overriding the listbox
self["config"] = ConfigList(list, session = session)
+ if on_change is not None:
+ self.__changed = on_change
+ else:
+ self.__changed = lambda: None
def keyOK(self):
self["config"].handleKey(KEY_OK)
def keyLeft(self):
self["config"].handleKey(KEY_LEFT)
+ self.__changed()
def keyRight(self):
self["config"].handleKey(KEY_RIGHT)
+ self.__changed()
def keyDelete(self):
self["config"].handleKey(KEY_DELETE)
+ self.__changed()
def keyNumberGlobal(self, number):
self["config"].handleKey(KEY_0 + number)
+ self.__changed()
+
diff --git a/lib/python/Components/config.py b/lib/python/Components/config.py
index 0fd6e732..44acacdd 100644
--- a/lib/python/Components/config.py
+++ b/lib/python/Components/config.py
@@ -67,6 +67,11 @@ class ConfigElement(object):
def cancel(self):
self.load()
+ def isChanged(self):
+ if self.saved_value is None and self.value == self.default:
+ return False
+ return self.tostring(self.value) != self.saved_value
+
def changed(self):
for x in self.notifiers:
x(self)
@@ -188,8 +193,11 @@ class ConfigSelection(ConfigElement):
elif key == KEY_RIGHT:
self.value = self.choices[(i + 1) % nchoices]
+ def getText(self):
+ return _(self.description[self.value])
+
def getMulti(self, selected):
- return ("text", self.description[self.value])
+ return ("text", _(self.description[self.value]))
# HTML
def getHTML(self, id):
@@ -220,6 +228,9 @@ class ConfigBoolean(ConfigElement):
if key in [KEY_LEFT, KEY_RIGHT]:
self.value = not self.value
+ def getText(self):
+ return _(self.descriptions[self.value])
+
def getMulti(self, selected):
return ("text", _(self.descriptions[self.value]))
@@ -274,6 +285,10 @@ class ConfigDateTime(ConfigElement):
if key == KEY_RIGHT:
self.value = self.value + self.increment
+
+ def getText(self):
+ return time.strftime(self.formatstring, time.localtime(self.value))
+
def getMulti(self, selected):
return ("text", time.strftime(self.formatstring, time.localtime(self.value)))
@@ -376,8 +391,8 @@ class ConfigSequence(ConfigElement):
self.validate()
self.changed()
-
- def getMulti(self, selected):
+
+ def genText(self):
value = ""
mPos = self.marked_pos
num = 0;
@@ -392,7 +407,14 @@ class ConfigSequence(ConfigElement):
else:
value += (self.censor_char * len(str(self.limits[num][1])))
num += 1
-
+ return (value, mPos)
+
+ def getText(self):
+ (value, mPos) = self.genText()
+ return value
+
+ def getMulti(self, selected):
+ (value, mPos) = self.genText()
# only mark cursor when we are selected
# (this code is heavily ink optimized!)
if self.enabled:
@@ -527,6 +549,9 @@ class ConfigText(ConfigElement, NumericalTextInput):
value = property(getValue, setValue)
_value = property(getValue, setValue)
+ def getText(self):
+ return self.value
+
def getMulti(self, selected):
return ("mtext"[1-selected:], self.value, [self.marked_pos])
@@ -567,6 +592,9 @@ class ConfigSlider(ConfigElement):
self.checkValues()
self.changed()
+ def getText(self):
+ return "%d / %d" % (self.value, self.max)
+
def getMulti(self, selected):
self.checkValues()
return ("slider", self.value, self.max)
@@ -829,7 +857,7 @@ class ConfigFile:
print "unable to load config (%s), assuming defaults..." % str(e)
def save(self):
- config.save()
+# config.save()
config.saveToFile(self.CONFIG_FILE)
def __resolveValue(self, pickles, cmap):
diff --git a/lib/python/Screens/Setup.py b/lib/python/Screens/Setup.py
index 48c85c8e..59f0ff57 100644
--- a/lib/python/Screens/Setup.py
+++ b/lib/python/Screens/Setup.py
@@ -92,7 +92,7 @@ class Setup(ConfigListScreen, Screen):
"save": self.keySave,
}, -2)
- ConfigListScreen.__init__(self, list, session = session)
+ ConfigListScreen.__init__(self, list, session = session, on_change = self.changedEntry)
self.changedEntry()
@@ -105,7 +105,7 @@ class Setup(ConfigListScreen, Screen):
return self["config"].getCurrent()[0]
def getCurrentValue(self):
- return str(self["config"].getCurrent()[1].value)
+ return str(self["config"].getCurrent()[1].getText())
def createSummary(self):
return SetupSummary
@@ -142,7 +142,14 @@ class Setup(ConfigListScreen, Screen):
self.close()
def keyCancel(self):
- self.session.openWithCallback(self.cancelConfirm, MessageBox, _("Really close without saving settings?"))
+ is_changed = False
+ for x in self["config"].list:
+ is_changed |= x[1].isChanged()
+
+ if is_changed:
+ self.session.openWithCallback(self.cancelConfirm, MessageBox, _("Really close without saving settings?"))
+ else:
+ self.close()
def getSetupTitle(id):
xmldata = setupdom.childNodes[0].childNodes