]> git.saurik.com Git - wxWidgets.git/blob - wxPython/src/_extras.py
Added bakefile for the OGL contrib
[wxWidgets.git] / wxPython / src / _extras.py
1 #----------------------------------------------------------------------------
2 # Name: _extra.py
3 # Purpose: This file is appended to the shadow class file generated
4 # by SWIG. We add some unSWIGable things here.
5 #
6 # Author: Robin Dunn
7 #
8 # Created: 6/30/97
9 # Copyright: (c) 1998 by Total Control Software
10 # Licence: wxWindows license
11 #----------------------------------------------------------------------------
12
13 import 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
26 def _checkForCallback(obj, name, event, theID=-1):
27 try: cb = getattr(obj, name)
28 except: pass
29 else: obj.Connect(theID, -1, event, cb)
30
31
32 #----------------------------------------------------------------------
33 #----------------------------------------------------------------------
34 # functions that look and act like the C++ Macros of the same name
35
36
37 # Miscellaneous
38 def EVT_SIZE(win, func):
39 win.Connect(-1, -1, wxEVT_SIZE, func)
40
41 def EVT_MOVE(win, func):
42 win.Connect(-1, -1, wxEVT_MOVE, func)
43
44 def EVT_CLOSE(win, func):
45 win.Connect(-1, -1, wxEVT_CLOSE_WINDOW, func)
46
47 def EVT_PAINT(win, func):
48 win.Connect(-1, -1, wxEVT_PAINT, func)
49
50 def EVT_ERASE_BACKGROUND(win, func):
51 win.Connect(-1, -1, wxEVT_ERASE_BACKGROUND, func)
52
53 def EVT_CHAR(win, func):
54 win.Connect(-1, -1, wxEVT_CHAR, func)
55
56 def EVT_CHAR_HOOK(win, func):
57 win.Connect(-1, -1, wxEVT_CHAR_HOOK, func)
58
59 def EVT_KEY_DOWN(win, func):
60 win.Connect(-1, -1, wxEVT_KEY_DOWN, func)
61
62 def EVT_KEY_UP(win, func):
63 win.Connect(-1, -1, wxEVT_KEY_UP, func)
64
65 def EVT_MENU_OPEN(win, func):
66 win.Connect(-1, -1, wxEVT_MENU_OPEN, func)
67
68 def EVT_MENU_CLOSE(win, func):
69 win.Connect(-1, -1, wxEVT_MENU_CLOSE, func)
70
71 def EVT_MENU_HIGHLIGHT(win, id, func):
72 win.Connect(id, -1, wxEVT_MENU_HIGHLIGHT, func)
73
74 def EVT_MENU_HIGHLIGHT_ALL(win, func):
75 win.Connect(-1, -1, wxEVT_MENU_HIGHLIGHT, func)
76
77 def EVT_SET_FOCUS(win, func):
78 win.Connect(-1, -1, wxEVT_SET_FOCUS, func)
79
80 def EVT_KILL_FOCUS(win, func):
81 win.Connect(-1, -1, wxEVT_KILL_FOCUS, func)
82
83 def EVT_CHILD_FOCUS(win, func):
84 win.Connect(-1, -1, wxEVT_CHILD_FOCUS, func)
85
86 def EVT_ACTIVATE(win, func):
87 win.Connect(-1, -1, wxEVT_ACTIVATE, func)
88
89 def EVT_ACTIVATE_APP(win, func):
90 win.Connect(-1, -1, wxEVT_ACTIVATE_APP, func)
91
92 def EVT_END_SESSION(win, func):
93 win.Connect(-1, -1, wxEVT_END_SESSION, func)
94
95 def EVT_QUERY_END_SESSION(win, func):
96 win.Connect(-1, -1, wxEVT_QUERY_END_SESSION, func)
97
98 def EVT_DROP_FILES(win, func):
99 win.Connect(-1, -1, wxEVT_DROP_FILES, func)
100
101 def EVT_INIT_DIALOG(win, func):
102 win.Connect(-1, -1, wxEVT_INIT_DIALOG, func)
103
104 def EVT_SYS_COLOUR_CHANGED(win, func):
105 win.Connect(-1, -1, wxEVT_SYS_COLOUR_CHANGED, func)
106
107 def EVT_DISPLAY_CHANGED(win, func):
108 win.Connect(-1, -1, wxEVT_DISPLAY_CHANGED, func)
109
110 def EVT_SHOW(win, func):
111 win.Connect(-1, -1, wxEVT_SHOW, func)
112
113 def EVT_MAXIMIZE(win, func):
114 win.Connect(-1, -1, wxEVT_MAXIMIZE, func)
115
116 def EVT_ICONIZE(win, func):
117 win.Connect(-1, -1, wxEVT_ICONIZE, func)
118
119 def EVT_NAVIGATION_KEY(win, func):
120 win.Connect(-1, -1, wxEVT_NAVIGATION_KEY, func)
121
122 def EVT_PALETTE_CHANGED(win, func):
123 win.Connect(-1, -1, wxEVT_PALETTE_CHANGED, func)
124
125 def EVT_QUERY_NEW_PALETTE(win, func):
126 win.Connect(-1, -1, wxEVT_QUERY_NEW_PALETTE, func)
127
128 def EVT_WINDOW_CREATE(win, func):
129 win.Connect(-1, -1, wxEVT_CREATE, func)
130
131 def EVT_WINDOW_DESTROY(win, func):
132 win.Connect(-1, -1, wxEVT_DESTROY, func)
133
134 def EVT_WINDOW_CREATE_ID(win, id, func):
135 win.Connect(id, -1, wxEVT_CREATE, func)
136
137 def EVT_WINDOW_DESTROY_ID(win, id, func):
138 win.Connect(id, -1, wxEVT_DESTROY, func)
139
140 def EVT_SET_CURSOR(win, func):
141 win.Connect(-1, -1, wxEVT_SET_CURSOR, func)
142
143
144
145 def EVT_IDLE(win, func):
146 win.Connect(-1, -1, wxEVT_IDLE, func)
147
148 def EVT_UPDATE_UI(win, id, func):
149 win.Connect(id, -1, wxEVT_UPDATE_UI, func)
150
151 def EVT_UPDATE_UI_RANGE(win, id, id2, func):
152 win.Connect(id, id2, wxEVT_UPDATE_UI, func)
153
154
155 # Mouse Events
156 def EVT_LEFT_DOWN(win, func):
157 win.Connect(-1, -1, wxEVT_LEFT_DOWN, func)
158
159 def EVT_LEFT_UP(win, func):
160 win.Connect(-1, -1, wxEVT_LEFT_UP, func)
161
162 def EVT_MIDDLE_DOWN(win, func):
163 win.Connect(-1, -1, wxEVT_MIDDLE_DOWN, func)
164
165 def EVT_MIDDLE_UP(win, func):
166 win.Connect(-1, -1, wxEVT_MIDDLE_UP, func)
167
168 def EVT_RIGHT_DOWN(win, func):
169 win.Connect(-1, -1, wxEVT_RIGHT_DOWN, func)
170
171 def EVT_RIGHT_UP(win, func):
172 win.Connect(-1, -1, wxEVT_RIGHT_UP, func)
173
174 def EVT_MOTION(win, func):
175 win.Connect(-1, -1, wxEVT_MOTION, func)
176
177 def EVT_LEFT_DCLICK(win, func):
178 win.Connect(-1, -1, wxEVT_LEFT_DCLICK, func)
179
180 def EVT_MIDDLE_DCLICK(win, func):
181 win.Connect(-1, -1, wxEVT_MIDDLE_DCLICK, func)
182
183 def EVT_RIGHT_DCLICK(win, func):
184 win.Connect(-1, -1, wxEVT_RIGHT_DCLICK, func)
185
186 def EVT_LEAVE_WINDOW(win, func):
187 win.Connect(-1, -1, wxEVT_LEAVE_WINDOW, func)
188
189 def EVT_ENTER_WINDOW(win, func):
190 win.Connect(-1, -1, wxEVT_ENTER_WINDOW, func)
191
192 def EVT_MOUSEWHEEL(win, func):
193 win.Connect(-1, -1, wxEVT_MOUSEWHEEL, func)
194
195 # all mouse events
196 def 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
210 def EVT_MOUSE_CAPTURE_CHANGED(win, func):
211 win.Connect(-1, -1, wxEVT_MOUSE_CAPTURE_CHANGED, func)
212
213 # EVT_COMMAND
214 def EVT_COMMAND(win, id, cmd, func):
215 win.Connect(id, -1, cmd, func)
216
217 def EVT_COMMAND_RANGE(win, id1, id2, cmd, func):
218 win.Connect(id1, id2, cmd, func)
219
220
221 # Scrolling
222 def EVT_SCROLL(win, func):
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)
230 win.Connect(-1, -1, wxEVT_SCROLL_THUMBRELEASE,func)
231 win.Connect(-1, -1, wxEVT_SCROLL_ENDSCROLL, func)
232
233 def EVT_SCROLL_TOP(win, func):
234 win.Connect(-1, -1, wxEVT_SCROLL_TOP, func)
235
236 def EVT_SCROLL_BOTTOM(win, func):
237 win.Connect(-1, -1, wxEVT_SCROLL_BOTTOM, func)
238
239 def EVT_SCROLL_LINEUP(win, func):
240 win.Connect(-1, -1, wxEVT_SCROLL_LINEUP, func)
241
242 def EVT_SCROLL_LINEDOWN(win, func):
243 win.Connect(-1, -1, wxEVT_SCROLL_LINEDOWN, func)
244
245 def EVT_SCROLL_PAGEUP(win, func):
246 win.Connect(-1, -1, wxEVT_SCROLL_PAGEUP, func)
247
248 def EVT_SCROLL_PAGEDOWN(win, func):
249 win.Connect(-1, -1, wxEVT_SCROLL_PAGEDOWN, func)
250
251 def EVT_SCROLL_THUMBTRACK(win, func):
252 win.Connect(-1, -1, wxEVT_SCROLL_THUMBTRACK, func)
253
254 def EVT_SCROLL_THUMBRELEASE(win, func):
255 win.Connect(-1, -1, wxEVT_SCROLL_THUMBRELEASE, func)
256
257 def EVT_SCROLL_ENDSCROLL(win, func):
258 win.Connect(-1, -1, wxEVT_SCROLL_ENDSCROLL, func)
259
260
261
262 # Scrolling, with an id
263 def 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)
271 win.Connect(id, -1, wxEVT_SCROLL_THUMBRELEASE,func)
272 win.Connect(id, -1, wxEVT_SCROLL_ENDSCROLL, func)
273
274 def EVT_COMMAND_SCROLL_TOP(win, id, func):
275 win.Connect(id, -1, wxEVT_SCROLL_TOP, func)
276
277 def EVT_COMMAND_SCROLL_BOTTOM(win, id, func):
278 win.Connect(id, -1, wxEVT_SCROLL_BOTTOM, func)
279
280 def EVT_COMMAND_SCROLL_LINEUP(win, id, func):
281 win.Connect(id, -1, wxEVT_SCROLL_LINEUP, func)
282
283 def EVT_COMMAND_SCROLL_LINEDOWN(win, id, func):
284 win.Connect(id, -1, wxEVT_SCROLL_LINEDOWN, func)
285
286 def EVT_COMMAND_SCROLL_PAGEUP(win, id, func):
287 win.Connect(id, -1, wxEVT_SCROLL_PAGEUP, func)
288
289 def EVT_COMMAND_SCROLL_PAGEDOWN(win, id, func):
290 win.Connect(id, -1, wxEVT_SCROLL_PAGEDOWN, func)
291
292 def EVT_COMMAND_SCROLL_THUMBTRACK(win, id, func):
293 win.Connect(id, -1, wxEVT_SCROLL_THUMBTRACK, func)
294
295 def EVT_COMMAND_SCROLL_THUMBRELEASE(win, id, func):
296 win.Connect(id, -1, wxEVT_SCROLL_THUMBRELEASE, func)
297
298 def EVT_COMMAND_SCROLL_ENDSCROLL(win, id, func):
299 win.Connect(id, -1, wxEVT_SCROLL_ENDSCROLL, func)
300
301 #---
302 def EVT_SCROLLWIN(win, func):
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)
311
312 def EVT_SCROLLWIN_TOP(win, func):
313 win.Connect(-1, -1, wxEVT_SCROLLWIN_TOP, func)
314
315 def EVT_SCROLLWIN_BOTTOM(win, func):
316 win.Connect(-1, -1, wxEVT_SCROLLWIN_BOTTOM, func)
317
318 def EVT_SCROLLWIN_LINEUP(win, func):
319 win.Connect(-1, -1, wxEVT_SCROLLWIN_LINEUP, func)
320
321 def EVT_SCROLLWIN_LINEDOWN(win, func):
322 win.Connect(-1, -1, wxEVT_SCROLLWIN_LINEDOWN, func)
323
324 def EVT_SCROLLWIN_PAGEUP(win, func):
325 win.Connect(-1, -1, wxEVT_SCROLLWIN_PAGEUP, func)
326
327 def EVT_SCROLLWIN_PAGEDOWN(win, func):
328 win.Connect(-1, -1, wxEVT_SCROLLWIN_PAGEDOWN, func)
329
330 def EVT_SCROLLWIN_THUMBTRACK(win, func):
331 win.Connect(-1, -1, wxEVT_SCROLLWIN_THUMBTRACK, func)
332
333 def EVT_SCROLLWIN_THUMBRELEASE(win, func):
334 win.Connect(-1, -1, wxEVT_SCROLLWIN_THUMBRELEASE, func)
335
336
337
338 # Scrolling, with an id
339 def EVT_COMMAND_SCROLLWIN(win, id, func):
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)
348
349 def EVT_COMMAND_SCROLLWIN_TOP(win, id, func):
350 win.Connect(id, -1, wxEVT_SCROLLWIN_TOP, func)
351
352 def EVT_COMMAND_SCROLLWIN_BOTTOM(win, id, func):
353 win.Connect(id, -1, wxEVT_SCROLLWIN_BOTTOM, func)
354
355 def EVT_COMMAND_SCROLLWIN_LINEUP(win, id, func):
356 win.Connect(id, -1, wxEVT_SCROLLWIN_LINEUP, func)
357
358 def EVT_COMMAND_SCROLLWIN_LINEDOWN(win, id, func):
359 win.Connect(id, -1, wxEVT_SCROLLWIN_LINEDOWN, func)
360
361 def EVT_COMMAND_SCROLLWIN_PAGEUP(win, id, func):
362 win.Connect(id, -1, wxEVT_SCROLLWIN_PAGEUP, func)
363
364 def EVT_COMMAND_SCROLLWIN_PAGEDOWN(win, id, func):
365 win.Connect(id, -1, wxEVT_SCROLLWIN_PAGEDOWN, func)
366
367 def EVT_COMMAND_SCROLLWIN_THUMBTRACK(win, id, func):
368 win.Connect(id, -1, wxEVT_SCROLLWIN_THUMBTRACK, func)
369
370 def EVT_COMMAND_SCROLLWIN_THUMBRELEASE(win, id, func):
371 win.Connect(id, -1, wxEVT_SCROLLWIN_THUMBRELEASE, func)
372
373
374 # Convenience commands
375 def EVT_BUTTON(win, id, func):
376 win.Connect(id, -1, wxEVT_COMMAND_BUTTON_CLICKED, func)
377
378 def EVT_CHECKBOX(win, id, func):
379 win.Connect(id, -1, wxEVT_COMMAND_CHECKBOX_CLICKED, func)
380
381 def EVT_CHOICE(win, id, func):
382 win.Connect(id, -1, wxEVT_COMMAND_CHOICE_SELECTED, func)
383
384 def EVT_LISTBOX(win, id, func):
385 win.Connect(id, -1, wxEVT_COMMAND_LISTBOX_SELECTED, func)
386
387 def EVT_LISTBOX_DCLICK(win, id, func):
388 win.Connect(id, -1, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, func)
389
390 def EVT_TEXT(win, id, func):
391 win.Connect(id, -1, wxEVT_COMMAND_TEXT_UPDATED, func)
392
393 def EVT_TEXT_ENTER(win, id, func):
394 win.Connect(id, -1, wxEVT_COMMAND_TEXT_ENTER, func)
395
396 def EVT_TEXT_URL(win, id, func):
397 win.Connect(id, -1, wxEVT_COMMAND_TEXT_URL, func)
398
399 def EVT_TEXT_MAXLEN(win, id, func):
400 win.Connect(id, -1, wxEVT_COMMAND_TEXT_MAXLEN, func)
401
402 def EVT_MENU(win, id, func):
403 win.Connect(id, -1, wxEVT_COMMAND_MENU_SELECTED, func)
404
405 def EVT_MENU_RANGE(win, id1, id2, func):
406 win.Connect(id1, id2, wxEVT_COMMAND_MENU_SELECTED, func)
407
408 def EVT_SLIDER(win, id, func):
409 win.Connect(id, -1, wxEVT_COMMAND_SLIDER_UPDATED, func)
410
411 def EVT_RADIOBOX(win, id, func):
412 win.Connect(id, -1, wxEVT_COMMAND_RADIOBOX_SELECTED, func)
413
414 def EVT_RADIOBUTTON(win, id, func):
415 win.Connect(id, -1, wxEVT_COMMAND_RADIOBUTTON_SELECTED, func)
416
417 def EVT_VLBOX(win, id, func):
418 win.Connect(id, -1, wxEVT_COMMAND_VLBOX_SELECTED, func)
419
420 def EVT_COMBOBOX(win, id, func):
421 win.Connect(id, -1, wxEVT_COMMAND_COMBOBOX_SELECTED, func)
422
423 def EVT_TOOL(win, id, func):
424 win.Connect(id, -1, wxEVT_COMMAND_TOOL_CLICKED, func)
425
426 def EVT_TOOL_RANGE(win, id, id2, func):
427 win.Connect(id, id2, wxEVT_COMMAND_TOOL_CLICKED, func)
428
429 def EVT_TOOL_RCLICKED(win, id, func):
430 win.Connect(id, -1, wxEVT_COMMAND_TOOL_RCLICKED, func)
431
432 def EVT_TOOL_RCLICKED_RANGE(win, id, id2, func):
433 win.Connect(id, id2, wxEVT_COMMAND_TOOL_RCLICKED, func)
434
435 def EVT_TOOL_ENTER(win, id, func):
436 win.Connect(id, -1, wxEVT_COMMAND_TOOL_ENTER, func)
437
438 def EVT_CHECKLISTBOX(win, id, func):
439 win.Connect(id, -1, wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, func)
440
441 def EVT_SPINCTRL(win, id, func):
442 win.Connect(id, -1, wxEVT_COMMAND_SPINCTRL_UPDATED, func)
443
444
445
446 # Generic command events
447
448 def EVT_COMMAND_LEFT_CLICK(win, id, func):
449 win.Connect(id, -1, wxEVT_COMMAND_LEFT_CLICK, func)
450
451 def EVT_COMMAND_LEFT_DCLICK(win, id, func):
452 win.Connect(id, -1, wxEVT_COMMAND_LEFT_DCLICK, func)
453
454 def EVT_COMMAND_RIGHT_CLICK(win, id, func):
455 win.Connect(id, -1, wxEVT_COMMAND_RIGHT_CLICK, func)
456
457 def EVT_COMMAND_RIGHT_DCLICK(win, id, func):
458 win.Connect(id, -1, wxEVT_COMMAND_RIGHT_DCLICK, func)
459
460 def EVT_COMMAND_SET_FOCUS(win, id, func):
461 win.Connect(id, -1, wxEVT_COMMAND_SET_FOCUS, func)
462
463 def EVT_COMMAND_KILL_FOCUS(win, id, func):
464 win.Connect(id, -1, wxEVT_COMMAND_KILL_FOCUS, func)
465
466 def EVT_COMMAND_ENTER(win, id, func):
467 win.Connect(id, -1, wxEVT_COMMAND_ENTER, func)
468
469
470 # wxNotebook events
471 def EVT_NOTEBOOK_PAGE_CHANGED(win, id, func):
472 win.Connect(id, -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, func)
473
474 def EVT_NOTEBOOK_PAGE_CHANGING(win, id, func):
475 win.Connect(id, -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, func)
476
477
478 # wxSpinButton
479 def EVT_SPIN_UP(win, id, func):
480 win.Connect(id, -1, wxEVT_SCROLL_LINEUP, func)
481
482 def EVT_SPIN_DOWN(win, id, func):
483 win.Connect(id, -1, wxEVT_SCROLL_LINEDOWN, func)
484
485 def EVT_SPIN(win, id, func):
486 win.Connect(id, -1, wxEVT_SCROLL_THUMBTRACK,func)
487
488
489 # wxTaskBarIcon
490 def EVT_TASKBAR_MOVE(win, func):
491 win.Connect(-1, -1, wxEVT_TASKBAR_MOVE, func)
492
493 def EVT_TASKBAR_LEFT_DOWN(win, func):
494 win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_DOWN, func)
495
496 def EVT_TASKBAR_LEFT_UP(win, func):
497 win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_UP, func)
498
499 def EVT_TASKBAR_RIGHT_DOWN(win, func):
500 win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_DOWN, func)
501
502 def EVT_TASKBAR_RIGHT_UP(win, func):
503 win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_UP, func)
504
505 def EVT_TASKBAR_LEFT_DCLICK(win, func):
506 win.Connect(-1, -1, wxEVT_TASKBAR_LEFT_DCLICK, func)
507
508 def EVT_TASKBAR_RIGHT_DCLICK(win, func):
509 win.Connect(-1, -1, wxEVT_TASKBAR_RIGHT_DCLICK, func)
510
511
512 # wxSashWindow
513 def EVT_SASH_DRAGGED(win, id, func):
514 win.Connect(id, -1, wxEVT_SASH_DRAGGED, func)
515
516 def EVT_SASH_DRAGGED_RANGE(win, id1, id2, func):
517 win.Connect(id1, id2, wxEVT_SASH_DRAGGED, func)
518
519 def EVT_QUERY_LAYOUT_INFO(win, func):
520 win.Connect(-1, -1, wxEVT_QUERY_LAYOUT_INFO, func)
521
522 def EVT_CALCULATE_LAYOUT(win, func):
523 win.Connect(-1, -1, wxEVT_CALCULATE_LAYOUT, func)
524
525
526 #wxSplitterWindow
527 def EVT_SPLITTER_SASH_POS_CHANGING(win, id, func):
528 win.Connect(id, -1, wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, func)
529
530 def EVT_SPLITTER_SASH_POS_CHANGED(win, id, func):
531 win.Connect(id, -1, wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, func)
532
533 def EVT_SPLITTER_UNSPLIT(win, id, func):
534 win.Connect(id, -1, wxEVT_COMMAND_SPLITTER_UNSPLIT, func)
535
536 def EVT_SPLITTER_DOUBLECLICKED(win, id, func):
537 win.Connect(id, -1, wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, func)
538
539
540 # wxTimer
541 def EVT_TIMER(win, id, func):
542 win.Connect(id, -1, wxEVT_TIMER, func)
543
544 # wxProcess
545 def EVT_END_PROCESS(eh, id, func):
546 eh.Connect(id, -1, wxEVT_END_PROCESS, func)
547
548
549 # wxJoyStick
550 def EVT_JOY_DOWN(win, func):
551 win.Connect(-1, -1, wxEVT_JOY_BUTTON_DOWN, func)
552
553 def EVT_JOY_UP(win, func):
554 win.Connect(-1, -1, wxEVT_JOY_BUTTON_UP, func)
555
556 def EVT_JOY_MOVE(win, func):
557 win.Connect(-1, -1, wxEVT_JOY_MOVE, func)
558
559 def EVT_JOY_ZMOVE(win, func):
560 win.Connect(-1, -1, wxEVT_JOY_ZMOVE, func)
561
562 def EVT_JOYSTICK_EVENTS(win, func):
563 win.Connect(-1, -1, wxEVT_JOY_BUTTON_DOWN, func)
564 win.Connect(-1, -1, wxEVT_JOY_BUTTON_UP, func)
565 win.Connect(-1, -1, wxEVT_JOY_MOVE, func)
566 win.Connect(-1, -1, wxEVT_JOY_ZMOVE, func)
567
568
569 def EVT_TOGGLEBUTTON(win, id, func):
570 win.Connect(id, -1, wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, func)
571
572
573
574 def EVT_CONTEXT_MENU(win, func):
575 win.Connect(-1, -1, wxEVT_CONTEXT_MENU, func)
576
577
578 #----------------------------------------------------------------------
579
580 class wxTimer(wxPyTimer):
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)
588
589 #----------------------------------------------------------------------
590 # aliases
591
592 wxColor = wxColour
593 wxNamedColor = wxNamedColour
594 wxPen = wxPyPen
595 wxScrollbar = wxScrollBar
596 wxPoint2D = wxPoint2DDouble
597
598 wxPyAssertionError = wxc.wxPyAssertionError
599
600
601 # backwards compatibility
602 wxNoRefBitmap = wxBitmap
603 wxPyDefaultPosition = wxDefaultPosition
604 wxPyDefaultSize = wxDefaultSize
605 NULL = None
606 wxSystemSettings_GetSystemColour = wxSystemSettings_GetColour
607 wxSystemSettings_GetSystemFont = wxSystemSettings_GetFont
608 wxSystemSettings_GetSystemMetric = wxSystemSettings_GetMetric
609
610
611 # workarounds for bad wxRTTI names
612 __wxPyPtrTypeMap['wxGauge95'] = 'wxGauge'
613 __wxPyPtrTypeMap['wxSlider95'] = 'wxSlider'
614 __wxPyPtrTypeMap['wxStatusBar95'] = 'wxStatusBar'
615
616
617
618 def NewId():
619 import warnings
620 warnings.warn("Use wxNewId instead", DeprecationWarning, 2)
621 return wxNewId()
622
623 def 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
631 try:
632 True
633 except NameError:
634 True = 1==1
635 False = 1==0
636
637 # Backwards compaatible
638 TRUE = true = True
639 FALSE = false = False
640
641
642 #----------------------------------------------------------------------
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.
645 if wxPlatform == "__WXGTK__":
646 try:
647 import locale
648 locale.setlocale(locale.LC_ALL, "")
649 except:
650 pass
651
652 # On MSW add the directory where the wxWindows catalogs were installed
653 # to the default catalog path.
654 if wxPlatform == "__WXMSW__":
655 import os
656 localedir = os.path.join(os.path.split(__file__)[0], "locale")
657 wxLocale_AddCatalogLookupPathPrefix(localedir)
658 del os
659
660 #----------------------------------------------------------------------
661 # Load version numbers from __version__... Ensure that major and minor
662 # versions are the same for both wxPython and wxWindows.
663
664 from wxPython.__version__ import *
665 __version__ = wxVERSION_STRING
666
667 assert wxMAJOR_VERSION == wxc.wxMAJOR_VERSION, "wxPython/wxWindows version mismatch"
668 assert wxMINOR_VERSION == wxc.wxMINOR_VERSION, "wxPython/wxWindows version mismatch"
669 if wxRELEASE_VERSION != wxc.wxRELEASE_VERSION:
670 import warnings
671 warnings.warn("wxPython/wxWindows release number mismatch")
672
673
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
677 # that are derived from wxPython classes by the user, only those that are
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
695 def wxPyTypeCast(obj, typeStr):
696 if obj is None:
697 return None
698 theClass = globals()[typeStr+"Ptr"]
699 typeStr = __wxPyPtrTypeMap.get(typeStr, typeStr)
700 if hasattr(obj, "this"):
701 # if already the right type then just return it
702 if isinstance(obj, theClass) or obj.__class__ is theClass:
703 return obj
704 newPtr = ptrcast(obj.this, typeStr+"_p")
705 else:
706 newPtr = ptrcast(obj, typeStr+"_p")
707 theObj = theClass(newPtr)
708 if hasattr(obj, "this"):
709 theObj.thisown = obj.thisown
710 return theObj
711
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
716 def 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)
724
725 #----------------------------------------------------------------------------
726 _wxCallAfterId = None
727
728 def wxCallAfter(callable, *args, **kw):
729 """
730 Call the specified function after the current and pending event
731 handlers have been completed. This is also good for making GUI
732 method calls from non-GUI threads.
733 """
734 app = wxGetApp()
735 assert app, 'No wxApp created yet'
736
737 global _wxCallAfterId
738 if _wxCallAfterId is None:
739 _wxCallAfterId = wxNewEventType()
740 app.Connect(-1, -1, _wxCallAfterId,
741 lambda event: event.callable(*event.args, **event.kw) )
742 evt = wxPyEvent()
743 evt.SetEventType(_wxCallAfterId)
744 evt.callable = callable
745 evt.args = args
746 evt.kw = kw
747 wxPostEvent(app, evt)
748
749
750 #----------------------------------------------------------------------
751
752
753 class 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
840
841 #----------------------------------------------------------------------
842
843 class wxPyDeadObjectError(AttributeError):
844 pass
845
846 class _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 """
852 reprStr = "wxPython wrapper for DELETED %s object! (The C++ object no longer exists.)"
853 attrStr = "The C++ part of the %s object has been deleted, attribute access no longer allowed."
854
855 def __repr__( self ):
856 if not hasattr(self, "_name"):
857 self._name = "[unknown]"
858 return self.reprStr % self._name
859
860 def __getattr__( self, *args ):
861 if not hasattr(self, "_name"):
862 self._name = "[unknown]"
863 raise wxPyDeadObjectError( self.attrStr % self._name )
864
865 def __nonzero__(self):
866 return 0
867
868
869 #----------------------------------------------------------------------
870
871 class 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
898 #----------------------------------------------------------------------
899 #----------------------------------------------------------------------
900
901 class wxPyOnDemandOutputWindow:
902 def __init__(self, title = "wxPython: stdout/stderr"):
903 self.frame = None
904 self.title = title
905 self.parent = None
906
907 def SetParent(self, parent):
908 self.parent = parent
909
910 def OnCloseWindow(self, event):
911 if self.frame != None:
912 self.frame.Destroy()
913 self.frame = None
914 self.text = None
915
916 # These methods provide the file-like output behaviour.
917 def write(self, str):
918 if not wxThread_IsMain():
919 # Aquire the GUI mutex before making GUI calls. Mutex is released
920 # when locker is deleted at the end of this function.
921 locker = wxMutexGuiLocker()
922
923 if not self.frame:
924 self.frame = wxFrame(self.parent, -1, self.title,
925 style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
926 self.text = wxTextCtrl(self.frame, -1, "",
927 style = wxTE_MULTILINE|wxTE_READONLY)
928 self.frame.SetSize(wxSize(450, 300))
929 self.frame.Show(True)
930 EVT_CLOSE(self.frame, self.OnCloseWindow)
931 self.text.AppendText(str)
932
933 def close(self):
934 if self.frame != None:
935 if not wxThread_IsMain():
936 locker = wxMutexGuiLocker()
937 self.frame.Close()
938
939
940 _defRedirect = (wxPlatform == '__WXMSW__' or wxPlatform == '__WXMAC__')
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
946 class wxApp(wxPyApp):
947 error = 'wxApp.error'
948 outputWindowClass = wxPyOnDemandOutputWindow
949
950 def __init__(self, redirect=_defRedirect, filename=None, useBestVisual=False):
951 wxPyApp.__init__(self)
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
959 of your Mac."""
960 sys.exit(1)
961 except:
962 pass
963
964 self.stdioWin = None
965 self.saveStdio = (sys.stdout, sys.stderr)
966
967 # This has to be done before OnInit
968 self.SetUseBestVisual(useBestVisual)
969
970 if redirect:
971 self.RedirectStdio(filename)
972
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
983
984 def SetTopWindow(self, frame):
985 if self.stdioWin:
986 self.stdioWin.SetParent(frame)
987 wxPyApp.SetTopWindow(self, frame)
988
989
990 def MainLoop(self):
991 wxPyApp.MainLoop(self)
992 self.RestoreStdio()
993
994
995 def RedirectStdio(self, filename):
996 if filename:
997 sys.stdout = sys.stderr = open(filename, 'a')
998 else:
999 self.stdioWin = self.outputWindowClass()
1000 sys.stdout = sys.stderr = self.stdioWin
1001
1002
1003 def RestoreStdio(self):
1004 sys.stdout, sys.stderr = self.saveStdio
1005
1006
1007 # change from wxPyApp_ to wxApp_
1008 wxApp_GetMacDefaultEncodingIsPC = wxc.wxPyApp_GetMacDefaultEncodingIsPC
1009 wxApp_GetMacSupportPCMenuShortcuts = wxc.wxPyApp_GetMacSupportPCMenuShortcuts
1010 wxApp_GetMacAboutMenuItemId = wxc.wxPyApp_GetMacAboutMenuItemId
1011 wxApp_GetMacPreferencesMenuItemId = wxc.wxPyApp_GetMacPreferencesMenuItemId
1012 wxApp_GetMacExitMenuItemId = wxc.wxPyApp_GetMacExitMenuItemId
1013 wxApp_GetMacHelpMenuTitleName = wxc.wxPyApp_GetMacHelpMenuTitleName
1014 wxApp_SetMacDefaultEncodingIsPC = wxc.wxPyApp_SetMacDefaultEncodingIsPC
1015 wxApp_SetMacSupportPCMenuShortcuts = wxc.wxPyApp_SetMacSupportPCMenuShortcuts
1016 wxApp_SetMacAboutMenuItemId = wxc.wxPyApp_SetMacAboutMenuItemId
1017 wxApp_SetMacPreferencesMenuItemId = wxc.wxPyApp_SetMacPreferencesMenuItemId
1018 wxApp_SetMacExitMenuItemId = wxc.wxPyApp_SetMacExitMenuItemId
1019 wxApp_SetMacHelpMenuTitleName = wxc.wxPyApp_SetMacHelpMenuTitleName
1020
1021
1022 #----------------------------------------------------------------------------
1023
1024 class wxPySimpleApp(wxApp):
1025 def __init__(self, flag=0):
1026 wxApp.__init__(self, flag)
1027 def OnInit(self):
1028 wxInitAllImageHandlers()
1029 return True
1030
1031
1032 class 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)
1040 return True
1041
1042 def SetWidget(self, widgetClass, *args):
1043 w = widgetClass(self.frame, *args)
1044 self.frame.Show(True)
1045
1046 #----------------------------------------------------------------------------
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.
1051
1052 class __wxPyCleanup:
1053 def __init__(self):
1054 self.cleanup = wxc.wxApp_CleanUp
1055 def __del__(self):
1056 self.cleanup()
1057
1058 sys.__wxPythonCleanup = __wxPyCleanup()
1059
1060 ## # another possible solution, but it gets called too early...
1061 ## if sys.version[0] == '2':
1062 ## import atexit
1063 ## atexit.register(wxc.wxApp_CleanUp)
1064 ## else:
1065 ## sys.exitfunc = wxc.wxApp_CleanUp
1066
1067
1068 #----------------------------------------------------------------------------
1069 #----------------------------------------------------------------------------