Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
[vuplus_dvbapp] / lib / python / Components / config.py
old mode 100644 (file)
new mode 100755 (executable)
index 1476e93..4d57bbb
@@ -34,6 +34,7 @@ class ConfigElement(object):
                self.save_disabled = False
                self.notifiers = []
                self.enabled = True
+               self.callNotifiersOnSaveAndCancel = False
 
        # you need to override this to do input validation
        def setValue(self, value):
@@ -66,9 +67,13 @@ class ConfigElement(object):
                        self.saved_value = None
                else:
                        self.saved_value = self.tostring(self.value)
+               if self.callNotifiersOnSaveAndCancel:
+                       self.changed()
 
        def cancel(self):
                self.load()
+               if self.callNotifiersOnSaveAndCancel:
+                       self.changed()
 
        def isChanged(self):
                sv = self.saved_value
@@ -503,24 +508,26 @@ class ConfigSequence(ConfigElement):
                return [int(x) for x in value.split(self.seperator)]
 
 class ConfigIP(ConfigSequence):
-       def __init__(self, default):
+       def __init__(self, default, auto_jump = False):
                ConfigSequence.__init__(self, seperator = ".", limits = [(0,255),(0,255),(0,255),(0,255)], default = default)
                self.block_len = []
                for x in self.limits:
                        self.block_len.append(len(str(x[1])))
                self.marked_block = 0
                self.overwrite = True
+               self.auto_jump = auto_jump
 
        def handleKey(self, key):
+               
                if key == KEY_LEFT:
                        if self.marked_block > 0:
                                self.marked_block -= 1
-                               self.overwrite = True
+                       self.overwrite = True
 
                if key == KEY_RIGHT:
                        if self.marked_block < len(self.limits)-1:
                                self.marked_block += 1
-                               self.overwrite = True
+                       self.overwrite = True
 
                if key == KEY_HOME:
                        self.marked_block = 0
@@ -530,8 +537,14 @@ class ConfigIP(ConfigSequence):
                        self.marked_block = len(self.limits)-1
                        self.overwrite = True
 
-               if key in KEY_NUMBERS:
-                       number = getKeyNumber(key)
+               if key in KEY_NUMBERS or key == KEY_ASCII:
+                       if key == KEY_ASCII:
+                               code = getPrevAsciiCode()
+                               if code < 48 or code > 57:
+                                       return
+                               number = code - 48
+                       else:   
+                               number = getKeyNumber(key)
                        oldvalue = self._value[self.marked_block]
                        
                        if self.overwrite:
@@ -539,7 +552,13 @@ class ConfigIP(ConfigSequence):
                                self.overwrite = False          
                        else:
                                oldvalue *= 10
-                               self._value[self.marked_block] = oldvalue + number
+                               newvalue = oldvalue + number
+                               if self.auto_jump and newvalue > self.limits[self.marked_block][1] and self.marked_block < len(self.limits)-1:
+                                       self.handleKey(KEY_RIGHT)
+                                       self.handleKey(key)
+                                       return
+                               else:
+                                       self._value[self.marked_block] = newvalue
 
                        if len(str(self._value[self.marked_block])) >= self.block_len[self.marked_block]:
                                self.handleKey(KEY_RIGHT)
@@ -763,12 +782,12 @@ class ConfigText(ConfigElement, NumericalTextInput):
 
        def getValue(self):
                return self.text.encode("utf-8")
-               
+
        def setValue(self, val):
                try:
                        self.text = val.decode("utf-8")
                except UnicodeDecodeError:
-                       self.text = val
+                       self.text = val.decode("utf-8", "ignore")
                        print "Broken UTF8!"
 
        value = property(getValue, setValue)