tuikit/widgets/textfield.py
changeset 109 105b1affc3c2
parent 97 0c2e0c09ba5c
child 110 cf3d49cdd6e2
equal deleted inserted replaced
97:0c2e0c09ba5c 109:105b1affc3c2
     5 
     5 
     6 class TextField(Widget):
     6 class TextField(Widget):
     7 
     7 
     8     def __init__(self, value=''):
     8     def __init__(self, value=''):
     9         Widget.__init__(self)
     9         Widget.__init__(self)
       
    10         self.allow_focus = True
    10         self.sizereq.update(10, 1)
    11         self.sizereq.update(10, 1)
    11 
       
    12         self.allow_focus = True
       
    13 
    12 
    14         self.code = locale.getpreferredencoding()
    13         self.code = locale.getpreferredencoding()
    15         if not isinstance(value, str):
    14         if not isinstance(value, str):
    16             value = str(value, self.code)
    15             value = str(value, self.code)
    17 
    16 
    23         self.ofs = 0      # position of value beginning on screen
    22         self.ofs = 0      # position of value beginning on screen
    24 
    23 
    25     def resize(self, w, h):
    24     def resize(self, w, h):
    26         self.tw = self.width - 2
    25         self.tw = self.width - 2
    27 
    26 
    28     def set_theme(self, theme):
       
    29         self.color = theme.normal
       
    30 
       
    31     def draw(self, buffer):
    27     def draw(self, buffer):
    32         with buffer.attr(self.color):
    28         color = self.theme.active if self.has_focus() else self.theme.normal
       
    29         with buffer.attr(color):
    33             # draw value
    30             # draw value
    34             val = self.value + ' ' * self.tw         # add spaces to fill rest of field
    31             val = self.value + ' ' * self.tw         # add spaces to fill rest of field
    35             val = val[self.ofs : self.ofs + self.tw]  # cut value - begin from ofs, limit to tw chars
    32             val = val[self.ofs : self.ofs + self.tw]  # cut value - begin from ofs, limit to tw chars
    36             buffer.puts(val.encode(self.code), 1)
    33             buffer.puts(val.encode(self.code), 1)
    37 
    34 
    47             buffer.putch(c, self.width-1, 0)
    44             buffer.putch(c, self.width-1, 0)
    48 
    45 
    49             self._cursor = (1 + self.curspos - self.ofs, 0)
    46             self._cursor = (1 + self.curspos - self.ofs, 0)
    50 
    47 
    51     def keypress(self, keyname, char, mod=0):
    48     def keypress(self, keyname, char, mod=0):
    52         Widget.keypress(self, keyname, char, mod)
    49         consumed = True
    53         accepted = True
       
    54         if keyname == 'left':
    50         if keyname == 'left':
    55             self.move_left()
    51             self.move_left()
    56         elif keyname == 'right':
    52         elif keyname == 'right':
    57             self.move_right()
    53             self.move_right()
    58         elif keyname == 'backspace':
    54         elif keyname == 'backspace':
    60                 self.move_left()
    56                 self.move_left()
    61                 self.del_char()
    57                 self.del_char()
    62         elif keyname == 'delete':
    58         elif keyname == 'delete':
    63             self.del_char()
    59             self.del_char()
    64         else:
    60         else:
    65             accepted = False
    61             consumed = False
    66 
    62 
    67         if char:
    63         if char:
    68             self.add_char(char)
    64             self.add_char(char)
    69             self.move_right()
    65             self.move_right()
    70             accepted = True
    66             consumed = True
    71 
    67 
    72         #if accepted:
    68         if consumed:
    73             #self.redraw()
    69             #self.redraw()
    74         return accepted
    70             return True
       
    71         Widget.keypress(self, keyname, char, mod)
    75 
    72 
    76     def move_left(self):
    73     def move_left(self):
    77         if self.curspos - self.ofs > 1 or (self.ofs == 0 and self.curspos == 1):
    74         if self.curspos - self.ofs > 1 or (self.ofs == 0 and self.curspos == 1):
    78             # move cursor
    75             # move cursor
    79             self.curspos -= 1
    76             self.curspos -= 1