Merge branch 'bug_258_sorting_of_configsatlist'
[enigma2.git] / lib / python / Components / config.py
index c810e14beb7de3dfa49bd2a29db4ef3ff3ede541..d15c232ba1c259cbcac07c97289117bd4bfbfe1c 100755 (executable)
@@ -287,6 +287,7 @@ class ConfigSelection(ConfigElement):
 
                if default is None:
                        default = self.choices.default()
+               self.default = default
 
                if self.value not in self.choices:
                        self.value = default
@@ -912,13 +913,14 @@ class ConfigText(ConfigElement, NumericalTextInput):
                        self.timeout()
                        self.overwrite = not self.overwrite
                elif key == KEY_ASCII:
-                       self.timeout()
-                       newChar = unichr(getPrevAsciiCode())
-                       if self.allmarked:
-                               self.deleteAllChars()
-                               self.allmarked = False
-                       self.insertChar(newChar, self.marked_pos, False)
-                       self.marked_pos += 1
+                       self.timeout()
+                       newChar = unichr(getPrevAsciiCode())
+                       if not self.useableChars or newChar in self.useableChars:
+                               if self.allmarked:
+                                       self.deleteAllChars()
+                                       self.allmarked = False
+                               self.insertChar(newChar, self.marked_pos, False)
+                               self.marked_pos += 1
                elif key in KEY_NUMBERS:
                        owr = self.lastKey == getKeyNumber(key)
                        newChar = self.getKey(getKeyNumber(key))
@@ -1015,6 +1017,42 @@ class ConfigPassword(ConfigText):
                ConfigText.onDeselect(self, session)
                self.hidden = True
 
+# lets the user select between [min, min+stepwidth, min+(stepwidth*2)..., maxval] with maxval <= max depending
+# on the stepwidth
+# min, max, stepwidth, default are int values
+# wraparound: pressing RIGHT key at max value brings you to min value and vice versa if set to True
+class ConfigSelectionNumber(ConfigSelection):
+       def __init__(self, min, max, stepwidth, default = None, wraparound = False):
+               self.wraparound = wraparound
+               if default is None:
+                       default = min
+               default = str(default)
+               choices = []
+               step = min
+               while step <= max:
+                       choices.append(str(step))
+                       step += stepwidth
+               
+               ConfigSelection.__init__(self, choices, default)
+               
+       def getValue(self):
+               return int(self.text)
+
+       def setValue(self, val):
+               self.text = str(val)
+               
+       def handleKey(self, key):
+               if not self.wraparound:
+                       if key == KEY_RIGHT:
+                               if len(self.choices) == (self.choices.index(self.value) + 1):
+                                       return
+                       if key == KEY_LEFT:
+                               if self.choices.index(self.value) == 0:
+                                       return
+               ConfigSelection.handleKey(self, key)
+                               
+                               
+
 class ConfigNumber(ConfigText):
        def __init__(self, default = 0):
                ConfigText.__init__(self, str(default), fixed_size = False)
@@ -1146,12 +1184,24 @@ class ConfigSatlist(ConfigSelection):
        def __init__(self, list, default = None):
                if default is not None:
                        default = str(default)
-               ConfigSelection.__init__(self, choices = [(str(orbpos), desc) for (orbpos, desc, flags) in list], default = default)
+               self._satList = list
+               choices = [(str(orbpos), desc) for (orbpos, desc, flags) in list]
+               
+               ConfigSelection.__init__(self, choices = choices, default = default)
 
+       # use this function to get the orbital position, don't rely on .index
        def getOrbitalPosition(self):
                if self.value == "":
                        return None
                return int(self.value)
+       
+       def getSatList(self):
+               return self._satList
+       
+       def getSat(self):
+               return self.satList[self.index]
+       
+       satList = property(getSatList)
 
        orbital_position = property(getOrbitalPosition)
 
@@ -1492,7 +1542,7 @@ class ConfigSubDict(dict, object):
                self.stored_values = dict(values)
                for (key, val) in self.items():
                        if str(key) in self.stored_values:
-                               val = self.stored_values[str(key)]
+                               val.saved_value = self.stored_values[str(key)]
 
        saved_value = property(getSavedValue, setSavedValue)