blob: a003a9a0d97d2f821bc372e47bfe41dea8c063c3 [file] [log] [blame]
Guido van Rossumc6360141990-10-13 19:23:40 +00001# Module 'textwin'
2
3# Text windows, a subclass of gwin
4
5import stdwin
6import stdwinsupport
7import gwin
8
9S = stdwinsupport # Shorthand
10
11
12def fixsize(w):
13 docwidth, docheight = w.text.getrect()[1]
14 winheight = w.getwinsize()[1]
15 if winheight > docheight: docheight = winheight
16 w.setdocsize(0, docheight)
17 fixeditmenu(w)
18
19def cut(w, m, id):
20 s = w.text.getfocustext()
21 if s:
Guido van Rossum67c9b8c1990-12-26 15:40:31 +000022 stdwin.setcutbuffer(0, s)
Guido van Rossumc6360141990-10-13 19:23:40 +000023 w.text.replace('')
24 fixsize(w)
25
26def copy(w, m, id):
27 s = w.text.getfocustext()
28 if s:
Guido van Rossum67c9b8c1990-12-26 15:40:31 +000029 stdwin.setcutbuffer(0, s)
Guido van Rossumc6360141990-10-13 19:23:40 +000030 fixeditmenu(w)
31
32def paste(w, m, id):
Guido van Rossum67c9b8c1990-12-26 15:40:31 +000033 w.text.replace(stdwin.getcutbuffer(0))
Guido van Rossumc6360141990-10-13 19:23:40 +000034 fixsize(w)
35
36def addeditmenu(w):
37 m = w.editmenu = w.menucreate('Edit')
38 m.action = []
39 m.additem('Cut', 'X')
40 m.action.append(cut)
41 m.additem('Copy', 'C')
42 m.action.append(copy)
43 m.additem('Paste', 'V')
44 m.action.append(paste)
45
46def fixeditmenu(w):
47 m = w.editmenu
48 f = w.text.getfocus()
49 can_copy = (f[0] < f[1])
50 m.enable(1, can_copy)
51 if not w.readonly:
52 m.enable(0, can_copy)
Guido van Rossum67c9b8c1990-12-26 15:40:31 +000053 m.enable(2, (stdwin.getcutbuffer(0) <> ''))
Guido van Rossumc6360141990-10-13 19:23:40 +000054
55def draw(w, area): # Draw method
56 w.text.draw(area)
57
58def size(w, newsize): # Size method
59 w.text.move((0, 0), newsize)
60 fixsize(w)
61
62def close(w): # Close method
63 del w.text # Break circular ref
64 gwin.close(w)
65
66def char(w, c): # Char method
67 w.text.replace(c)
68 fixsize(w)
69
70def backspace(w): # Backspace method
71 void = w.text.event(S.we_command, w, S.wc_backspace)
72 fixsize(w)
73
74def arrow(w, detail): # Arrow method
75 w.text.arrow(detail)
76 fixeditmenu(w)
77
78def mdown(w, detail): # Mouse down method
79 void = w.text.event(S.we_mouse_down, w, detail)
80 fixeditmenu(w)
81
82def mmove(w, detail): # Mouse move method
83 void = w.text.event(S.we_mouse_move, w, detail)
84
85def mup(w, detail): # Mouse up method
86 void = w.text.event(S.we_mouse_up, w, detail)
87 fixeditmenu(w)
88
89def activate(w): # Activate method
90 fixeditmenu(w)
91
92def open(title, str): # Display a string in a window
93 w = gwin.open(title)
94 w.readonly = 0
95 w.text = w.textcreate((0, 0), w.getwinsize())
96 w.text.replace(str)
97 w.text.setfocus(0, 0)
98 addeditmenu(w)
99 fixsize(w)
100 w.draw = draw
101 w.size = size
102 w.close = close
103 w.mdown = mdown
104 w.mmove = mmove
105 w.mup = mup
106 w.char = char
107 w.backspace = backspace
108 w.arrow = arrow
109 w.activate = activate
110 return w
111
112def open_readonly(title, str): # Same with char input disabled
113 w = open(title, str)
114 w.readonly = 1
115 w.char = w.backspace = gwin.nop
116 # Disable Cut and Paste menu item; leave Copy alone
117 w.editmenu.enable(0, 0)
118 w.editmenu.enable(2, 0)
119 return w