+ 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
+
+ if key == KEY_RIGHT:
+ if self.marked_block < len(self.limits)-1:
+ self.marked_block += 1
+ self.overwrite = True
+
+ if key == KEY_HOME:
+ self.marked_block = 0
+ self.overwrite = True
+
+ if key == KEY_END:
+ self.marked_block = len(self.limits)-1
+ self.overwrite = True
+
+ if key in KEY_NUMBERS:
+ number = getKeyNumber(key)
+ oldvalue = self._value[self.marked_block]
+
+ if self.overwrite:
+ self._value[self.marked_block] = number
+ self.overwrite = False
+ else:
+ oldvalue *= 10
+ 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)
+
+ self.validate()
+ self.changed()
+
+ def genText(self):
+ value = ""
+ block_strlen = []
+ for i in self._value:
+ block_strlen.append(len(str(i)))
+ if len(value):
+ value += self.seperator
+ value += str(i)
+ leftPos = sum(block_strlen[:(self.marked_block)])+self.marked_block
+ rightPos = sum(block_strlen[:(self.marked_block+1)])+self.marked_block
+ mBlock = range(leftPos, rightPos)
+ return (value, mBlock)