tuikit/editbox.py
author Radek Brich <radek.brich@devl.cz>
Wed, 02 Jan 2013 00:16:12 +0100
changeset 43 369c8ef5070a
parent 41 37b7dfc3eae6
child 45 43b2279b06e1
permissions -rw-r--r--
Rename emitter module to events.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     2
18
e6c3a5ee91aa Eliminate relative imports.
Radek Brich <radek.brich@devl.cz>
parents: 9
diff changeset
     3
from tuikit.widget import Widget
43
369c8ef5070a Rename emitter module to events.
Radek Brich <radek.brich@devl.cz>
parents: 41
diff changeset
     4
from tuikit.events import Event
18
e6c3a5ee91aa Eliminate relative imports.
Radek Brich <radek.brich@devl.cz>
parents: 9
diff changeset
     5
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     6
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     7
class EditBox(Widget):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     8
    def __init__(self, width=20, height=20, text=''):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     9
        Widget.__init__(self, width, height)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    10
34
e3beacd5e536 Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents: 32
diff changeset
    11
        self.allow_focus = True
e3beacd5e536 Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents: 32
diff changeset
    12
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    13
        self.xofs = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    14
        self.yofs = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    15
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    16
        # cursor
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    17
        self.cline = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    18
        self.cpos = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    19
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    20
        # selection
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    21
        self.sline = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    22
        self.spos = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    23
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    24
        self.add_events(
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    25
            'scroll', Event,
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    26
            'areasize', Event)
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    27
3
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    28
        self.set_text(text)
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    29
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    30
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    31
    def _handle_draw(self, ev):
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    32
        super()._handle_draw(ev)
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    33
        for j in range(self.height):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    34
            if self.yofs + j >= len(self.lines):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    35
                break
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    36
            line = self.lines[self.yofs + j]
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    37
            #if len(line) < self.width:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    38
                #line += ' ' * (self.width - len(line))
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    39
            #else:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    40
                #line = line[:self.width]
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    41
            ev.driver.puts(ev.x, ev.y + j, line)
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    42
34
e3beacd5e536 Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents: 32
diff changeset
    43
        self.cursor = (self.get_cpos() - self.xofs, self.cline - self.yofs)
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    44
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    45
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    46
    def _handle_keypress(self, ev):
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    47
        super()._handle_keypress(ev)
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    48
        if ev.keyname:
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    49
            if ev.keyname == 'left':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    50
                self.move_left()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    51
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    52
            if ev.keyname == 'right':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    53
                self.move_right()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    54
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    55
            if ev.keyname == 'home':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    56
                self.move_home()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    57
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    58
            if ev.keyname == 'end':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    59
                self.move_end()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    60
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    61
            if ev.keyname == 'up':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    62
                self.move_up()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    63
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    64
            if ev.keyname == 'down':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    65
                self.move_down()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    66
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    67
            if ev.keyname == 'pageup':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    68
                self.move_pageup()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    69
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    70
            if ev.keyname == 'pagedown':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    71
                self.move_pagedown()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    72
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    73
            if ev.keyname == 'backspace':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    74
                if self.cline > 0 or self.cpos > 0:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    75
                    self.move_left()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    76
                    self.del_char()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    77
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    78
            if ev.keyname == 'delete':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    79
                self.del_char()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    80
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    81
            if ev.keyname == 'enter':
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    82
                self.add_newline()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    83
                self.move_right()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    84
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    85
        if ev.char:
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
    86
            self.add_char(ev.char)
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    87
            self.move_right()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    88
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    89
        self.redraw()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    90
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    91
40
5faa38c10b67 Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents: 34
diff changeset
    92
    def _handle_mousewheel(self, ev):
5faa38c10b67 Add ScrollView widget. Update Emitter, rename "on_event" methods to "_handle_event". Update VScrollbar, Layout.
Radek Brich <radek.brich@devl.cz>
parents: 34
diff changeset
    93
        super()._handle_mousewheel(ev)
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    94
        # up
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    95
        if ev.button == 4:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    96
            self.move_up()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    97
        # down
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    98
        if ev.button == 5:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    99
            self.move_down()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   100
        self.redraw()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   101
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   102
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   103
    def set_text(self, text):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   104
        self.lines = text.split('\n')
34
e3beacd5e536 Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents: 32
diff changeset
   105
        self.emit('areasize')
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   106
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   107
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   108
    def get_text(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   109
        return '\n'.join(self.lines)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   110
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   111
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   112
    def get_linelen(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   113
        return len(self.lines[self.cline])
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   114
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   115
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   116
    def get_cpos(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   117
        if self.cpos > self.get_linelen():
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   118
            return self.get_linelen()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   119
        return self.cpos
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   120
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   121
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   122
    def set_yofs(self, yofs):
3
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   123
        if yofs > len(self.lines) - self.height:
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   124
            yofs = len(self.lines) - self.height
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   125
        if yofs < 0:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   126
            yofs = 0
41
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
   127
        if self.yofs != yofs:
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
   128
            self.yofs = yofs
37b7dfc3eae6 Update Emitter: All event handlers now have exactly one argument: object inherited from Event class, which carries any data.
Radek Brich <radek.brich@devl.cz>
parents: 40
diff changeset
   129
            self.emit('scroll')
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   130
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   131
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   132
    def move_left(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   133
        if self.cpos > 0:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   134
            self.cpos = self.get_cpos() - 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   135
        else:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   136
            if self.move_up():
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   137
                self.cpos = self.get_linelen()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   138
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   139
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   140
    def move_right(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   141
        if self.cpos < self.get_linelen():
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   142
            self.cpos += 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   143
        else:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   144
            if self.move_down():
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   145
                self.cpos = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   146
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   147
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   148
    def move_home(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   149
        self.cpos = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   150
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   151
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   152
    def move_end(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   153
        self.cpos = self.get_linelen()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   154
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   155
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   156
    def move_up(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   157
        if self.cline > 0:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   158
            self.cline -= 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   159
            if self.cline < self.yofs:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   160
                self.set_yofs(self.cline)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   161
            return True
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   162
        return False
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   163
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   164
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   165
    def move_down(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   166
        if self.cline < len(self.lines) - 1:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   167
            self.cline += 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   168
            if self.cline > self.yofs + self.height - 1:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   169
                self.set_yofs(self.cline - (self.height - 1))
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   170
            return True
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   171
        return False
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   172
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   173
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   174
    def move_pageup(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   175
        if self.cline >= self.height - 1:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   176
            self.cline -= self.height - 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   177
            self.set_yofs(self.yofs - (self.height - 1))
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   178
        else:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   179
            self.cline = 0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   180
            self.set_yofs(0)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   181
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   182
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   183
    def move_pagedown(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   184
        if self.cline <= len(self.lines) - (self.height - 1):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   185
            self.cline += self.height - 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   186
            self.set_yofs(self.yofs + (self.height - 1))
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   187
        else:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   188
            self.cline = len(self.lines) - 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   189
            self.set_yofs(self.cline)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   190
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   191
3
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   192
    def move_pagefirst(self):
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   193
        self.cline = 0
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   194
        self.set_yofs(0)
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   195
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   196
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   197
    def move_pagelast(self):
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   198
        self.cline = len(self.lines) - 1
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   199
        self.set_yofs(self.cline)
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   200
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
   201
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   202
    def add_char(self, c):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   203
        ln = self.lines[self.cline]
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   204
        cpos = self.get_cpos()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   205
        self.lines[self.cline] = ln[:cpos] + c + ln[cpos:]
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   206
        self.cpos = cpos
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   207
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   208
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   209
    def add_newline(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   210
        ln = self.lines[self.cline]
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   211
        cpos = self.get_cpos()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   212
        self.lines[self.cline] = ln[cpos:]
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   213
        self.lines.insert(self.cline, ln[:cpos])
34
e3beacd5e536 Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents: 32
diff changeset
   214
        self.emit('areasize')
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   215
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   216
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   217
    def del_char(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   218
        ln = self.lines[self.cline]
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   219
        cpos = self.get_cpos()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   220
        if cpos == self.get_linelen():
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   221
            if self.cline + 1 < len(self.lines):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   222
                self.lines[self.cline] = self.lines[self.cline] + self.lines[self.cline+1]
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   223
                del self.lines[self.cline+1]
34
e3beacd5e536 Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents: 32
diff changeset
   224
                self.emit('areasize')
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   225
        else:
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
   226
            self.lines[self.cline] = ln[:cpos] + ln[cpos+1:]
18
e6c3a5ee91aa Eliminate relative imports.
Radek Brich <radek.brich@devl.cz>
parents: 9
diff changeset
   227