blob: 626c8fa2fb4fd6afe98ae26f2dc6c39a6976cecf [file] [log] [blame]
Guido van Rossumc6360141990-10-13 19:23:40 +00001# Module 'gwin'
2# Generic stdwin windows
3
4# This is used as a base class from which to derive other window types.
Guido van Rossum89a78691992-12-14 12:57:56 +00005# XXX DON'T USE THIS CODE ANY MORE! It is ages old!
Guido van Rossum61f9d0d1991-12-26 13:04:16 +00006
Guido van Rossum0b744801991-08-16 13:24:58 +00007import stdwin, stdwinq
Guido van Rossuma4ddbd81990-12-26 15:37:05 +00008from stdwinevents import *
Guido van Rossum89a78691992-12-14 12:57:56 +00009from mainloop import mainloop, register, unregister, windows
Guido van Rossumc6360141990-10-13 19:23:40 +000010
11# Open a window
12
13def open(title): # Open a generic window
14 w = stdwin.open(title)
15 stdwin.setdefwinsize(0, 0)
16 # Set default event handlers
17 w.draw = nop
18 w.char = nop
19 w.mdown = nop
20 w.mmove = nop
21 w.mup = nop
22 w.m2down = m2down
23 w.m2up = m2up
24 w.size = nop
25 w.move = nop
26 w.activate = w.deactivate = nop
27 w.timer = nop
28 # default command handlers
29 w.close = close
30 w.tab = tab
31 w.enter = enter
32 w.backspace = backspace
33 w.arrow = arrow
34 w.kleft = w.kup = w.kright = w.kdown = nop
Guido van Rossum89a78691992-12-14 12:57:56 +000035 w.dispatch = treatevent
36 register(w)
Guido van Rossumc6360141990-10-13 19:23:40 +000037 return w
38
39
Guido van Rossumc6360141990-10-13 19:23:40 +000040def treatevent(e): # Handle a stdwin event
41 type, w, detail = e
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000042 if type == WE_DRAW:
Guido van Rossumc6360141990-10-13 19:23:40 +000043 w.draw(w, detail)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000044 elif type == WE_MENU:
Guido van Rossumc6360141990-10-13 19:23:40 +000045 m, item = detail
46 m.action[item](w, m, item)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000047 elif type == WE_COMMAND:
Guido van Rossumc6360141990-10-13 19:23:40 +000048 treatcommand(w, detail)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000049 elif type == WE_CHAR:
Guido van Rossumc6360141990-10-13 19:23:40 +000050 w.char(w, detail)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000051 elif type == WE_MOUSE_DOWN:
Guido van Rossumc6360141990-10-13 19:23:40 +000052 if detail[1] > 1: w.m2down(w, detail)
53 else: w.mdown(w, detail)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000054 elif type == WE_MOUSE_MOVE:
Guido van Rossumc6360141990-10-13 19:23:40 +000055 w.mmove(w, detail)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000056 elif type == WE_MOUSE_UP:
Guido van Rossumc6360141990-10-13 19:23:40 +000057 if detail[1] > 1: w.m2up(w, detail)
58 else: w.mup(w, detail)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000059 elif type == WE_SIZE:
Guido van Rossumc6360141990-10-13 19:23:40 +000060 w.size(w, w.getwinsize())
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000061 elif type == WE_ACTIVATE:
Guido van Rossumc6360141990-10-13 19:23:40 +000062 w.activate(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000063 elif type == WE_DEACTIVATE:
Guido van Rossumc6360141990-10-13 19:23:40 +000064 w.deactivate(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000065 elif type == WE_MOVE:
Guido van Rossumc6360141990-10-13 19:23:40 +000066 w.move(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000067 elif type == WE_TIMER:
Guido van Rossumc6360141990-10-13 19:23:40 +000068 w.timer(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000069 elif type == WE_CLOSE:
Guido van Rossuma4ddbd81990-12-26 15:37:05 +000070 w.close(w)
Guido van Rossumc6360141990-10-13 19:23:40 +000071
72def treatcommand(w, type): # Handle a we_command event
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000073 if type == WC_CLOSE:
Guido van Rossumc6360141990-10-13 19:23:40 +000074 w.close(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000075 elif type == WC_RETURN:
Guido van Rossumc6360141990-10-13 19:23:40 +000076 w.enter(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000077 elif type == WC_TAB:
Guido van Rossumc6360141990-10-13 19:23:40 +000078 w.tab(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000079 elif type == WC_BACKSPACE:
Guido van Rossumc6360141990-10-13 19:23:40 +000080 w.backspace(w)
Guido van Rossum61f9d0d1991-12-26 13:04:16 +000081 elif type in (WC_LEFT, WC_UP, WC_RIGHT, WC_DOWN):
Guido van Rossumc6360141990-10-13 19:23:40 +000082 w.arrow(w, type)
83
84
85# Methods
86
87def close(w): # Close method
Guido van Rossum89a78691992-12-14 12:57:56 +000088 unregister(w)
89 del w.close # Delete our close function
90 w.close() # Call the close method
Guido van Rossumc6360141990-10-13 19:23:40 +000091
92def arrow(w, detail): # Arrow key method
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000093 if detail == WC_LEFT:
Guido van Rossumc6360141990-10-13 19:23:40 +000094 w.kleft(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000095 elif detail == WC_UP:
Guido van Rossumc6360141990-10-13 19:23:40 +000096 w.kup(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000097 elif detail == WC_RIGHT:
Guido van Rossumc6360141990-10-13 19:23:40 +000098 w.kright(w)
Guido van Rossumbdfcfcc1992-01-01 19:35:13 +000099 elif detail == WC_DOWN:
Guido van Rossumc6360141990-10-13 19:23:40 +0000100 w.kdown(w)
101
102
103# Trivial methods
104
105def tab(w): w.char(w, '\t')
106def enter(w): w.char(w, '\n') # 'return' is a Python reserved word
107def backspace(w): w.char(w, '\b')
108def m2down(w, detail): w.mdown(w, detail)
109def m2up(w, detail): w.mup(w, detail)
Guido van Rossum89a78691992-12-14 12:57:56 +0000110def nop(*args): pass