blob: 778717fe14f07f9bcbbee2e367056b7e5b34b9cc [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
Guido van Rossumc6360141990-10-13 19:23:40 +00006import gwin
Guido van Rossum8fd7eee1991-12-26 13:06:52 +00007from stdwinevents import *
Guido van Rossumc6360141990-10-13 19:23:40 +00008
9
10def fixsize(w):
11 docwidth, docheight = w.text.getrect()[1]
12 winheight = w.getwinsize()[1]
13 if winheight > docheight: docheight = winheight
14 w.setdocsize(0, docheight)
15 fixeditmenu(w)
16
17def cut(w, m, id):
18 s = w.text.getfocustext()
19 if s:
Guido van Rossum67c9b8c1990-12-26 15:40:31 +000020 stdwin.setcutbuffer(0, s)
Guido van Rossumc6360141990-10-13 19:23:40 +000021 w.text.replace('')
22 fixsize(w)
23
24def copy(w, m, id):
25 s = w.text.getfocustext()
26 if s:
Guido van Rossum67c9b8c1990-12-26 15:40:31 +000027 stdwin.setcutbuffer(0, s)
Guido van Rossumc6360141990-10-13 19:23:40 +000028 fixeditmenu(w)
29
30def paste(w, m, id):
Guido van Rossum67c9b8c1990-12-26 15:40:31 +000031 w.text.replace(stdwin.getcutbuffer(0))
Guido van Rossumc6360141990-10-13 19:23:40 +000032 fixsize(w)
33
34def addeditmenu(w):
35 m = w.editmenu = w.menucreate('Edit')
36 m.action = []
37 m.additem('Cut', 'X')
38 m.action.append(cut)
39 m.additem('Copy', 'C')
40 m.action.append(copy)
41 m.additem('Paste', 'V')
42 m.action.append(paste)
43
44def fixeditmenu(w):
45 m = w.editmenu
46 f = w.text.getfocus()
47 can_copy = (f[0] < f[1])
48 m.enable(1, can_copy)
49 if not w.readonly:
50 m.enable(0, can_copy)
Guido van Rossum67c9b8c1990-12-26 15:40:31 +000051 m.enable(2, (stdwin.getcutbuffer(0) <> ''))
Guido van Rossumc6360141990-10-13 19:23:40 +000052
53def draw(w, area): # Draw method
54 w.text.draw(area)
55
56def size(w, newsize): # Size method
57 w.text.move((0, 0), newsize)
58 fixsize(w)
59
60def close(w): # Close method
61 del w.text # Break circular ref
62 gwin.close(w)
63
64def char(w, c): # Char method
65 w.text.replace(c)
66 fixsize(w)
67
68def backspace(w): # Backspace method
Guido van Rossum8fd7eee1991-12-26 13:06:52 +000069 void = w.text.event(WE_COMMAND, w, WC_BACKSPACE)
Guido van Rossumc6360141990-10-13 19:23:40 +000070 fixsize(w)
71
72def arrow(w, detail): # Arrow method
73 w.text.arrow(detail)
74 fixeditmenu(w)
75
76def mdown(w, detail): # Mouse down method
Guido van Rossum8fd7eee1991-12-26 13:06:52 +000077 void = w.text.event(WE_MOUSE_DOWN, w, detail)
Guido van Rossumc6360141990-10-13 19:23:40 +000078 fixeditmenu(w)
79
80def mmove(w, detail): # Mouse move method
Guido van Rossum8fd7eee1991-12-26 13:06:52 +000081 void = w.text.event(WE_MOUSE_MOVE, w, detail)
Guido van Rossumc6360141990-10-13 19:23:40 +000082
83def mup(w, detail): # Mouse up method
Guido van Rossum8fd7eee1991-12-26 13:06:52 +000084 void = w.text.event(WE_MOUSE_UP, w, detail)
Guido van Rossumc6360141990-10-13 19:23:40 +000085 fixeditmenu(w)
86
87def activate(w): # Activate method
88 fixeditmenu(w)
89
90def open(title, str): # Display a string in a window
91 w = gwin.open(title)
92 w.readonly = 0
93 w.text = w.textcreate((0, 0), w.getwinsize())
94 w.text.replace(str)
95 w.text.setfocus(0, 0)
96 addeditmenu(w)
97 fixsize(w)
98 w.draw = draw
99 w.size = size
100 w.close = close
101 w.mdown = mdown
102 w.mmove = mmove
103 w.mup = mup
104 w.char = char
105 w.backspace = backspace
106 w.arrow = arrow
107 w.activate = activate
108 return w
109
110def open_readonly(title, str): # Same with char input disabled
111 w = open(title, str)
112 w.readonly = 1
113 w.char = w.backspace = gwin.nop
114 # Disable Cut and Paste menu item; leave Copy alone
115 w.editmenu.enable(0, 0)
116 w.editmenu.enable(2, 0)
117 return w