fix ip address
[enigma2.git] / lib / python / Components / config.py
index c433f01bb47b619240f9c5ce767457fa0861fbd0..a2dfb8db12871a2aa8d575e985da5d3533c2fab8 100644 (file)
@@ -1,12 +1,13 @@
 from time import *
 from Tools.NumericalTextInput import *
+from Tools.Directories import *
 
 class configFile:
        def __init__(self):
                self.changed = 0
                self.configElements = { }
                try:
-                       self.file = open("config")
+                       self.file = open(resolveFilename(SCOPE_CONFIG, "config"))
                except IOError:
                        print "cannot open config file"
                        return 
@@ -25,7 +26,7 @@ class configFile:
        def addElement(self, line):
                x = line.find("=")
                if x > -1:
-                       self.configElements[line[:x]] = line[x + 1:]
+                       self.configElements[line[:x]] = line[x + 1:-1]
        
        def getKey(self, key):
                return self.configElements[key]
@@ -38,15 +39,12 @@ class configFile:
                if self.changed == 0:           #no changes, so no write to disk needed
                        return
                        
-               fileHandle = open("config", "w")
+               fileHandle = open(resolveFilename(SCOPE_CONFIG, "config"), "w")
                
                keys = self.configElements.keys()
                keys.sort()
                for x in keys:
-                       wstr = x + "=" + self.configElements[x]
-                       
-                       if wstr[len(wstr) - 1] != '\n':
-                               wstr = wstr + "\n"
+                       wstr = x + "=" + self.configElements[x] + "\n"
 
                        fileHandle.write(wstr)
 
@@ -58,10 +56,9 @@ class configSelection:
                
        def checkValues(self):
                if self.parent.value < 0:
-                       self.parent.value = 0   
-
-               if(self.parent.value >= (len(self.parent.vals) - 1)):
-                       self.parent.value = len(self.parent.vals) - 1
+                       self.parent.value = len(self.parent.vals) - 1   
+               elif(self.parent.value > (len(self.parent.vals) - 1)):
+                       self.parent.value = 0
 
        def cancel(self):
                self.parent.reload()
@@ -81,7 +78,7 @@ class configSelection:
 
        def __call__(self, selected):                   #needed by configlist
                self.checkValues()
-               return ("text", self.parent.vals[self.parent.value])
+               return ("text", _(self.parent.vals[self.parent.value]))
 
 class configDateTime:
        def __init__(self, parent):
@@ -216,13 +213,26 @@ class configSequence:
                        self.markedPos += 1
                
                if key >= config.key["0"] and key <= config.key["9"]:
+                       self.blockLen = []
+                       for x in self.valueBounds:
+                               self.blockLen.append(len(str(x[1])))
+                               
+                       pos = 0
+                       blocknumber = 0
+                       self.blockLenTotal = [0,]
+                       for x in self.blockLen:
+                               pos += self.blockLen[blocknumber]
+                               self.blockLenTotal.append(pos)
+                               if (pos - 1 >= self.markedPos):
+                                       pass
+                               else:
+                                       blocknumber += 1
+                                       
                        number = 9 - config.key["9"] + key
                        # length of numberblock
-                       numberLen = len(str(self.valueBounds[0][1]))
+                       numberLen = len(str(self.valueBounds[blocknumber][1]))
                        # position in the block
-                       posinblock = self.markedPos % numberLen
-                       # blocknumber
-                       blocknumber = self.markedPos / numberLen
+                       posinblock = self.markedPos - self.blockLenTotal[blocknumber]
                        
                        oldvalue = self.parent.value[blocknumber]
                        olddec = oldvalue % 10 ** (numberLen - posinblock) - (oldvalue % 10 ** (numberLen - posinblock - 1))
@@ -264,8 +274,11 @@ class configSequence:
                        num += 1
                        # only mark cursor when we are selected
                        # (this code is heavily ink optimized!)
-               return ("mtext"[1-selected:], value, [mPos])
-
+               if (self.parent.enabled == True):
+                       return ("mtext"[1-selected:], value, [mPos])
+               else:
+                       return ("text", value)
+               
 class configText:
        # used as first parameter
        # is the text of a fixed size or is the user able to extend the length of the text
@@ -297,6 +310,8 @@ class configText:
        def handleKey(self, key):
                #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.markedPos -= 1
@@ -333,6 +348,7 @@ class Config:
                self.key = { "choseElement": 0,
                                         "prevElement": 1,
                                         "nextElement": 2,
+                                        "delete": 3,
                                         "0": 10,
                                         "1": 11,
                                         "2": 12,
@@ -345,6 +361,7 @@ class Config:
                                         "9": 19 }
                
 config = Config();
+
 configfile = configFile()
 
 class ConfigSlider:
@@ -427,7 +444,11 @@ class configElement:
                        return str(data.strip())
 
                elif control == configSequence:
-                       value = ((len(data) * ("%d" + self.vals[0]))[0:-1]) % tuple(data)
+                       print data
+                       try:
+                               value = ((len(data) * ("%d" + self.vals[0]))[0:-1]) % tuple(data)
+                       except: 
+                               value = str(data)       
 #                      just in case you don't understand the above, here an equivalent:
 #                      value = ""
 #                      for i in data:
@@ -441,6 +462,7 @@ class configElement:
                        return ""       
 
        def loadData(self):
+               #print "load:" + self.configPath
                try:
                        value = self.datafromFile(self.controlType, configfile.getKey(self.configPath))
                except:         
@@ -456,6 +478,7 @@ class configElement:
 
                        self.save()             #add missing value to dict
                else:
+                       #print "set val:" + str(value)
                        self.value = value
                        
                #is this right? activate settings after load/cancel and use default     
@@ -495,3 +518,9 @@ def getConfigListEntry(description, element):
        b = element
        item = b.controlType(b)
        return ((description, item))
+
+
+def configElementBoolean(name, default, texts=(_("Enable"), _("Disable"))):
+       return configElement(name, configSelection, default, texts)
+
+config.misc = ConfigSubsection()