self.save_disabled = False
self.notifiers = []
self.enabled = True
+ self.callNotifiersOnSaveAndCancel = False
# you need to override this to do input validation
def setValue(self, value):
self.saved_value = None
else:
self.saved_value = self.tostring(self.value)
+ if self.callNotifiersOnSaveAndCancel:
+ self.changed()
def cancel(self):
self.load()
+ if self.callNotifiersOnSaveAndCancel:
+ self.changed()
def isChanged(self):
sv = self.saved_value
return [int(x) for x in value.split(self.seperator)]
class ConfigIP(ConfigSequence):
- def __init__(self, default):
+ def __init__(self, default, auto_jump = False):
ConfigSequence.__init__(self, seperator = ".", limits = [(0,255),(0,255),(0,255),(0,255)], default = default)
self.block_len = []
for x in self.limits:
self.block_len.append(len(str(x[1])))
self.marked_block = 0
self.overwrite = True
+ self.auto_jump = auto_jump
def handleKey(self, key):
+
if key == KEY_LEFT:
if self.marked_block > 0:
self.marked_block -= 1
- self.overwrite = True
+ self.overwrite = True
if key == KEY_RIGHT:
if self.marked_block < len(self.limits)-1:
self.marked_block += 1
- self.overwrite = True
+ self.overwrite = True
if key == KEY_HOME:
self.marked_block = 0
self.marked_block = len(self.limits)-1
self.overwrite = True
- if key in KEY_NUMBERS:
- number = getKeyNumber(key)
+ if key in KEY_NUMBERS or key == KEY_ASCII:
+ if key == KEY_ASCII:
+ code = getPrevAsciiCode()
+ if code < 48 or code > 57:
+ return
+ number = code - 48
+ else:
+ number = getKeyNumber(key)
oldvalue = self._value[self.marked_block]
if self.overwrite:
self.overwrite = False
else:
oldvalue *= 10
- self._value[self.marked_block] = oldvalue + number
+ newvalue = oldvalue + number
+ if self.auto_jump and newvalue > self.limits[self.marked_block][1] and self.marked_block < len(self.limits)-1:
+ self.handleKey(KEY_RIGHT)
+ self.handleKey(key)
+ return
+ else:
+ self._value[self.marked_block] = newvalue
if len(str(self._value[self.marked_block])) >= self.block_len[self.marked_block]:
self.handleKey(KEY_RIGHT)
t = time.localtime(default)
ConfigSequence.__init__(self, seperator = ":", limits = [(0,23),(0,59)], default = [t.tm_hour, t.tm_min])
+ def increment(self):
+ # Check if Minutes maxed out
+ if self._value[1] == 59:
+ # Check if Hours not maxed out
+ if self._value[0] < 23:
+ # Increment Hour, reset Minutes to 0
+ self._value[0] += 1
+ self._value[1] = 0
+ else:
+ # Increment Minutes
+ self._value[1] += 1
+ # Trigger change
+ self.changed()
+
+ def decrement(self):
+ # Check if Minutes is minimum
+ if self._value[1] == 0:
+ # Check if Hour is greater than 0
+ if self._value[0] > 0:
+ # Decrement Hour, set Minutes to 59
+ self._value[0] -= 1
+ self._value[1] = 59
+ else:
+ # Decrement Minutes
+ self._value[1] -= 1
+ # Trigger change
+ self.changed()
+
class ConfigInteger(ConfigSequence):
def __init__(self, default, limits = (0, 9999999999)):
ConfigSequence.__init__(self, seperator = ":", limits = [limits], default = default)
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
+ self.text = val.decode("utf-8", "ignore")
print "Broken UTF8!"
value = property(getValue, setValue)
self.marked_pos = 0
self.offset = 0
+class ConfigSearchText(ConfigText):
+ def __init__(self, default = "", fixed_size = False, visible_width = False):
+ ConfigText.__init__(self, default = default, fixed_size = fixed_size, visible_width = visible_width)
+ NumericalTextInput.__init__(self, nextFunc = self.nextFunc, handleTimeout = False, search = True)
+
+class ConfigDirectory(ConfigText):
+ def __init__(self, default="", visible_width=60):
+ ConfigText.__init__(self, default, fixed_size = True, visible_width = visible_width)
+ def handleKey(self, key):
+ pass
+ def getValue(self):
+ if self.text == "":
+ return None
+ else:
+ return ConfigText.getValue(self)
+ def setValue(self, val):
+ if val == None:
+ val = ""
+ ConfigText.setValue(self, val)
+ def getMulti(self, selected):
+ if self.text == "":
+ return ("mtext"[1-selected:], _("List of Storage Devices"), range(0))
+ else:
+ return ConfigText.getMulti(self, selected)
+
# a slider.
class ConfigSlider(ConfigElement):
def __init__(self, default = 0, increment = 1, limits = (0, 100)):