Improved some error messages for command line processing.
[python/dscho.git] / Lib / lib-stdwin / textwin.py
blob778717fe14f07f9bcbbee2e367056b7e5b34b9cc
1 # Module 'textwin'
3 # Text windows, a subclass of gwin
5 import stdwin
6 import gwin
7 from stdwinevents import *
10 def 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)
17 def cut(w, m, id):
18 s = w.text.getfocustext()
19 if s:
20 stdwin.setcutbuffer(0, s)
21 w.text.replace('')
22 fixsize(w)
24 def copy(w, m, id):
25 s = w.text.getfocustext()
26 if s:
27 stdwin.setcutbuffer(0, s)
28 fixeditmenu(w)
30 def paste(w, m, id):
31 w.text.replace(stdwin.getcutbuffer(0))
32 fixsize(w)
34 def 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)
44 def 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)
51 m.enable(2, (stdwin.getcutbuffer(0) <> ''))
53 def draw(w, area): # Draw method
54 w.text.draw(area)
56 def size(w, newsize): # Size method
57 w.text.move((0, 0), newsize)
58 fixsize(w)
60 def close(w): # Close method
61 del w.text # Break circular ref
62 gwin.close(w)
64 def char(w, c): # Char method
65 w.text.replace(c)
66 fixsize(w)
68 def backspace(w): # Backspace method
69 void = w.text.event(WE_COMMAND, w, WC_BACKSPACE)
70 fixsize(w)
72 def arrow(w, detail): # Arrow method
73 w.text.arrow(detail)
74 fixeditmenu(w)
76 def mdown(w, detail): # Mouse down method
77 void = w.text.event(WE_MOUSE_DOWN, w, detail)
78 fixeditmenu(w)
80 def mmove(w, detail): # Mouse move method
81 void = w.text.event(WE_MOUSE_MOVE, w, detail)
83 def mup(w, detail): # Mouse up method
84 void = w.text.event(WE_MOUSE_UP, w, detail)
85 fixeditmenu(w)
87 def activate(w): # Activate method
88 fixeditmenu(w)
90 def 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
110 def 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