+ def __call__(self, selected): #needed by configlist
+ self.checkValues()
+ #fixme
+ return ("text", str(self.parent.vals[self.parent.value][0]))
+
+class configSequenceArg:
+ def get(self, type, args = ()):
+ # configsequencearg.get ("IP")
+ 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")
+ if (type == "CLOCK"):
+ return ((":"), [(0,23),(0,59)], "")
+ # configsequencearg.get("INTEGER", (min, max)) => x with min <= x <= max
+ if (type == "INTEGER"):
+ return ((":"), [args], "")
+ # configsequencearg.get("PINCODE", (number, "*")) => pin with number = length of pincode and "*" as numbers shown as stars
+ # configsequencearg.get("PINCODE", (number, "")) => pin with number = length of pincode and numbers shown
+ if (type == "PINCODE"):
+ return ((":"), [(0, (10**args[0])-1)], args[1])
+ # configsequencearg.get("FLOAT", [(min,max),(min1,max1)]) => x.y with min <= x <= max and min1 <= y <= max1
+ if (type == "FLOAT"):
+ return (("."), args, "")
+
+ def getFloat(self, element):
+ return float(("%d.%0" + str(len(str(element.vals[1][1][1]))) + "d") % (element.value[0], element.value[1]))
+
+configsequencearg = configSequenceArg()
+
+class configSequence:
+ def __init__(self, parent):
+ self.parent = parent
+ self.markedPos = 0
+ self.seperator = self.parent.vals[0]
+ self.valueBounds = self.parent.vals[1]
+ self.censorChar = self.parent.vals[2]
+
+ def checkValues(self):
+ maxPos = 0
+ num = 0
+ for i in self.parent.value:
+ maxPos += len(str(self.valueBounds[num][1]))
+ while (self.valueBounds[num][0] > self.parent.value[num]):
+ self.parent.value[num] += 1
+
+ while (self.valueBounds[num][1] < self.parent.value[num]):
+ self.parent.value[num] -= 1
+
+# if (self.valueBounds[num][0] <= i <= self.valueBounds[num][1]):
+ #pass
+ #else:
+ #self.parent.value[num] = self.valueBounds[num][0]
+ num += 1
+
+ if self.markedPos >= maxPos:
+ self.markedPos = maxPos - 1
+ if self.markedPos < 0:
+ self.markedPos = 0
+
+ def cancel(self):
+ self.parent.reload()
+
+ def save(self):
+ self.parent.save()
+
+ 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["prevElement"]:
+ self.markedPos -= 1
+ if key == config.key["nextElement"]:
+ 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[blocknumber][1]))
+ # position in the block
+ posinblock = self.markedPos - self.blockLenTotal[blocknumber]
+
+ oldvalue = self.parent.value[blocknumber]
+ olddec = oldvalue % 10 ** (numberLen - posinblock) - (oldvalue % 10 ** (numberLen - posinblock - 1))
+ newvalue = oldvalue - olddec + (10 ** (numberLen - posinblock - 1) * number)
+
+ self.parent.value[blocknumber] = newvalue
+ self.markedPos += 1
+
+ self.checkValues()
+
+ #FIXME: dont call when press left/right
+ self.parent.change()
+
+ def __call__(self, selected): #needed by configlist
+ value = ""
+ mPos = self.markedPos
+ num = 0;
+ for i in self.parent.value:
+ if len(value): #fixme no heading separator possible
+ value += self.seperator
+ if mPos >= len(value) - 1:
+ mPos += 1
+
+ #diff = self.valueBounds - len(str(i))
+ #if diff > 0:
+ ## if this helps?!
+ #value += " " * diff
+ if (self.censorChar == ""):
+ value += ("%0" + str(len(str(self.valueBounds[num][1]))) + "d") % i
+ else:
+ value += (self.censorChar * len(str(self.valueBounds[num][1])))
+ num += 1
+ # only mark cursor when we are selected
+ # (this code is heavily ink optimized!)
+ if (self.parent.enabled == True):
+ 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()
+
+ 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:
+ # 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):
+ self.parent = parent
+ self.markedPos = 0
+ self.mode = self.parent.vals[0]
+ self.textInput = NumericalTextInput(self.nextEntry)
+
+ def checkValues(self):
+ if (self.markedPos < 0):
+ self.markedPos = 0
+ if (self.markedPos >= len(self.parent.value)):
+ self.markedPos = len(self.parent.value) - 1
+
+ def cancel(self):
+ self.parent.reload()
+
+ def save(self):
+ self.parent.save()
+
+ def nextEntry(self):
+ self.parent.vals[1](self.parent.getConfigPath())
+
+ 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
+
+ if key == config.key["nextElement"]:
+ self.textInput.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"]:
+ 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:]
+