Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 1 | # Module 'textwin' |
| 2 | |
| 3 | # Text windows, a subclass of gwin |
| 4 | |
| 5 | import stdwin |
| 6 | import stdwinsupport |
| 7 | import gwin |
| 8 | |
| 9 | S = stdwinsupport # Shorthand |
| 10 | |
| 11 | |
| 12 | def 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 | |
| 19 | def cut(w, m, id): |
| 20 | s = w.text.getfocustext() |
| 21 | if s: |
Guido van Rossum | 67c9b8c | 1990-12-26 15:40:31 +0000 | [diff] [blame] | 22 | stdwin.setcutbuffer(0, s) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 23 | w.text.replace('') |
| 24 | fixsize(w) |
| 25 | |
| 26 | def copy(w, m, id): |
| 27 | s = w.text.getfocustext() |
| 28 | if s: |
Guido van Rossum | 67c9b8c | 1990-12-26 15:40:31 +0000 | [diff] [blame] | 29 | stdwin.setcutbuffer(0, s) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 30 | fixeditmenu(w) |
| 31 | |
| 32 | def paste(w, m, id): |
Guido van Rossum | 67c9b8c | 1990-12-26 15:40:31 +0000 | [diff] [blame] | 33 | w.text.replace(stdwin.getcutbuffer(0)) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 34 | fixsize(w) |
| 35 | |
| 36 | def 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 | |
| 46 | def 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 Rossum | 67c9b8c | 1990-12-26 15:40:31 +0000 | [diff] [blame] | 53 | m.enable(2, (stdwin.getcutbuffer(0) <> '')) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 54 | |
| 55 | def draw(w, area): # Draw method |
| 56 | w.text.draw(area) |
| 57 | |
| 58 | def size(w, newsize): # Size method |
| 59 | w.text.move((0, 0), newsize) |
| 60 | fixsize(w) |
| 61 | |
| 62 | def close(w): # Close method |
| 63 | del w.text # Break circular ref |
| 64 | gwin.close(w) |
| 65 | |
| 66 | def char(w, c): # Char method |
| 67 | w.text.replace(c) |
| 68 | fixsize(w) |
| 69 | |
| 70 | def backspace(w): # Backspace method |
| 71 | void = w.text.event(S.we_command, w, S.wc_backspace) |
| 72 | fixsize(w) |
| 73 | |
| 74 | def arrow(w, detail): # Arrow method |
| 75 | w.text.arrow(detail) |
| 76 | fixeditmenu(w) |
| 77 | |
| 78 | def mdown(w, detail): # Mouse down method |
| 79 | void = w.text.event(S.we_mouse_down, w, detail) |
| 80 | fixeditmenu(w) |
| 81 | |
| 82 | def mmove(w, detail): # Mouse move method |
| 83 | void = w.text.event(S.we_mouse_move, w, detail) |
| 84 | |
| 85 | def mup(w, detail): # Mouse up method |
| 86 | void = w.text.event(S.we_mouse_up, w, detail) |
| 87 | fixeditmenu(w) |
| 88 | |
| 89 | def activate(w): # Activate method |
| 90 | fixeditmenu(w) |
| 91 | |
| 92 | def 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 | |
| 112 | def 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 |