revert incorret changes
[enigma2.git] / lib / python / Components / config.py
index 801491cf6b9a4b3bd36ff5799f84170be1823d4d..2dc19bfdbb7dbfa6a05af24434bb792aa437462a 100644 (file)
@@ -1,5 +1,5 @@
 from time import *
-from Tools.NumericalTextInput import *
+from Tools.NumericalTextInput import NumericalTextInput
 from Tools.Directories import *
 
 class configFile:
@@ -27,13 +27,28 @@ class configFile:
                x = line.find("=")
                if x > -1:
                        self.configElements[line[:x]] = line[x + 1:-1]
-       
+
        def getKey(self, key):
                return self.configElements[key]
 
-       def setKey(self, key, value):
+       def setKey(self, key, value, isDefaultKey=False):
                self.changed = 1
-               self.configElements[key] = value
+               if isDefaultKey and self.configElements.has_key(key):
+                       del self.configElements[key]
+               else:
+                       self.configElements[key] = value
+
+       def getResolvedKey(self, key):
+               str = self.configElements[key]
+               if len(str):
+                       pos = str.find('*')
+                       if pos != -1:
+                               str = str[pos+1:]
+                               pos = str.find('*')
+                               if pos != -1:
+                                       return str[:pos]
+                       return str
+               return None
 
        def save(self):
                if self.changed == 0:           #no changes, so no write to disk needed
@@ -89,10 +104,17 @@ class configSelection:
 
        def __call__(self, selected):                   #needed by configlist
                self.checkValues()
-               if isinstance(self.parent.vals[self.parent.value], str):
-                       returnValue = _(self.parent.vals[self.parent.value])
-               else:
-                       returnValue = _(self.parent.vals[self.parent.value][1])
+
+               returnValue = _(self.parent.vals[self.parent.value])
+               if not isinstance(returnValue, str):
+                       returnValue = returnValue[1]
+
+               # FIXME: it's not really nice to translate this here.
+               # however, configSelections are persistent.
+               
+               # WORKAROUND: don't translate ""
+               if returnValue:
+                       returnValue = _(returnValue)
                
                return ("text", returnValue)
                
@@ -166,6 +188,8 @@ class configSequenceArg:
                if (type == "IP"):
                        return (("."), [(0,255),(0,255),(0,255),(0,255)], "")
                # configsequencearg.get ("MAC")
+               if (type == "POSITION"):
+                       return ((","), [(0,args[0]),(0,args[1]),(0,args[2]),(0,args[3])], "")
                if (type == "MAC"):
                        return ((":"), [(1,255),(1,255),(1,255),(1,255),(1,255),(1,255)], "")
                # configsequencearg.get ("CLOCK")
@@ -290,31 +314,55 @@ class configSequence:
                        return ("mtext"[1-selected:], value, [mPos])
                else:
                        return ("text", value)
+
+class configNothing:
+       def __init__(self, parent):
+               self.parent = parent
+               self.markedPos = 0
+
+       def cancel(self):
+               self.parent.reload()
+
+       def save(self):
+               self.parent.save()
                
-class configText:
+       def nextEntry(self):
+               self.parent.vals[1](self.parent.getConfigPath())
+
+       def handleKey(self, key):
+               pass
+
+       def __call__(self, selected):                   #needed by configlist
+               return ("text", "")
+
+class configText(NumericalTextInput):
        # used as first parameter
        # is the text of a fixed size or is the user able to extend the length of the text
        extendableSize = 1
        fixedSize = 2
 
        def __init__(self, parent):
+               NumericalTextInput.__init__(self, self.nextEntry)
                self.parent = parent
                self.markedPos = 0
                self.mode = self.parent.vals[0]
-               self.textInput = NumericalTextInput(self.nextEntry)
+               try:
+                       self.Text = self.parent.value.decode("utf-8")
+               except UnicodeDecodeError:
+                       print "utf8 kaputt!"
 
        def checkValues(self):
                if (self.markedPos < 0):
                        self.markedPos = 0
-               if (self.markedPos >= len(self.parent.value)):
-                       self.markedPos = len(self.parent.value) - 1
-                       
+               if (self.markedPos >= len(self.Text)):
+                       self.markedPos = len(self.Text) - 1
+
        def cancel(self):
                self.parent.reload()
 
        def save(self):
                self.parent.save()
-               
+
        def nextEntry(self):
                self.parent.vals[1](self.parent.getConfigPath())
 
@@ -322,31 +370,28 @@ class configText:
                #this will no change anything on the value itself
                #so we can handle it here in gui element
                if key == config.key["delete"]:
-                       self.parent.value = self.parent.value[0:self.markedPos] + self.parent.value[self.markedPos + 1:]
-               if key == config.key["prevElement"]:
-                       self.textInput.nextKey()
+                       self.Text = self.Text[0:self.markedPos] + self.Text[self.markedPos + 1:]
+                       self.parent.value = self.Text.encode("utf-8")
+               elif key == config.key["prevElement"]:
+                       self.nextKey()
                        self.markedPos -= 1
-
-               if key == config.key["nextElement"]:
-                       self.textInput.nextKey()
+               elif key == config.key["nextElement"]:
+                       self.nextKey()
                        self.markedPos += 1
                        if (self.mode == self.extendableSize):
-                               if (self.markedPos >= len(self.parent.value)):
-                                       self.parent.value = self.parent.value.ljust(len(self.parent.value) + 1)
-                       
-                               
-               if key >= config.key["0"] and key <= config.key["9"]:
+                               if (self.markedPos >= len(self.Text)):
+                                       self.Text = self.Text.ljust(len(self.Text) + 1)
+                                       self.parent.value = self.Text.encode("utf-8")
+               elif key >= config.key["0"] and key <= config.key["9"]:
                        number = 9 - config.key["9"] + key
-
-                       self.parent.value = self.parent.value[0:self.markedPos] + str(self.textInput.getKey(number)) + self.parent.value[self.markedPos + 1:]
-               
-               self.checkValues()                      
-               
-               self.parent.change()    
+                       self.Text = self.Text[0:self.markedPos] + self.getKey(number) + self.Text[self.markedPos + 1:]
+                       self.parent.value = self.Text.encode("utf-8")
+               self.checkValues()
+               self.parent.change()
 
        def __call__(self, selected):                   #needed by configlist
-               return ("mtext"[1-selected:], str(self.parent.value), [self.markedPos])
-               
+               return ("mtext"[1-selected:], self.parent.value, [self.markedPos])
+
 class configValue:
        def __init__(self, obj):
                self.obj = obj
@@ -375,7 +420,7 @@ config = Config();
 
 configfile = configFile()
 
-class ConfigSlider:
+class configSlider:
        def __init__(self, parent):
                self.parent = parent
 
@@ -389,21 +434,21 @@ class ConfigSlider:
                if self.parent.value < 0:
                        self.parent.value = 0   
 
-               if self.parent.value > 10:
-                       self.parent.value = 10  
+               if self.parent.value > self.parent.vals[1]:
+                       self.parent.value = self.parent.vals[1]
 
        def handleKey(self, key):
                if key == config.key["prevElement"]:
-                       self.parent.value = self.parent.value - 1
+                       self.parent.value = self.parent.value - self.parent.vals[0]
                if key == config.key["nextElement"]:
-                       self.parent.value = self.parent.value + 1
+                       self.parent.value = self.parent.value + self.parent.vals[0]
                                        
                self.checkValues()      
                self.parent.change()    
 
        def __call__(self, selected):                   #needed by configlist
                self.checkValues()
-               return ("slider", self.parent.value * 10)
+               return ("slider", self.parent.value, self.parent.vals[1])
 
 class ConfigSubsection:
        def __init__(self):
@@ -425,7 +470,7 @@ class configElement:
                return 0        #prevent bigger then array
 
        def datafromFile(self, control, data):
-               if control == ConfigSlider:
+               if control == configSlider:
                        return int(data)
                elif control == configSelection:
                        try:
@@ -455,7 +500,7 @@ class configElement:
                        return ""       
 
        def datatoFile(self, control, data):
-               if control == ConfigSlider:
+               if control == configSlider:
                        return str(data)
                elif control == configSelection:
                        if len(self.vals) < data + 1:
@@ -478,8 +523,8 @@ class configElement:
                elif control == configText:
                        return str(data.strip())
                elif control == configSequence:
-                       print self.vals
-                       print self.value
+#                      print self.vals
+#                      print self.value
                        try:
                                value = ""
                                count = 0
@@ -550,8 +595,15 @@ class configElement:
                        defaultValue = self.getIndexbyEntry(self.defaultValue)
                else:
                        defaultValue = self.defaultValue
-               if (defaultValue != self.value) or (self.saveDefaults == True):
-                       configfile.setKey(self.configPath, self.datatoFile(self.controlType,self.value))
+               if self.value != defaultValue or self.saveDefaults:
+                       configfile.setKey(self.configPath, self.datatoFile(self.controlType, self.value))
+               else:
+                       try:
+                               oldValue = configfile.getKey(self.configPath)
+                       except:
+                               oldValue = None
+                       if oldValue is not None and oldValue != defaultValue:
+                               configfile.setKey(self.configPath, self.datatoFile(self.controlType, self.value), True)
 
 class configElement_nonSave(configElement):
        def __init__(self, configPath, control, defaultValue, vals):
@@ -565,7 +617,7 @@ def getConfigListEntry(description, element):
        item = b.controlType(b)
        return ((description, item))
 
-def configElementBoolean(name, default, texts=(_("Enable"), _("Disable"))):
+def configElementBoolean(name, default, texts=(_("Disable"), _("Enable"))):
        return configElement(name, configSelection, default, texts)
 
 config.misc = ConfigSubsection()