+ 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:]
+
+ self.checkValues()
+
+ self.parent.change()
+
+ def __call__(self, selected): #needed by configlist
+ return ("mtext"[1-selected:], str(self.parent.value), [self.markedPos])
+