]> git.saurik.com Git - wxWidgets.git/blame - wxPython/src/_extras.py
added functions to read/write several elements at once (patch 754986)
[wxWidgets.git] / wxPython / src / _extras.py
CommitLineData
7bf85405
RD
1#----------------------------------------------------------------------------
2# Name: _extra.py
1e4a197e 3# Purpose: This file is appended to the shadow class file generated
7bf85405
RD
4# by SWIG. We add some unSWIGable things here.
5#
6# Author: Robin Dunn
7#
8# Created: 6/30/97
7bf85405
RD
9# Copyright: (c) 1998 by Total Control Software
10# Licence: wxWindows license
11#----------------------------------------------------------------------------
12
13import sys
14
15#----------------------------------------------------------------------
16# This gives this module's dictionary to the C++ extension code...
17
18_wxSetDictionary(vars())
19
20
21#----------------------------------------------------------------------
22#----------------------------------------------------------------------
23# Helper function to link python methods to wxWindows virtual
24# functions by name.
25
26def _checkForCallback(obj, name, event, theID=-1):
27 try: cb = getattr(obj, name)
28 except: pass
29 else: obj.Connect(theID, -1, event, cb)
30
7bf85405
RD
31
32#----------------------------------------------------------------------
33#----------------------------------------------------------------------
34# functions that look and act like the C++ Macros of the same name
35
36
37# Miscellaneous
38def EVT_SIZE(win, func):
39 win.Connect(-1, -1, wxEVT_SIZE, func)
40
41def EVT_MOVE(win, func):
42 win.Connect(-1, -1, wxEVT_MOVE, func)
43
44def EVT_CLOSE(win, func):
45 win.Connect(-1, -1, wxEVT_CLOSE_WINDOW, func)
46
47def EVT_PAINT(win, func):
48 win.Connect(-1, -1, wxEVT_PAINT, func)
49
50def EVT_ERASE_BACKGROUND(win, func):
51 win.Connect(-1, -1, wxEVT_ERASE_BACKGROUND, func)
52
53def EVT_CHAR(win, func):
54 win.Connect(-1, -1, wxEVT_CHAR, func)
55
56def EVT_CHAR_HOOK(win, func):
57 win.Connect(-1, -1, wxEVT_CHAR_HOOK, func)
58
8bf5d46e
RD
59def EVT_KEY_DOWN(win, func):
60 win.Connect(-1, -1, wxEVT_KEY_DOWN, func)
61
62def EVT_KEY_UP(win, func):
63 win.Connect(-1, -1, wxEVT_KEY_UP, func)
64
afb810d9
RD
65def EVT_MENU_OPEN(win, func):
66 win.Connect(-1, -1, wxEVT_MENU_OPEN, func)
67
68def EVT_MENU_CLOSE(win, func):
69 win.Connect(-1, -1, wxEVT_MENU_CLOSE, func)
70
7bf85405
RD
71def EVT_MENU_HIGHLIGHT(win, id, func):
72 win.Connect(id, -1, wxEVT_MENU_HIGHLIGHT, func)
73
74def EVT_MENU_HIGHLIGHT_ALL(win, func):
75 win.Connect(-1, -1, wxEVT_MENU_HIGHLIGHT, func)
76
77def EVT_SET_FOCUS(win, func):
78 win.Connect(-1, -1, wxEVT_SET_FOCUS, func)
79
80def EVT_KILL_FOCUS(win, func):
81 win.Connect(-1, -1, wxEVT_KILL_FOCUS, func)
82
7b7ac0ab
RD
83def EVT_CHILD_FOCUS(win, func):
84 win.Connect(-1, -1, wxEVT_CHILD_FOCUS, func)
85
7bf85405
RD
86def EVT_ACTIVATE(win, func):
87 win.Connect(-1, -1, wxEVT_ACTIVATE, func)
88
89def EVT_ACTIVATE_APP(win, func):
90 win.Connect(-1, -1, wxEVT_ACTIVATE_APP, func)
91
92def EVT_END_SESSION(win, func):
93 win.Connect(-1, -1, wxEVT_END_SESSION, func)
94
95def EVT_QUERY_END_SESSION(win, func):
96 win.Connect(-1, -1, wxEVT_QUERY_END_SESSION, func)
97
98def EVT_DROP_FILES(win, func):
99 win.Connect(-1, -1, wxEVT_DROP_FILES, func)
100
101def EVT_INIT_DIALOG(win, func):
102 win.Connect(-1, -1, wxEVT_INIT_DIALOG, func)
103
104def EVT_SYS_COLOUR_CHANGED(win, func):
105 win.Connect(-1, -1, wxEVT_SYS_COLOUR_CHANGED, func)
106
be43cc44
RD
107def EVT_DISPLAY_CHANGED(win, func):
108 win.Connect(-1, -1, wxEVT_DISPLAY_CHANGED, func)
109
7bf85405
RD
110def EVT_SHOW(win, func):
111 win.Connect(-1, -1, wxEVT_SHOW, func)
112
113def EVT_MAXIMIZE(win, func):
114 win.Connect(-1, -1, wxEVT_MAXIMIZE, func)
115
116def EVT_ICONIZE(win, func):
117 win.Connect(-1, -1, wxEVT_ICONIZE, func)
118
119def EVT_NAVIGATION_KEY(win, func):
120 win.Connect(-1, -1, wxEVT_NAVIGATION_KEY, func)
121
3af4e610
RD
122def EVT_PALETTE_CHANGED(win, func):
123 win.Connect(-1, -1, wxEVT_PALETTE_CHANGED, func)
124
125def EVT_QUERY_NEW_PALETTE(win, func):
126 win.Connect(-1, -1, wxEVT_QUERY_NEW_PALETTE, func)
127
128def EVT_WINDOW_CREATE(win, func):
54b96882 129 win.Connect(-1, -1, wxEVT_CREATE, func)
3af4e610
RD
130
131def EVT_WINDOW_DESTROY(win, func):
54b96882 132 win.Connect(-1, -1, wxEVT_DESTROY, func)
3af4e610 133
1e4a197e
RD
134def EVT_WINDOW_CREATE_ID(win, id, func):
135 win.Connect(id, -1, wxEVT_CREATE, func)
136
137def EVT_WINDOW_DESTROY_ID(win, id, func):
138 win.Connect(id, -1, wxEVT_DESTROY, func)
139
203c2f9a
RD
140def EVT_SET_CURSOR(win, func):
141 win.Connect(-1, -1, wxEVT_SET_CURSOR, func)
142
3af4e610
RD
143
144
cf694132
RD
145def EVT_IDLE(win, func):
146 win.Connect(-1, -1, wxEVT_IDLE, func)
147
bb0054cd
RD
148def EVT_UPDATE_UI(win, id, func):
149 win.Connect(id, -1, wxEVT_UPDATE_UI, func)
150
eb715945
RD
151def EVT_UPDATE_UI_RANGE(win, id, id2, func):
152 win.Connect(id, id2, wxEVT_UPDATE_UI, func)
153
7bf85405
RD
154
155# Mouse Events
156def EVT_LEFT_DOWN(win, func):
157 win.Connect(-1, -1, wxEVT_LEFT_DOWN, func)
158
159def EVT_LEFT_UP(win, func):
160 win.Connect(-1, -1, wxEVT_LEFT_UP, func)
161
162def EVT_MIDDLE_DOWN(win, func):
163 win.Connect(-1, -1, wxEVT_MIDDLE_DOWN, func)
164
165def EVT_MIDDLE_UP(win, func):
166 win.Connect(-1, -1, wxEVT_MIDDLE_UP, func)
167
168def EVT_RIGHT_DOWN(win, func):
169 win.Connect(-1, -1, wxEVT_RIGHT_DOWN, func)
170
171def EVT_RIGHT_UP(win, func):
172 win.Connect(-1, -1, wxEVT_RIGHT_UP, func)
173
174def EVT_MOTION(win, func):
175 win.Connect(-1, -1, wxEVT_MOTION, func)
176
177def EVT_LEFT_DCLICK(win, func):
178 win.Connect(-1, -1, wxEVT_LEFT_DCLICK, func)
179
180def EVT_MIDDLE_DCLICK(win, func):
181 win.Connect(-1, -1, wxEVT_MIDDLE_DCLICK, func)
182
183def EVT_RIGHT_DCLICK(win, func):
184 win.Connect(-1, -1, wxEVT_RIGHT_DCLICK, func)
185
186def EVT_LEAVE_WINDOW(win, func):
187 win.Connect(-1, -1, wxEVT_LEAVE_WINDOW, func)
188
189def EVT_ENTER_WINDOW(win, func):
190 win.Connect(-1, -1, wxEVT_ENTER_WINDOW, func)
191
d1679124
RD
192def EVT_MOUSEWHEEL(win, func):
193 win.Connect(-1, -1, wxEVT_MOUSEWHEEL, func)
7bf85405
RD
194
195# all mouse events
196def EVT_MOUSE_EVENTS(win, func):
197 win.Connect(-1, -1, wxEVT_LEFT_DOWN, func)
198 win.Connect(-1, -1, wxEVT_LEFT_UP, func)
199 win.Connect(-1, -1, wxEVT_MIDDLE_DOWN, func)
200 win.Connect(-1, -1, wxEVT_MIDDLE_UP, func)
201 win.Connect(-1, -1, wxEVT_RIGHT_DOWN, func)
202 win.Connect(-1, -1, wxEVT_RIGHT_UP, func)
203 win.Connect(-1, -1, wxEVT_MOTION, func)
204 win.Connect(-1, -1, wxEVT_LEFT_DCLICK, func)
205 win.Connect(-1, -1, wxEVT_MIDDLE_DCLICK, func)
206 win.Connect(-1, -1, wxEVT_RIGHT_DCLICK, func)
207 win.Connect(-1, -1, wxEVT_LEAVE_WINDOW, func)
208 win.Connect(-1, -1, wxEVT_ENTER_WINDOW, func)
209
6d26dc89
RD
210def EVT_MOUSE_CAPTURE_CHANGED(win, func):
211 win.Connect(-1, -1, wxEVT_MOUSE_CAPTURE_CHANGED, func)
212
7bf85405
RD
213# EVT_COMMAND
214def EVT_COMMAND(win, id, cmd, func):
215 win.Connect(id, -1, cmd, func)
216
217def EVT_COMMAND_RANGE(win, id1, id2, cmd, func):
218 win.Connect(id1, id2, cmd, func)
219
26b9cf27 220
7bf85405
RD
221# Scrolling
222def EVT_SCROLL(win, func):
83f3dd45
RD
223 win.Connect(-1, -1, wxEVT_SCROLL_TOP, func)
224 win.Connect(-1, -1, wxEVT_SCROLL_BOTTOM, func)
225 win.Connect(-1, -1, wxEVT_SCROLL_LINEUP, func)
226 win.Connect(-1, -1, wxEVT_SCROLL_LINEDOWN, func)
227 win.Connect(-1, -1, wxEVT_SCROLL_PAGEUP, func)
228 win.Connect(-1, -1, wxEVT_SCROLL_PAGEDOWN, func)
229 win.Connect(-1, -1, wxEVT_SCROLL_THUMBTRACK, func)
26b9cf27 230 win.Connect(-1, -1, wxEVT_SCROLL_THUMBRELEASE,func)
83f3dd45 231 win.Connect(-1, -1, wxEVT_SCROLL_ENDSCROLL, func)
7bf85405
RD
232
233def EVT_SCROLL_TOP(win, func):
234 win.Connect(-1, -1, wxEVT_SCROLL_TOP, func)
235
236def EVT_SCROLL_BOTTOM(win, func):
237 win.Connect(-1, -1, wxEVT_SCROLL_BOTTOM, func)
238
239def EVT_SCROLL_LINEUP(win, func):
240 win.Connect(-1, -1, wxEVT_SCROLL_LINEUP, func)
241
242def EVT_SCROLL_LINEDOWN(win, func):
243 win.Connect(-1, -1, wxEVT_SCROLL_LINEDOWN, func)
244
245def EVT_SCROLL_PAGEUP(win, func):
246 win.Connect(-1, -1, wxEVT_SCROLL_PAGEUP, func)
247
248def EVT_SCROLL_PAGEDOWN(win, func):
249 win.Connect(-1, -1, wxEVT_SCROLL_PAGEDOWN, func)
250
251def EVT_SCROLL_THUMBTRACK(win, func):
252 win.Connect(-1, -1, wxEVT_SCROLL_THUMBTRACK, func)
253
26b9cf27
RD
254def EVT_SCROLL_THUMBRELEASE(win, func):
255 win.Connect(-1, -1, wxEVT_SCROLL_THUMBRELEASE, func)
256
83f3dd45
RD
257def EVT_SCROLL_ENDSCROLL(win, func):
258 win.Connect(-1, -1, wxEVT_SCROLL_ENDSCROLL, func)
259
7bf85405
RD
260
261
262# Scrolling, with an id
263def EVT_COMMAND_SCROLL(win, id, func):
264 win.Connect(id, -1, wxEVT_SCROLL_TOP, func)
265 win.Connect(id, -1, wxEVT_SCROLL_BOTTOM, func)
266 win.Connect(id, -1, wxEVT_SCROLL_LINEUP, func)
267 win.Connect(id, -1, wxEVT_SCROLL_LINEDOWN, func)
268 win.Connect(id, -1, wxEVT_SCROLL_PAGEUP, func)
269 win.Connect(id, -1, wxEVT_SCROLL_PAGEDOWN, func)
270 win.Connect(id, -1, wxEVT_SCROLL_THUMBTRACK,func)
26b9cf27 271 win.Connect(id, -1, wxEVT_SCROLL_THUMBRELEASE,func)
1e4a197e 272 win.Connect(id, -1, wxEVT_SCROLL_ENDSCROLL, func)
7bf85405
RD
273
274def EVT_COMMAND_SCROLL_TOP(win, id, func):
275 win.Connect(id, -1, wxEVT_SCROLL_TOP, func)
276
277def EVT_COMMAND_SCROLL_BOTTOM(win, id, func):
278 win.Connect(id, -1, wxEVT_SCROLL_BOTTOM, func)
279
280def EVT_COMMAND_SCROLL_LINEUP(win, id, func):
281 win.Connect(id, -1, wxEVT_SCROLL_LINEUP, func)
282
283def EVT_COMMAND_SCROLL_LINEDOWN(win, id, func):
284 win.Connect(id, -1, wxEVT_SCROLL_LINEDOWN, func)
285
286def EVT_COMMAND_SCROLL_PAGEUP(win, id, func):
287 win.Connect(id, -1, wxEVT_SCROLL_PAGEUP, func)
288
289def EVT_COMMAND_SCROLL_PAGEDOWN(win, id, func):
290 win.Connect(id, -1, wxEVT_SCROLL_PAGEDOWN, func)
291
292def EVT_COMMAND_SCROLL_THUMBTRACK(win, id, func):
293 win.Connect(id, -1, wxEVT_SCROLL_THUMBTRACK, func)
294
26b9cf27
RD
295def EVT_COMMAND_SCROLL_THUMBRELEASE(win, id, func):
296 win.Connect(id, -1, wxEVT_SCROLL_THUMBRELEASE, func)
297
83f3dd45
RD
298def EVT_COMMAND_SCROLL_ENDSCROLL(win, id, func):
299 win.Connect(id, -1, wxEVT_SCROLL_ENDSCROLL, func)
300
d426c97e
RD
301#---
302def EVT_SCROLLWIN(win, func):
26b9cf27
RD
303 win.Connect(-1, -1, wxEVT_SCROLLWIN_TOP, func)
304 win.Connect(-1, -1, wxEVT_SCROLLWIN_BOTTOM, func)
305 win.Connect(-1, -1, wxEVT_SCROLLWIN_LINEUP, func)
306 win.Connect(-1, -1, wxEVT_SCROLLWIN_LINEDOWN, func)
307 win.Connect(-1, -1, wxEVT_SCROLLWIN_PAGEUP, func)
308 win.Connect(-1, -1, wxEVT_SCROLLWIN_PAGEDOWN, func)
309 win.Connect(-1, -1, wxEVT_SCROLLWIN_THUMBTRACK, func)
310 win.Connect(-1, -1, wxEVT_SCROLLWIN_THUMBRELEASE,func)
d426c97e
RD
311
312def EVT_SCROLLWIN_TOP(win, func):
313 win.Connect(-1, -1, wxEVT_SCROLLWIN_TOP, func)
314
315def EVT_SCROLLWIN_BOTTOM(win, func):
316 win.Connect(-1, -1, wxEVT_SCROLLWIN_BOTTOM, func)
317
318def EVT_SCROLLWIN_LINEUP(win, func):
319 win.Connect(-1, -1, wxEVT_SCROLLWIN_LINEUP, func)
320
321def EVT_SCROLLWIN_LINEDOWN(win, func):
322 win.Connect(-1, -1, wxEVT_SCROLLWIN_LINEDOWN, func)
323
324def EVT_SCROLLWIN_PAGEUP(win, func):
325 win.Connect(-1, -1, wxEVT_SCROLLWIN_PAGEUP, func)
326
327def EVT_SCROLLWIN_PAGEDOWN(win, func):
328 win.Connect(-1, -1, wxEVT_SCROLLWIN_PAGEDOWN, func)
329
330def EVT_SCROLLWIN_THUMBTRACK(win, func):
331 win.Connect(-1, -1, wxEVT_SCROLLWIN_THUMBTRACK, func)
332
26b9cf27
RD
333def EVT_SCROLLWIN_THUMBRELEASE(win, func):
334 win.Connect(-1, -1, wxEVT_SCROLLWIN_THUMBRELEASE, func)
335
d426c97e
RD
336
337
338# Scrolling, with an id
339def EVT_COMMAND_SCROLLWIN(win, id, func):
26b9cf27
RD
340 win.Connect(id, -1, wxEVT_SCROLLWIN_TOP, func)
341 win.Connect(id, -1, wxEVT_SCROLLWIN_BOTTOM, func)
342 win.Connect(id, -1, wxEVT_SCROLLWIN_LINEUP, func)
343 win.Connect(id, -1, wxEVT_SCROLLWIN_LINEDOWN, func)
344 win.Connect(id, -1, wxEVT_SCROLLWIN_PAGEUP, func)
345 win.Connect(id, -1, wxEVT_SCROLLWIN_PAGEDOWN, func)
346 win.Connect(id, -1, wxEVT_SCROLLWIN_THUMBTRACK, func)
347 win.Connect(id, -1, wxEVT_SCROLLWIN_THUMBRELEASE,func)
d426c97e
RD
348
349def EVT_COMMAND_SCROLLWIN_TOP(win, id, func):
350 win.Connect(id, -1, wxEVT_SCROLLWIN_TOP, func)
351
352def EVT_COMMAND_SCROLLWIN_BOTTOM(win, id, func):
353 win.Connect(id, -1, wxEVT_SCROLLWIN_BOTTOM, func)
354
355def EVT_COMMAND_SCROLLWIN_LINEUP(win, id, func):
356 win.Connect(id, -1, wxEVT_SCROLLWIN_LINEUP, func)
357
358def EVT_COMMAND_SCROLLWIN_LINEDOWN(win, id, func):
359 win.Connect(id, -1, wxEVT_SCROLLWIN_LINEDOWN, func)
360
361def EVT_COMMAND_SCROLLWIN_PAGEUP(win, id, func):
362 win.Connect(id, -1, wxEVT_SCROLLWIN_PAGEUP, func)
363
364def EVT_COMMAND_SCROLLWIN_PAGEDOWN(win, id, func):
365 win.Connect(id, -1, wxEVT_SCROLLWIN_PAGEDOWN, func)
366
367def EVT_COMMAND_SCROLLWIN_THUMBTRACK(win, id, func):
368 win.Connect(id, -1, wxEVT_SCROLLWIN_THUMBTRACK, func)
7bf85405 369
26b9cf27
RD
370def EVT_COMMAND_SCROLLWIN_THUMBRELEASE(win, id, func):
371 win.Connect(id, -1, wxEVT_SCROLLWIN_THUMBRELEASE, func)
372
373
7bf85405
RD
374# Convenience commands
375def EVT_BUTTON(win, id, func):
376 win.Connect(id, -1, wxEVT_COMMAND_BUTTON_CLICKED, func)
377
378def EVT_CHECKBOX(win, id, func):
379 win.Connect(id, -1, wxEVT_COMMAND_CHECKBOX_CLICKED, func)
380
381def EVT_CHOICE(win, id, func):
382 win.Connect(id, -1, wxEVT_COMMAND_CHOICE_SELECTED, func)
383
384def EVT_LISTBOX(win, id, func):
385 win.Connect(id, -1, wxEVT_COMMAND_LISTBOX_SELECTED, func)
386
387def EVT_LISTBOX_DCLICK(win, id, func):
388 win.Connect(id, -1, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, func)
389
390def EVT_TEXT(win, id, func):
391 win.Connect(id, -1, wxEVT_COMMAND_TEXT_UPDATED, func)
392
393def EVT_TEXT_ENTER(win, id, func):
394 win.Connect(id, -1, wxEVT_COMMAND_TEXT_ENTER, func)
395
c7e7022c
RD
396def EVT_TEXT_URL(win, id, func):
397 win.Connect(id, -1, wxEVT_COMMAND_TEXT_URL, func)
398
00b6c4e3
RD
399def EVT_TEXT_MAXLEN(win, id, func):
400 win.Connect(id, -1, wxEVT_COMMAND_TEXT_MAXLEN, func)
401
7bf85405
RD
402def EVT_MENU(win, id, func):
403 win.Connect(id, -1, wxEVT_COMMAND_MENU_SELECTED, func)
404
405def EVT_MENU_RANGE(win, id1, id2, func):
406 win.Connect(id1, id2, wxEVT_COMMAND_MENU_SELECTED, func)
407
408def EVT_SLIDER(win, id, func):
409 win.Connect(id, -1, wxEVT_COMMAND_SLIDER_UPDATED, func)
410
411def EVT_RADIOBOX(win, id, func):
412 win.Connect(id, -1, wxEVT_COMMAND_RADIOBOX_SELECTED, func)
413
414def EVT_RADIOBUTTON(win, id, func):
415 win.Connect(id, -1, wxEVT_COMMAND_RADIOBUTTON_SELECTED, func)
416
417def EVT_VLBOX(win, id, func):
418 win.Connect(id, -1, wxEVT_COMMAND_VLBOX_SELECTED, func)
419
420def EVT_COMBOBOX(win, id, func):
421 win.Connect(id, -1, wxEVT_COMMAND_COMBOBOX_SELECTED, func)
422
423def EVT_TOOL(win, id, func):
424 win.Connect(id, -1, wxEVT_COMMAND_TOOL_CLICKED, func)
425
3af4e610
RD
426def EVT_TOOL_RANGE(win, id, id2, func):
427 win.Connect(id, id2, wxEVT_COMMAND_TOOL_CLICKED, func)
428
7bf85405
RD
429def EVT_TOOL_RCLICKED(win, id, func):
430 win.Connect(id, -1, wxEVT_COMMAND_TOOL_RCLICKED, func)
431
3af4e610
RD
432def EVT_TOOL_RCLICKED_RANGE(win, id, id2, func):
433 win.Connect(id, id2, wxEVT_COMMAND_TOOL_RCLICKED, func)
434
7bf85405
RD
435def EVT_TOOL_ENTER(win, id, func):
436 win.Connect(id, -1, wxEVT_COMMAND_TOOL_ENTER, func)
437
438def EVT_CHECKLISTBOX(win, id, func):
439 win.Connect(id, -1, wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, func)
440
3af4e610
RD
441def EVT_SPINCTRL(win, id, func):
442 win.Connect(id, -1, wxEVT_COMMAND_SPINCTRL_UPDATED, func)
443
444
7bf85405
RD
445
446# Generic command events
447
448def EVT_COMMAND_LEFT_CLICK(win, id, func):
449 win.Connect(id, -1, wxEVT_COMMAND_LEFT_CLICK, func)
450
451def EVT_COMMAND_LEFT_DCLICK(win, id, func):
452 win.Connect(id, -1, wxEVT_COMMAND_LEFT_DCLICK, func)
453
454def EVT_COMMAND_RIGHT_CLICK(win, id, func):
455 win.Connect(id, -1, wxEVT_COMMAND_RIGHT_CLICK, func)
456
457def EVT_COMMAND_RIGHT_DCLICK(win, id, func):
458 win.Connect(id, -1, wxEVT_COMMAND_RIGHT_DCLICK, func)
459
460def EVT_COMMAND_SET_FOCUS(win, id, func):
461 win.Connect(id, -1, wxEVT_COMMAND_SET_FOCUS, func)
462
463def EVT_COMMAND_KILL_FOCUS(win, id, func):
464 win.Connect(id, -1, wxEVT_COMMAND_KILL_FOCUS, func)
465
466def EVT_COMMAND_ENTER(win, id, func):
467 win.Connect(id, -1, wxEVT_COMMAND_ENTER, func)
468
469
d5c9047a 470# wxNotebook events
7bf85405
RD
471def EVT_NOTEBOOK_PAGE_CHANGED(win, id, func):
472 win.Connect(id, -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, func)
473
474def EVT_NOTEBOOK_PAGE_CHANGING(win, id, func):
475 win.Connect(id, -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, func)
476
477
b639c3c5 478# wxSpinButton
62bd0874
RD
479def EVT_SPIN_UP(win, id, func):
480 win.Connect(id, -1, wxEVT_SCROLL_LINEUP, func)
481
482def EVT_SPIN_DOWN(win, id, func):
f6bcfd97 483 win.Connect(id, -1, wxEVT_SCROLL_LINEDOWN, func)
62bd0874
RD
484
485def EVT_SPIN(win, id, func):
62bd0874
RD
486 win.Connect(id, -1, wxEVT_SCROLL_THUMBTRACK,func)
487
488
b639c3c5
RD
489# wxTaskBarIcon
490def EVT_TASKBAR_MOVE(win, func):
491 win.Connect(-1, -1, wxEVT_TASKBAR_MOVE, func)
492
493def EVT_TASKBAR_LEFT_DOWN(win, func):
494 win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_DOWN, func)
495
496def EVT_TASKBAR_LEFT_UP(win, func):
497 win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_UP, func)
498
499def EVT_TASKBAR_RIGHT_DOWN(win, func):
500 win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_DOWN, func)
501
502def EVT_TASKBAR_RIGHT_UP(win, func):
503 win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_UP, func)
504
505def EVT_TASKBAR_LEFT_DCLICK(win, func):
506 win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_DCLICK, func)
507
508def EVT_TASKBAR_RIGHT_DCLICK(win, func):
509 win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_DCLICK, func)
510
511
08127323
RD
512# wxSashWindow
513def EVT_SASH_DRAGGED(win, id, func):
514 win.Connect(id, -1, wxEVT_SASH_DRAGGED, func)
515
516def EVT_SASH_DRAGGED_RANGE(win, id1, id2, func):
517 win.Connect(id1, id2, wxEVT_SASH_DRAGGED, func)
518
519def EVT_QUERY_LAYOUT_INFO(win, func):
1fded56b 520 win.Connect(-1, -1, wxEVT_QUERY_LAYOUT_INFO, func)
08127323
RD
521
522def EVT_CALCULATE_LAYOUT(win, func):
1fded56b 523 win.Connect(-1, -1, wxEVT_CALCULATE_LAYOUT, func)
08127323
RD
524
525
bb0054cd
RD
526#wxSplitterWindow
527def EVT_SPLITTER_SASH_POS_CHANGING(win, id, func):
528 win.Connect(id, -1, wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, func)
529
530def EVT_SPLITTER_SASH_POS_CHANGED(win, id, func):
531 win.Connect(id, -1, wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, func)
532
533def EVT_SPLITTER_UNSPLIT(win, id, func):
534 win.Connect(id, -1, wxEVT_COMMAND_SPLITTER_UNSPLIT, func)
535
536def EVT_SPLITTER_DOUBLECLICKED(win, id, func):
537 win.Connect(id, -1, wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, func)
538
b639c3c5 539
f6bcfd97
BP
540# wxTimer
541def EVT_TIMER(win, id, func):
542 win.Connect(id, -1, wxEVT_TIMER, func)
543
c368d904
RD
544# wxProcess
545def EVT_END_PROCESS(eh, id, func):
546 eh.Connect(id, -1, wxEVT_END_PROCESS, func)
f6bcfd97 547
185d7c3e
RD
548
549# wxJoyStick
550def EVT_JOY_DOWN(win, func):
ac346f50 551 win.Connect(-1, -1, wxEVT_JOY_BUTTON_DOWN, func)
185d7c3e
RD
552
553def EVT_JOY_UP(win, func):
ac346f50 554 win.Connect(-1, -1, wxEVT_JOY_BUTTON_UP, func)
185d7c3e
RD
555
556def EVT_JOY_MOVE(win, func):
557 win.Connect(-1, -1, wxEVT_JOY_MOVE, func)
558
559def EVT_JOY_ZMOVE(win, func):
560 win.Connect(-1, -1, wxEVT_JOY_ZMOVE, func)
561
562def EVT_JOYSTICK_EVENTS(win, func):
ac346f50
RD
563 win.Connect(-1, -1, wxEVT_JOY_BUTTON_DOWN, func)
564 win.Connect(-1, -1, wxEVT_JOY_BUTTON_UP, func)
185d7c3e
RD
565 win.Connect(-1, -1, wxEVT_JOY_MOVE, func)
566 win.Connect(-1, -1, wxEVT_JOY_ZMOVE, func)
567
d1679124
RD
568
569def EVT_TOGGLEBUTTON(win, id, func):
570 win.Connect(id, -1, wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, func)
571
572
4f3449b4 573
4f3449b4
RD
574def EVT_CONTEXT_MENU(win, func):
575 win.Connect(-1, -1, wxEVT_CONTEXT_MENU, func)
576
577
9c039d08 578#----------------------------------------------------------------------
7bf85405
RD
579
580class wxTimer(wxPyTimer):
185d7c3e
RD
581 def __init__(self, evtHandler = None, id = -1):
582 if evtHandler is None:
583 wxPyTimer.__init__(self, self.Notify) # derived class must provide
584 # Notify(self) method.
585 else:
586 wxPyTimer.__init__(self, None)
587 self.SetOwner(evtHandler, id)
7bf85405 588
7bf85405
RD
589#----------------------------------------------------------------------
590# aliases
591
b639c3c5 592wxColor = wxColour
7bf85405 593wxNamedColor = wxNamedColour
ecc08ead 594wxPen = wxPyPen
293a0a86 595wxScrollbar = wxScrollBar
1e4a197e
RD
596wxPoint2D = wxPoint2DDouble
597
598wxPyAssertionError = wxc.wxPyAssertionError
293a0a86 599
af309447 600
6999b0d8 601# backwards compatibility
1e4a197e
RD
602wxNoRefBitmap = wxBitmap
603wxPyDefaultPosition = wxDefaultPosition
604wxPyDefaultSize = wxDefaultSize
605NULL = None
68320e40
RD
606wxSystemSettings_GetSystemColour = wxSystemSettings_GetColour
607wxSystemSettings_GetSystemFont = wxSystemSettings_GetFont
608wxSystemSettings_GetSystemMetric = wxSystemSettings_GetMetric
00b6c4e3 609
1e4a197e
RD
610
611# workarounds for bad wxRTTI names
612__wxPyPtrTypeMap['wxGauge95'] = 'wxGauge'
1fded56b
RD
613__wxPyPtrTypeMap['wxSlider95'] = 'wxSlider'
614__wxPyPtrTypeMap['wxStatusBar95'] = 'wxStatusBar'
1e4a197e
RD
615
616
617
618def NewId():
619 import warnings
620 warnings.warn("Use wxNewId instead", DeprecationWarning, 2)
621 return wxNewId()
622
623def RegisterId(ID):
624 import warnings
625 warnings.warn("Use wxRegisterId instead", DeprecationWarning, 2)
626 return wxRegisterId(ID)
627
628
629
630# Use Python's bool constants if available, make aliases if not
631try:
632 True
633except NameError:
634 True = 1==1
635 False = 1==0
636
637# Backwards compaatible
638TRUE = true = True
639FALSE = false = False
640
641
a3fbed81 642#----------------------------------------------------------------------
00b6c4e3
RD
643# wxGTK sets the locale when initialized. Doing this at the Python
644# level should set it up to match what GTK is doing at the C level.
293a0a86
RD
645if wxPlatform == "__WXGTK__":
646 try:
647 import locale
648 locale.setlocale(locale.LC_ALL, "")
649 except:
650 pass
00b6c4e3 651
1fded56b
RD
652# On MSW add the directory where the wxWindows catalogs were installed
653# to the default catalog path.
1e4a197e
RD
654if wxPlatform == "__WXMSW__":
655 import os
656 localedir = os.path.join(os.path.split(__file__)[0], "locale")
657 wxLocale_AddCatalogLookupPathPrefix(localedir)
658 del os
a3fbed81
RD
659
660#----------------------------------------------------------------------
1fded56b
RD
661# Load version numbers from __version__... Ensure that major and minor
662# versions are the same for both wxPython and wxWindows.
a3fbed81 663
1fded56b
RD
664from wxPython.__version__ import *
665__version__ = wxVERSION_STRING
a3fbed81 666
1fded56b
RD
667assert wxMAJOR_VERSION == wxc.wxMAJOR_VERSION, "wxPython/wxWindows version mismatch"
668assert wxMINOR_VERSION == wxc.wxMINOR_VERSION, "wxPython/wxWindows version mismatch"
669if wxRELEASE_VERSION != wxc.wxRELEASE_VERSION:
670 import warnings
671 warnings.warn("wxPython/wxWindows release number mismatch")
a3fbed81
RD
672
673
8bf5d46e
RD
674#----------------------------------------------------------------------
675# This helper function will take a wxPython object and convert it to
676# another wxPython object type. This will not be able to create objects
7bcd390c 677# that are derived from wxPython classes by the user, only those that are
8bf5d46e
RD
678# actually part of wxPython and directly corespond to C++ objects.
679#
680# This is useful in situations where some method returns a generic
681# type such as wxWindow, but you know that it is actually some
682# derived type such as a wxTextCtrl. You can't call wxTextCtrl specific
683# methods on a wxWindow object, but you can use this function to
684# create a wxTextCtrl object that will pass the same pointer to
685# the C++ code. You use it like this:
686#
687# textCtrl = wxPyTypeCast(window, "wxTextCtrl")
688#
689#
690# WARNING: Using this function to type cast objects into types that
691# they are not is not recommended and is likely to cause your
692# program to crash... Hard.
693#
694
695def wxPyTypeCast(obj, typeStr):
83b18bab
RD
696 if obj is None:
697 return None
9416aa89
RD
698 theClass = globals()[typeStr+"Ptr"]
699 typeStr = __wxPyPtrTypeMap.get(typeStr, typeStr)
8bf5d46e 700 if hasattr(obj, "this"):
2aab8f16
RD
701 # if already the right type then just return it
702 if isinstance(obj, theClass) or obj.__class__ is theClass:
9416aa89 703 return obj
8bf5d46e
RD
704 newPtr = ptrcast(obj.this, typeStr+"_p")
705 else:
706 newPtr = ptrcast(obj, typeStr+"_p")
8bf5d46e 707 theObj = theClass(newPtr)
6999b0d8
RD
708 if hasattr(obj, "this"):
709 theObj.thisown = obj.thisown
8bf5d46e
RD
710 return theObj
711
1e4a197e
RD
712#----------------------------------------------------------------------------
713# An isinstance for Pythons < 2.2 that can check a sequence of class objects
714# like the one in 2.2 can.
715
716def wxPy_isinstance(obj, klasses):
717 import types
718 if sys.version[:3] < "2.2" and type(klasses) in [types.TupleType, types.ListType]:
719 for klass in klasses:
720 if isinstance(obj, klass): return True
721 return False
722 else:
723 return isinstance(obj, klasses)
8bf5d46e 724
4acff284 725#----------------------------------------------------------------------------
72797a7d
RD
726_wxCallAfterId = None
727
728def wxCallAfter(callable, *args, **kw):
729 """
730 Call the specified function after the current and pending event
c2dac736
RD
731 handlers have been completed. This is also good for making GUI
732 method calls from non-GUI threads.
72797a7d
RD
733 """
734 app = wxGetApp()
735 assert app, 'No wxApp created yet'
736
737 global _wxCallAfterId
738 if _wxCallAfterId is None:
1542ea39 739 _wxCallAfterId = wxNewEventType()
72797a7d 740 app.Connect(-1, -1, _wxCallAfterId,
1fded56b 741 lambda event: event.callable(*event.args, **event.kw) )
72797a7d
RD
742 evt = wxPyEvent()
743 evt.SetEventType(_wxCallAfterId)
744 evt.callable = callable
745 evt.args = args
746 evt.kw = kw
747 wxPostEvent(app, evt)
748
1fded56b
RD
749
750#----------------------------------------------------------------------
751
752
753class wxFutureCall:
754 """
755 A convenience class for wxTimer, that calls the given callable
756 object once after the given amount of milliseconds, passing any
757 positional or keyword args. The return value of the callable is
758 availbale after it has been run with the GetResult method.
759
760 If you don't need to get the return value or restart the timer
761 then there is no need to hold a reference to this object. It will
762 hold a reference to itself while the timer is running (the timer
763 has a reference to self.Notify) but the cycle will be broken when
764 the timer completes, automatically cleaning up the wxFutureCall
765 object.
766 """
767 def __init__(self, millis, callable, *args, **kwargs):
768 self.millis = millis
769 self.callable = callable
770 self.SetArgs(*args, **kwargs)
771 self.runCount = 0
772 self.hasRun = False
773 self.result = None
774 self.timer = None
775 self.Start()
776
777 def __del__(self):
778 self.Stop()
779
780
781 def Start(self, millis=None):
782 """
783 (Re)start the timer
784 """
785 self.hasRun = False
786 if millis is not None:
787 self.millis = millis
788 self.Stop()
789 self.timer = wxPyTimer(self.Notify)
790 self.timer.Start(self.millis, wxTIMER_ONE_SHOT)
791 Restart = Start
792
793
794 def Stop(self):
795 """
796 Stop and destroy the timer.
797 """
798 if self.timer is not None:
799 self.timer.Stop()
800 self.timer = None
801
802
803 def GetInterval(self):
804 if self.timer is not None:
805 return self.timer.GetInterval()
806 else:
807 return 0
808
809
810 def IsRunning(self):
811 return self.timer is not None and self.timer.IsRunning()
812
813
814 def SetArgs(self, *args, **kwargs):
815 """
816 (Re)set the args passed to the callable object. This is
817 useful in conjunction with Restart if you want to schedule a
818 new call to the same callable object but with different
819 parameters.
820 """
821 self.args = args
822 self.kwargs = kwargs
823
824 def HasRun(self):
825 return self.hasRun
826
827 def GetResult(self):
828 return self.result
829
830 def Notify(self):
831 """
832 The timer has expired so call the callable.
833 """
834 if self.callable and getattr(self.callable, 'im_self', True):
835 self.runCount += 1
836 self.result = self.callable(*self.args, **self.kwargs)
837 self.hasRun = True
838 wxCallAfter(self.Stop)
839
1e4a197e 840
72797a7d 841#----------------------------------------------------------------------
4acff284 842
7cdaed0b
RD
843class wxPyDeadObjectError(AttributeError):
844 pass
4acff284
RD
845
846class _wxPyDeadObject:
847 """
848 Instances of wx objects that are OOR capable will have their __class__
849 changed to this class when the C++ object is deleted. This should help
850 prevent crashes due to referencing a bogus C++ pointer.
851 """
7cdaed0b 852 reprStr = "wxPython wrapper for DELETED %s object! (The C++ object no longer exists.)"
fc51b8c3 853 attrStr = "The C++ part of the %s object has been deleted, attribute access no longer allowed."
7cdaed0b 854
4acff284
RD
855 def __repr__( self ):
856 if not hasattr(self, "_name"):
857 self._name = "[unknown]"
7cdaed0b 858 return self.reprStr % self._name
4acff284
RD
859
860 def __getattr__( self, *args ):
861 if not hasattr(self, "_name"):
862 self._name = "[unknown]"
7cdaed0b
RD
863 raise wxPyDeadObjectError( self.attrStr % self._name )
864
865 def __nonzero__(self):
866 return 0
4acff284
RD
867
868
1fded56b
RD
869#----------------------------------------------------------------------
870
871class wxNotebookPage(wxPanel):
872 """
873 There is an old (and apparently unsolvable) bug when placing a
874 window with a nonstandard background colour in a wxNotebook on
875 wxGTK, as the notbooks's background colour would always be used
876 when the window is refreshed. The solution is to place a panel in
877 the notbook and the coloured window on the panel, sized to cover
878 the panel. This simple class does that for you, just put an
879 instance of this in the notebook and make your regular window a
880 child of this one and it will handle the resize for you.
881 """
882 def __init__(self, parent, id=-1,
883 pos=wxDefaultPosition, size=wxDefaultSize,
884 style=wxTAB_TRAVERSAL, name="panel"):
885 wxPanel.__init__(self, parent, id, pos, size, style, name)
886 self.child = None
887 EVT_SIZE(self, self.OnSize)
888 def OnSize(self, evt):
889 if self.child is None:
890 children = self.GetChildren()
891 if len(children):
892 self.child = children[0]
893 if self.child:
894 self.child.SetPosition((0,0))
895 self.child.SetSize(self.GetSize())
896
897
c856d372 898#----------------------------------------------------------------------
7bf85405
RD
899#----------------------------------------------------------------------
900
2f90df85
RD
901class wxPyOnDemandOutputWindow:
902 def __init__(self, title = "wxPython: stdout/stderr"):
903 self.frame = None
904 self.title = title
c856d372 905 self.parent = None
2f90df85
RD
906
907 def SetParent(self, parent):
908 self.parent = parent
cf694132 909
2f90df85
RD
910 def OnCloseWindow(self, event):
911 if self.frame != None:
912 self.frame.Destroy()
913 self.frame = None
914 self.text = None
7bf85405 915
6e18ca6c 916 # These methods provide the file-like output behaviour.
2f90df85 917 def write(self, str):
6e18ca6c
RD
918 if not wxThread_IsMain():
919 # Aquire the GUI mutex before making GUI calls. Mutex is released
03a2c062 920 # when locker is deleted at the end of this function.
6e18ca6c
RD
921 locker = wxMutexGuiLocker()
922
2f90df85 923 if not self.frame:
03a2c062
RD
924 self.frame = wxFrame(self.parent, -1, self.title,
925 style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
2f90df85
RD
926 self.text = wxTextCtrl(self.frame, -1, "",
927 style = wxTE_MULTILINE|wxTE_READONLY)
928 self.frame.SetSize(wxSize(450, 300))
1e4a197e 929 self.frame.Show(True)
2f90df85
RD
930 EVT_CLOSE(self.frame, self.OnCloseWindow)
931 self.text.AppendText(str)
932
933 def close(self):
a1df7a95 934 if self.frame != None:
6e18ca6c
RD
935 if not wxThread_IsMain():
936 locker = wxMutexGuiLocker()
c856d372 937 self.frame.Close()
7bf85405 938
7bf85405 939
606d919c 940_defRedirect = (wxPlatform == '__WXMSW__' or wxPlatform == '__WXMAC__')
7bf85405
RD
941
942#----------------------------------------------------------------------
943# The main application class. Derive from this and implement an OnInit
944# method that creates a frame and then calls self.SetTopWindow(frame)
945
946class wxApp(wxPyApp):
947 error = 'wxApp.error'
2f90df85 948 outputWindowClass = wxPyOnDemandOutputWindow
7bf85405 949
1e4a197e 950 def __init__(self, redirect=_defRedirect, filename=None, useBestVisual=False):
7bf85405 951 wxPyApp.__init__(self)
1fded56b
RD
952
953 if wx.wxPlatform == "__WXMAC__":
954 try:
955 import MacOS
956 if not MacOS.WMAvailable():
957 print """This program needs access to the screen. Please run with
958'pythonw', not 'python', and only when you are logged in on the main display
959of your Mac."""
960 sys.exit(1)
961 except:
962 pass
963
7bf85405
RD
964 self.stdioWin = None
965 self.saveStdio = (sys.stdout, sys.stderr)
1e4a197e
RD
966
967 # This has to be done before OnInit
968 self.SetUseBestVisual(useBestVisual)
969
7bf85405
RD
970 if redirect:
971 self.RedirectStdio(filename)
1e4a197e 972
7bf85405
RD
973 # this initializes wxWindows and then calls our OnInit
974 _wxStart(self.OnInit)
975
976
977 def __del__(self):
978 try:
979 self.RestoreStdio()
980 except:
981 pass
982
2f90df85
RD
983
984 def SetTopWindow(self, frame):
985 if self.stdioWin:
986 self.stdioWin.SetParent(frame)
2f90df85
RD
987 wxPyApp.SetTopWindow(self, frame)
988
a1df7a95 989
2f90df85
RD
990 def MainLoop(self):
991 wxPyApp.MainLoop(self)
992 self.RestoreStdio()
993
a1df7a95 994
7bf85405
RD
995 def RedirectStdio(self, filename):
996 if filename:
997 sys.stdout = sys.stderr = open(filename, 'a')
998 else:
1e4a197e 999 self.stdioWin = self.outputWindowClass()
c856d372 1000 sys.stdout = sys.stderr = self.stdioWin
7bf85405 1001
a1df7a95 1002
7bf85405
RD
1003 def RestoreStdio(self):
1004 sys.stdout, sys.stderr = self.saveStdio
c856d372 1005
7bf85405 1006
1e4a197e
RD
1007# change from wxPyApp_ to wxApp_
1008wxApp_GetMacDefaultEncodingIsPC = wxc.wxPyApp_GetMacDefaultEncodingIsPC
1009wxApp_GetMacSupportPCMenuShortcuts = wxc.wxPyApp_GetMacSupportPCMenuShortcuts
1010wxApp_GetMacAboutMenuItemId = wxc.wxPyApp_GetMacAboutMenuItemId
1011wxApp_GetMacPreferencesMenuItemId = wxc.wxPyApp_GetMacPreferencesMenuItemId
1012wxApp_GetMacExitMenuItemId = wxc.wxPyApp_GetMacExitMenuItemId
1013wxApp_GetMacHelpMenuTitleName = wxc.wxPyApp_GetMacHelpMenuTitleName
1014wxApp_SetMacDefaultEncodingIsPC = wxc.wxPyApp_SetMacDefaultEncodingIsPC
1015wxApp_SetMacSupportPCMenuShortcuts = wxc.wxPyApp_SetMacSupportPCMenuShortcuts
1016wxApp_SetMacAboutMenuItemId = wxc.wxPyApp_SetMacAboutMenuItemId
1017wxApp_SetMacPreferencesMenuItemId = wxc.wxPyApp_SetMacPreferencesMenuItemId
1018wxApp_SetMacExitMenuItemId = wxc.wxPyApp_SetMacExitMenuItemId
1019wxApp_SetMacHelpMenuTitleName = wxc.wxPyApp_SetMacHelpMenuTitleName
1020
1021
6999b0d8
RD
1022#----------------------------------------------------------------------------
1023
1024class wxPySimpleApp(wxApp):
83b18bab
RD
1025 def __init__(self, flag=0):
1026 wxApp.__init__(self, flag)
6999b0d8 1027 def OnInit(self):
3fce70fb 1028 wxInitAllImageHandlers()
1e4a197e 1029 return True
7bf85405 1030
2f90df85 1031
f6bcfd97
BP
1032class wxPyWidgetTester(wxApp):
1033 def __init__(self, size = (250, 100)):
1034 self.size = size
1035 wxApp.__init__(self, 0)
1036
1037 def OnInit(self):
1038 self.frame = wxFrame(None, -1, "Widget Tester", pos=(0,0), size=self.size)
1039 self.SetTopWindow(self.frame)
1e4a197e 1040 return True
f6bcfd97
BP
1041
1042 def SetWidget(self, widgetClass, *args):
1fded56b 1043 w = widgetClass(self.frame, *args)
1e4a197e 1044 self.frame.Show(True)
f6bcfd97 1045
7bf85405 1046#----------------------------------------------------------------------------
4acff284
RD
1047# DO NOT hold any other references to this object. This is how we
1048# know when to cleanup system resources that wxWin is holding. When
1049# the sys module is unloaded, the refcount on sys.__wxPythonCleanup
1050# goes to zero and it calls the wxApp_CleanUp function.
b1462dfa 1051
c0fbf24b
RD
1052class __wxPyCleanup:
1053 def __init__(self):
1054 self.cleanup = wxc.wxApp_CleanUp
1055 def __del__(self):
1056 self.cleanup()
1057
1058sys.__wxPythonCleanup = __wxPyCleanup()
1059
ef2060fa 1060## # another possible solution, but it gets called too early...
c0fbf24b
RD
1061## if sys.version[0] == '2':
1062## import atexit
1063## atexit.register(wxc.wxApp_CleanUp)
1064## else:
1065## sys.exitfunc = wxc.wxApp_CleanUp
b1462dfa 1066
9416aa89
RD
1067
1068#----------------------------------------------------------------------------
8bf5d46e 1069#----------------------------------------------------------------------------