tuikit/textedit.py
author Radek Brich <radek.brich@devl.cz>
Sun, 16 Dec 2012 20:49:54 +0100
changeset 34 e3beacd5e536
parent 18 e6c3a5ee91aa
child 40 5faa38c10b67
permissions -rw-r--r--
Update event propagation, keypress event, focusing.
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: 3
diff changeset
     3
from tuikit.container import Container
e6c3a5ee91aa Eliminate relative imports.
Radek Brich <radek.brich@devl.cz>
parents: 3
diff changeset
     4
from tuikit.editbox import EditBox
e6c3a5ee91aa Eliminate relative imports.
Radek Brich <radek.brich@devl.cz>
parents: 3
diff changeset
     5
from tuikit.scrollbar import VScrollbar
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     6
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     7
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     8
class TextEdit(Container):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
     9
    def __init__(self, width=20, height=20, text=''):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    10
        Container.__init__(self, width, height)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    11
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    12
        self.editbox = EditBox(width-2, height-2, text)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    13
        self.add(self.editbox)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    14
        self.editbox.x = 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    15
        self.editbox.y = 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    16
        self.editbox.connect('scroll', self.on_editbox_scroll)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    17
        self.editbox.connect('areasize', self.on_editbox_areasize)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    18
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    19
        self.vscroll = VScrollbar(height - 2)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    20
        self.add(self.vscroll)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    21
        self.vscroll.x = width - 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    22
        self.vscroll.y = 1
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    23
        self.vscroll.connect('change', self.on_vscroll_change)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    24
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    25
        self.on_editbox_areasize()
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    26
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    27
    def settext(self, text):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    28
        self.editbox.set_text(text)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    29
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    30
3
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    31
    def scrolltoend(self):
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    32
        self.editbox.move_pagelast()
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    33
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    34
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    35
    def on_draw(self, screen, x, y):
34
e3beacd5e536 Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents: 18
diff changeset
    36
        super().on_draw(screen, x, y)
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    37
        screen.frame(x, y, self.width, self.height)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    38
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    39
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    40
    def on_editbox_scroll(self):
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    41
        self.vscroll.setpos(self.editbox.yofs)
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    42
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    43
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    44
    def on_editbox_areasize(self):
3
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    45
        smax = len(self.editbox.lines) - self.editbox.height
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    46
        if smax < 0:
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    47
            smax = 0
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    48
        self.vscroll.max = smax
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    49
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    50
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    51
    def on_vscroll_change(self):
34
e3beacd5e536 Update event propagation, keypress event, focusing.
Radek Brich <radek.brich@devl.cz>
parents: 18
diff changeset
    52
        self.editbox.set_yofs(self.vscroll.pos)
0
Radek Brich <radek.brich@devl.cz>
parents:
diff changeset
    53
        self.editbox.redraw()
3
33ec838dc021 Fixed escape sequence handling.
Radek Brich <radek.brich@devl.cz>
parents: 0
diff changeset
    54