| # Module 'textwin' |
| |
| # Text windows, a subclass of gwin |
| |
| import stdwin |
| import gwin |
| from stdwinevents import * |
| |
| |
| def fixsize(w): |
| docwidth, docheight = w.text.getrect()[1] |
| winheight = w.getwinsize()[1] |
| if winheight > docheight: docheight = winheight |
| w.setdocsize(0, docheight) |
| fixeditmenu(w) |
| |
| def cut(w, m, id): |
| s = w.text.getfocustext() |
| if s: |
| stdwin.setcutbuffer(0, s) |
| w.text.replace('') |
| fixsize(w) |
| |
| def copy(w, m, id): |
| s = w.text.getfocustext() |
| if s: |
| stdwin.setcutbuffer(0, s) |
| fixeditmenu(w) |
| |
| def paste(w, m, id): |
| w.text.replace(stdwin.getcutbuffer(0)) |
| fixsize(w) |
| |
| def addeditmenu(w): |
| m = w.editmenu = w.menucreate('Edit') |
| m.action = [] |
| m.additem('Cut', 'X') |
| m.action.append(cut) |
| m.additem('Copy', 'C') |
| m.action.append(copy) |
| m.additem('Paste', 'V') |
| m.action.append(paste) |
| |
| def fixeditmenu(w): |
| m = w.editmenu |
| f = w.text.getfocus() |
| can_copy = (f[0] < f[1]) |
| m.enable(1, can_copy) |
| if not w.readonly: |
| m.enable(0, can_copy) |
| m.enable(2, (stdwin.getcutbuffer(0) <> '')) |
| |
| def draw(w, area): # Draw method |
| w.text.draw(area) |
| |
| def size(w, newsize): # Size method |
| w.text.move((0, 0), newsize) |
| fixsize(w) |
| |
| def close(w): # Close method |
| del w.text # Break circular ref |
| gwin.close(w) |
| |
| def char(w, c): # Char method |
| w.text.replace(c) |
| fixsize(w) |
| |
| def backspace(w): # Backspace method |
| void = w.text.event(WE_COMMAND, w, WC_BACKSPACE) |
| fixsize(w) |
| |
| def arrow(w, detail): # Arrow method |
| w.text.arrow(detail) |
| fixeditmenu(w) |
| |
| def mdown(w, detail): # Mouse down method |
| void = w.text.event(WE_MOUSE_DOWN, w, detail) |
| fixeditmenu(w) |
| |
| def mmove(w, detail): # Mouse move method |
| void = w.text.event(WE_MOUSE_MOVE, w, detail) |
| |
| def mup(w, detail): # Mouse up method |
| void = w.text.event(WE_MOUSE_UP, w, detail) |
| fixeditmenu(w) |
| |
| def activate(w): # Activate method |
| fixeditmenu(w) |
| |
| def open(title, str): # Display a string in a window |
| w = gwin.open(title) |
| w.readonly = 0 |
| w.text = w.textcreate((0, 0), w.getwinsize()) |
| w.text.replace(str) |
| w.text.setfocus(0, 0) |
| addeditmenu(w) |
| fixsize(w) |
| w.draw = draw |
| w.size = size |
| w.close = close |
| w.mdown = mdown |
| w.mmove = mmove |
| w.mup = mup |
| w.char = char |
| w.backspace = backspace |
| w.arrow = arrow |
| w.activate = activate |
| return w |
| |
| def open_readonly(title, str): # Same with char input disabled |
| w = open(title, str) |
| w.readonly = 1 |
| w.char = w.backspace = gwin.nop |
| # Disable Cut and Paste menu item; leave Copy alone |
| w.editmenu.enable(0, 0) |
| w.editmenu.enable(2, 0) |
| return w |