+ def deleteChar(self, pos):
+ if not self.fixed_size:
+ self.text = self.text[0:pos] + self.text[pos + 1:]
+ elif self.overwrite:
+ self.text = self.text[0:pos] + " " + self.text[pos + 1:]
+ else:
+ self.text = self.text[0:pos] + self.text[pos + 1:] + " "
+
+ def deleteAllChars(self):
+ if self.fixed_size:
+ self.text = " " * len(self.text)
+ else:
+ self.text = ""
+ self.marked_pos = 0
+
+ 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.timeout()
+ if self.allmarked:
+ self.deleteAllChars()
+ self.allmarked = False
+ else:
+ self.deleteChar(self.marked_pos)
+ if self.fixed_size and self.overwrite:
+ self.marked_pos += 1
+ elif key == KEY_BACKSPACE:
+ self.timeout()
+ if self.allmarked:
+ self.deleteAllChars()
+ self.allmarked = False
+ elif self.marked_pos > 0:
+ self.deleteChar(self.marked_pos-1)
+ if not self.fixed_size and self.offset > 0:
+ self.offset -= 1
+ self.marked_pos -= 1
+ elif key == KEY_LEFT:
+ self.timeout()
+ if self.allmarked:
+ self.marked_pos = len(self.text)
+ self.allmarked = False
+ else:
+ self.marked_pos -= 1
+ elif key == KEY_RIGHT:
+ self.timeout()
+ if self.allmarked:
+ self.marked_pos = 0
+ self.allmarked = False
+ else:
+ self.marked_pos += 1
+ elif key == KEY_HOME:
+ self.timeout()
+ self.allmarked = False
+ self.marked_pos = 0
+ elif key == KEY_END:
+ self.timeout()
+ self.allmarked = False
+ self.marked_pos = len(self.text)
+ elif key == KEY_TOGGLEOW:
+ self.timeout()
+ self.overwrite = not self.overwrite
+ elif key == KEY_ASCII:
+ self.timeout()
+ newChar = unichr(getPrevAsciiCode())
+ if self.allmarked:
+ self.deleteAllChars()
+ self.allmarked = False
+ self.insertChar(newChar, self.marked_pos, False)
+ self.marked_pos += 1
+ elif key in KEY_NUMBERS:
+ owr = self.lastKey == getKeyNumber(key)
+ newChar = self.getKey(getKeyNumber(key))
+ if self.allmarked:
+ self.deleteAllChars()
+ self.allmarked = False
+ self.insertChar(newChar, self.marked_pos, owr)
+ elif key == KEY_TIMEOUT:
+ self.timeout()
+ if self.help_window:
+ self.help_window.update(self)
+ return
+
+ if self.help_window:
+ self.help_window.update(self)
+ self.validateMarker()
+ self.changed()
+
+ def nextFunc(self):
+ self.marked_pos += 1
+ 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.text.encode("utf-8")
+
+ def getMulti(self, selected):
+ if self.visible_width:
+ if self.allmarked:
+ mark = range(0, min(self.visible_width, len(self.text)))
+ else:
+ mark = [self.marked_pos-self.offset]
+ return ("mtext"[1-selected:], self.text[self.offset:self.offset+self.visible_width].encode("utf-8")+" ", mark)
+ else:
+ if self.allmarked:
+ mark = range(0, len(self.text))
+ else:
+ mark = [self.marked_pos]
+ return ("mtext"[1-selected:], self.text.encode("utf-8")+" ", mark)
+
+ def onSelect(self, session):
+ self.allmarked = (self.value != "")
+ if session is not None:
+ from Screens.NumericalTextInputHelpDialog import NumericalTextInputHelpDialog
+ self.help_window = session.instantiateDialog(NumericalTextInputHelpDialog, self)
+ self.help_window.show()
+
+ def onDeselect(self, session):
+ self.marked_pos = 0
+ self.offset = 0
+ if self.help_window:
+ session.deleteDialog(self.help_window)
+ self.help_window = None
+
+ def getHTML(self, id):
+ return '<input type="text" name="' + id + '" value="' + self.value + '" /><br>\n'
+
+ def unsafeAssign(self, value):
+ self.value = str(value)
+
+class ConfigNumber(ConfigText):
+ def __init__(self, default = 0):
+ ConfigText.__init__(self, str(default), fixed_size = False)
+
+ def getValue(self):
+ return int(self.text)
+
+ def setValue(self, val):
+ self.text = str(val)
+
+ value = property(getValue, setValue)
+ _value = property(getValue, setValue)
+
+ def conform(self):
+ pos = len(self.text) - self.marked_pos
+ self.text = self.text.lstrip("0")
+ if self.text == "":
+ self.text = "0"
+ if pos > len(self.text):
+ self.marked_pos = 0
+ else:
+ self.marked_pos = len(self.text) - pos
+
+ def handleKey(self, key):
+ if key in KEY_NUMBERS or key == KEY_ASCII:
+ if key == KEY_ASCII:
+ ascii = getPrevAsciiCode()
+ if not (48 <= ascii <= 57):
+ return
+ else:
+ ascii = getKeyNumber(key) + 48
+ newChar = unichr(ascii)
+ if self.allmarked:
+ self.deleteAllChars()
+ self.allmarked = False
+ self.insertChar(newChar, self.marked_pos, False)
+ self.marked_pos += 1
+ else:
+ ConfigText.handleKey(self, key)
+ self.conform()
+
+ def onSelect(self, session):
+ self.allmarked = (self.value != "")
+
+ def onDeselect(self, session):
+ self.marked_pos = 0
+ self.offset = 0
+
+# 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
+
+ def checkValues(self):
+ if self.value < self.min:
+ self.value = self.min
+
+ if self.value > self.max:
+ self.value = self.max
+
+ def handleKey(self, key):
+ if key == KEY_LEFT:
+ self.value -= self.increment
+ elif key == KEY_RIGHT:
+ self.value += self.increment
+ elif key == KEY_HOME:
+ self.value = self.min
+ elif key == KEY_END:
+ self.value = self.max
+ else:
+ return
+
+ self.checkValues()
+ self.changed()
+
+ def getText(self):
+ return "%d / %d" % (self.value, self.max)
+
+ def getMulti(self, selected):
+ self.checkValues()
+ return ("slider", self.value, self.max)
+
+ def fromstring(self, value):
+ return int(value)
+
+# a satlist. in fact, it's a ConfigSelection.
+class ConfigSatlist(ConfigSelection):
+ def __init__(self, list, default = None):
+ if default is not None:
+ default = str(default)
+ ConfigSelection.__init__(self, choices = [(str(orbpos), desc) for (orbpos, desc, flags) in list], default = default)
+
+ def getOrbitalPosition(self):
+ if self.value == "":
+ return None
+ return int(self.value)
+
+ orbital_position = property(getOrbitalPosition)
+
+# nothing.
+class ConfigNothing(ConfigSelection):