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 |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 6 | import gwin |
Guido van Rossum | 8fd7eee | 1991-12-26 13:06:52 +0000 | [diff] [blame^] | 7 | from stdwinevents import * |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 8 | |
| 9 | |
| 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) |
| 16 | |
| 17 | def cut(w, m, id): |
| 18 | s = w.text.getfocustext() |
| 19 | if s: |
Guido van Rossum | 67c9b8c | 1990-12-26 15:40:31 +0000 | [diff] [blame] | 20 | stdwin.setcutbuffer(0, s) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 21 | w.text.replace('') |
| 22 | fixsize(w) |
| 23 | |
| 24 | def copy(w, m, id): |
| 25 | s = w.text.getfocustext() |
| 26 | if s: |
Guido van Rossum | 67c9b8c | 1990-12-26 15:40:31 +0000 | [diff] [blame] | 27 | stdwin.setcutbuffer(0, s) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 28 | fixeditmenu(w) |
| 29 | |
| 30 | def paste(w, m, id): |
Guido van Rossum | 67c9b8c | 1990-12-26 15:40:31 +0000 | [diff] [blame] | 31 | w.text.replace(stdwin.getcutbuffer(0)) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 32 | fixsize(w) |
| 33 | |
| 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) |
| 43 | |
| 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) |
Guido van Rossum | 67c9b8c | 1990-12-26 15:40:31 +0000 | [diff] [blame] | 51 | m.enable(2, (stdwin.getcutbuffer(0) <> '')) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 52 | |
| 53 | def draw(w, area): # Draw method |
| 54 | w.text.draw(area) |
| 55 | |
| 56 | def size(w, newsize): # Size method |
| 57 | w.text.move((0, 0), newsize) |
| 58 | fixsize(w) |
| 59 | |
| 60 | def close(w): # Close method |
| 61 | del w.text # Break circular ref |
| 62 | gwin.close(w) |
| 63 | |
| 64 | def char(w, c): # Char method |
| 65 | w.text.replace(c) |
| 66 | fixsize(w) |
| 67 | |
| 68 | def backspace(w): # Backspace method |
Guido van Rossum | 8fd7eee | 1991-12-26 13:06:52 +0000 | [diff] [blame^] | 69 | void = w.text.event(WE_COMMAND, w, WC_BACKSPACE) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 70 | fixsize(w) |
| 71 | |
| 72 | def arrow(w, detail): # Arrow method |
| 73 | w.text.arrow(detail) |
| 74 | fixeditmenu(w) |
| 75 | |
| 76 | def mdown(w, detail): # Mouse down method |
Guido van Rossum | 8fd7eee | 1991-12-26 13:06:52 +0000 | [diff] [blame^] | 77 | void = w.text.event(WE_MOUSE_DOWN, w, detail) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 78 | fixeditmenu(w) |
| 79 | |
| 80 | def mmove(w, detail): # Mouse move method |
Guido van Rossum | 8fd7eee | 1991-12-26 13:06:52 +0000 | [diff] [blame^] | 81 | void = w.text.event(WE_MOUSE_MOVE, w, detail) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 82 | |
| 83 | def mup(w, detail): # Mouse up method |
Guido van Rossum | 8fd7eee | 1991-12-26 13:06:52 +0000 | [diff] [blame^] | 84 | void = w.text.event(WE_MOUSE_UP, w, detail) |
Guido van Rossum | c636014 | 1990-10-13 19:23:40 +0000 | [diff] [blame] | 85 | fixeditmenu(w) |
| 86 | |
| 87 | def activate(w): # Activate method |
| 88 | fixeditmenu(w) |
| 89 | |
| 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 |
| 109 | |
| 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 |