+ def getText(self):
+ (value, mPos) = self.genText()
+ return value
+
+ def getMulti(self, selected):
+ (value, mPos) = self.genText()
+ # only mark cursor when we are selected
+ # (this code is heavily ink optimized!)
+ if self.enabled:
+ return ("mtext"[1-selected:], value, [mPos])
+ else:
+ return ("text", value)
+
+ def tostring(self, val):
+ return self.seperator.join([self.saveSingle(x) for x in val])
+
+ def saveSingle(self, v):
+ return str(v)
+
+ def fromstring(self, value):
+ return [int(x) for x in value.split(self.seperator)]
+
+class ConfigIP(ConfigSequence):
+ def __init__(self, default):
+ ConfigSequence.__init__(self, seperator = ".", limits = [(0,255),(0,255),(0,255),(0,255)], default = default)
+
+ def getHTML(self, id):
+ # we definitely don't want leading zeros
+ return '.'.join(["%d" % d for d in self.value])
+
+class ConfigMAC(ConfigSequence):
+ def __init__(self, default):
+ ConfigSequence.__init__(self, seperator = ":", limits = [(1,255),(1,255),(1,255),(1,255),(1,255),(1,255)], default = default)
+
+class ConfigPosition(ConfigSequence):
+ def __init__(self, default, args):
+ ConfigSequence.__init__(self, seperator = ",", limits = [(0,args[0]),(0,args[1]),(0,args[2]),(0,args[3])], default = default)
+
+class ConfigClock(ConfigSequence):
+ def __init__(self, default):
+ import time
+ t = time.localtime(default)
+ ConfigSequence.__init__(self, seperator = ":", limits = [(0,23),(0,59)], default = [t.tm_hour, t.tm_min])
+
+class ConfigInteger(ConfigSequence):
+ def __init__(self, default, limits = (0, 10000000000)):
+ ConfigSequence.__init__(self, seperator = ":", limits = [limits], default = default)
+
+ # you need to override this to do input validation
+ def setValue(self, value):
+ self._value = [value]
+ self.changed()
+
+ def getValue(self):
+ return self._value[0]
+
+ value = property(getValue, setValue)
+
+ def fromstring(self, value):
+ return int(value)
+
+ def tostring(self, value):
+ return str(value)
+
+class ConfigPIN(ConfigInteger):
+ def __init__(self, default, len = 4, censor = ""):
+ assert isinstance(default, int), "ConfigPIN default must be an integer"
+ if default == -1:
+ default = "aaaa"
+ ConfigSequence.__init__(self, seperator = ":", limits = [(0, (10**len)-1)], censor_char = censor, default = default)
+ self.len = len
+
+ def getLength(self):
+ return self.len
+
+class ConfigFloat(ConfigSequence):
+ def __init__(self, default, limits):
+ ConfigSequence.__init__(self, seperator = ".", limits = limits, default = default)
+
+ def getFloat(self):
+ return float(self.value[1] / float(self.limits[1][1] + 1) + self.value[0])
+
+ float = property(getFloat)
+
+# an editable text...
+class ConfigText(ConfigElement, NumericalTextInput):
+ def __init__(self, default = "", fixed_size = True):
+ ConfigElement.__init__(self)
+ NumericalTextInput.__init__(self, nextFunc = self.nextFunc, handleTimeout = False)
+
+ self.marked_pos = 0
+ self.fixed_size = fixed_size
+
+ self.value = self.default = default
+
+ def validateMarker(self):
+ if self.marked_pos >= len(self.text):
+ self.marked_pos = len(self.text) - 1
+ if self.marked_pos < 0:
+ self.marked_pos = 0
+
+ #def nextEntry(self):
+ # self.vals[1](self.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 == KEY_DELETE:
+ self.text = self.text[0:self.marked_pos] + self.text[self.marked_pos + 1:]
+ elif key == KEY_LEFT:
+ self.marked_pos -= 1
+ elif key == KEY_RIGHT:
+ self.marked_pos += 1
+ self.maybeExpand()
+ elif key in KEY_NUMBERS:
+ number = self.getKey(getKeyNumber(key))
+ self.text = self.text[0:self.marked_pos] + unicode(number) + self.text[self.marked_pos + 1:]
+ elif key == KEY_TIMEOUT:
+ self.timeout()
+ return
+
+ self.validateMarker()
+ self.changed()
+
+ def maybeExpand(self):
+ if not self.fixed_size:
+ if self.marked_pos >= len(self.text):
+ self.text = self.text.ljust(len(self.text) + 1)
+
+ def nextFunc(self):
+ self.marked_pos += 1
+ self.maybeExpand()
+ self.validateMarker()
+ self.changed()
+
+ def getValue(self):
+ return self.text.encode("utf-8")
+
+ def setValue(self, val):
+ try:
+ self.text = val.decode("utf-8")
+ except UnicodeDecodeError:
+ self.text = val
+ print "Broken UTF8!"
+
+ value = property(getValue, setValue)
+ _value = property(getValue, setValue)
+
+ def getText(self):
+ return self.value
+
+ def getMulti(self, selected):
+ return ("mtext"[1-selected:], self.value, [self.marked_pos])
+
+ def helpWindow(self):
+ from Screens.NumericalTextInputHelpDialog import NumericalTextInputHelpDialog
+ return (NumericalTextInputHelpDialog,self)
+
+ def getHTML(self, id):
+ return '<input type="text" name="' + id + '" value="' + self.value + '" /><br>\n'
+
+ def unsafeAssign(self, value):
+ self.value = str(value)
+
+# a slider.
+class ConfigSlider(ConfigElement):
+ def __init__(self, default = 0, increment = 1, limits = (0, 100)):
+ ConfigElement.__init__(self)
+ self.value = self.default = default
+ self.min = limits[0]
+ self.max = limits[1]
+ self.increment = increment
+