]> git.saurik.com Git - wxWidgets.git/blame - include/wx/event.h
corrected comment
[wxWidgets.git] / include / wx / event.h
CommitLineData
c801d85f 1/////////////////////////////////////////////////////////////////////////////
bd83cb56 2// Name: wx/event.h
c801d85f
KB
3// Purpose: Event classes
4// Author: Julian Smart
5// Modified by:
6// Created: 01/02/97
7// RCS-ID: $Id$
bd83cb56 8// Copyright: (c) wxWindows team
2b854a32 9// Licence: wxWindows licence
c801d85f
KB
10/////////////////////////////////////////////////////////////////////////////
11
34138703
JS
12#ifndef _WX_EVENTH__
13#define _WX_EVENTH__
c801d85f
KB
14
15#ifdef __GNUG__
2b854a32 16 #pragma interface "event.h"
c801d85f
KB
17#endif
18
19#include "wx/defs.h"
20#include "wx/object.h"
e90c1d2a
VZ
21
22#if wxUSE_GUI
23 #include "wx/gdicmn.h"
43b5058d 24 #include "wx/cursor.h"
e90c1d2a 25#endif
42e69d6b 26
72cdf4c9 27#include "wx/thread.h"
c801d85f 28
e90c1d2a
VZ
29// ----------------------------------------------------------------------------
30// forward declarations
31// ----------------------------------------------------------------------------
32
33class WXDLLEXPORT wxList;
34
35#if wxUSE_GUI
36 class WXDLLEXPORT wxClientData;
37 class WXDLLEXPORT wxDC;
38 class WXDLLEXPORT wxMenu;
73974df1 39 class WXDLLEXPORT wxWindow;
e90c1d2a
VZ
40#endif // wxUSE_GUI
41
42// ----------------------------------------------------------------------------
43// Event types
44// ----------------------------------------------------------------------------
64693098 45
23f681ec
VZ
46#if defined(__BORLANDC__) && defined(__WIN16__)
47 // For 16-bit BC++, these 2 would be identical otherwise (truncated)
48 #define wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED wxEVT_COMMAND_NB_PAGE_CHANGED
49 #define wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING wxEVT_COMMAND_NB_PAGE_CHANGING
50#endif
51
0757d27c
JS
52typedef int wxEventType;
53
77d4384e 54// generate a new unique event type
0b5eceb6 55extern wxEventType wxNewEventType();
66b6b045 56
77d4384e 57// the standard event types
0b5eceb6
VZ
58extern wxEventType wxEVT_NULL;
59extern wxEventType wxEVT_FIRST;
60
61extern wxEventType wxEVT_COMMAND_BUTTON_CLICKED;
62extern wxEventType wxEVT_COMMAND_CHECKBOX_CLICKED;
63extern wxEventType wxEVT_COMMAND_CHOICE_SELECTED;
64extern wxEventType wxEVT_COMMAND_LISTBOX_SELECTED;
65extern wxEventType wxEVT_COMMAND_LISTBOX_DOUBLECLICKED;
66extern wxEventType wxEVT_COMMAND_CHECKLISTBOX_TOGGLED;
67extern wxEventType wxEVT_COMMAND_TEXT_UPDATED;
68extern wxEventType wxEVT_COMMAND_TEXT_ENTER;
69extern wxEventType wxEVT_COMMAND_MENU_SELECTED;
70extern wxEventType wxEVT_COMMAND_TOOL_CLICKED;
71extern wxEventType wxEVT_COMMAND_SLIDER_UPDATED;
72extern wxEventType wxEVT_COMMAND_RADIOBOX_SELECTED;
73extern wxEventType wxEVT_COMMAND_RADIOBUTTON_SELECTED;
74extern wxEventType wxEVT_COMMAND_SCROLLBAR_UPDATED;
75extern wxEventType wxEVT_COMMAND_VLBOX_SELECTED;
76extern wxEventType wxEVT_COMMAND_COMBOBOX_SELECTED;
77extern wxEventType wxEVT_COMMAND_TOOL_RCLICKED;
78extern wxEventType wxEVT_COMMAND_TOOL_ENTER;
79extern wxEventType wxEVT_COMMAND_SPINCTRL_UPDATED;
77d4384e
RR
80
81// Sockets and timers send events, too
0b5eceb6
VZ
82extern wxEventType wxEVT_SOCKET;
83extern wxEventType wxEVT_TIMER;
77d4384e
RR
84
85// Mouse event types
0b5eceb6
VZ
86extern wxEventType wxEVT_LEFT_DOWN;
87extern wxEventType wxEVT_LEFT_UP;
88extern wxEventType wxEVT_MIDDLE_DOWN;
89extern wxEventType wxEVT_MIDDLE_UP;
90extern wxEventType wxEVT_RIGHT_DOWN;
91extern wxEventType wxEVT_RIGHT_UP;
92extern wxEventType wxEVT_MOTION;
93extern wxEventType wxEVT_ENTER_WINDOW;
94extern wxEventType wxEVT_LEAVE_WINDOW;
95extern wxEventType wxEVT_LEFT_DCLICK;
96extern wxEventType wxEVT_MIDDLE_DCLICK;
97extern wxEventType wxEVT_RIGHT_DCLICK;
98extern wxEventType wxEVT_SET_FOCUS;
99extern wxEventType wxEVT_KILL_FOCUS;
77d4384e
RR
100
101// Non-client mouse events
0b5eceb6
VZ
102extern wxEventType wxEVT_NC_LEFT_DOWN;
103extern wxEventType wxEVT_NC_LEFT_UP;
104extern wxEventType wxEVT_NC_MIDDLE_DOWN;
105extern wxEventType wxEVT_NC_MIDDLE_UP;
106extern wxEventType wxEVT_NC_RIGHT_DOWN;
107extern wxEventType wxEVT_NC_RIGHT_UP;
108extern wxEventType wxEVT_NC_MOTION;
109extern wxEventType wxEVT_NC_ENTER_WINDOW;
110extern wxEventType wxEVT_NC_LEAVE_WINDOW;
111extern wxEventType wxEVT_NC_LEFT_DCLICK;
112extern wxEventType wxEVT_NC_MIDDLE_DCLICK;
113extern wxEventType wxEVT_NC_RIGHT_DCLICK;
77d4384e
RR
114
115// Character input event type
0b5eceb6
VZ
116extern wxEventType wxEVT_CHAR;
117extern wxEventType wxEVT_CHAR_HOOK;
118extern wxEventType wxEVT_NAVIGATION_KEY;
119extern wxEventType wxEVT_KEY_DOWN;
120extern wxEventType wxEVT_KEY_UP;
77d4384e
RR
121
122// Set cursor event
0b5eceb6 123extern wxEventType wxEVT_SET_CURSOR;
77d4384e
RR
124
125// wxScrollbar and wxSlider event identifiers
0b5eceb6
VZ
126extern wxEventType wxEVT_SCROLL_TOP;
127extern wxEventType wxEVT_SCROLL_BOTTOM;
128extern wxEventType wxEVT_SCROLL_LINEUP;
129extern wxEventType wxEVT_SCROLL_LINEDOWN;
130extern wxEventType wxEVT_SCROLL_PAGEUP;
131extern wxEventType wxEVT_SCROLL_PAGEDOWN;
132extern wxEventType wxEVT_SCROLL_THUMBTRACK;
133extern wxEventType wxEVT_SCROLL_THUMBRELEASE;
77d4384e
RR
134
135// Scroll events from wxWindow
0b5eceb6
VZ
136extern wxEventType wxEVT_SCROLLWIN_TOP;
137extern wxEventType wxEVT_SCROLLWIN_BOTTOM;
138extern wxEventType wxEVT_SCROLLWIN_LINEUP;
139extern wxEventType wxEVT_SCROLLWIN_LINEDOWN;
140extern wxEventType wxEVT_SCROLLWIN_PAGEUP;
141extern wxEventType wxEVT_SCROLLWIN_PAGEDOWN;
142extern wxEventType wxEVT_SCROLLWIN_THUMBTRACK;
143extern wxEventType wxEVT_SCROLLWIN_THUMBRELEASE;
77d4384e
RR
144
145// System events
0b5eceb6
VZ
146extern wxEventType wxEVT_SIZE;
147extern wxEventType wxEVT_MOVE;
148extern wxEventType wxEVT_CLOSE_WINDOW;
149extern wxEventType wxEVT_END_SESSION;
150extern wxEventType wxEVT_QUERY_END_SESSION;
151extern wxEventType wxEVT_ACTIVATE_APP;
152extern wxEventType wxEVT_POWER;
153extern wxEventType wxEVT_ACTIVATE;
154extern wxEventType wxEVT_CREATE;
155extern wxEventType wxEVT_DESTROY;
156extern wxEventType wxEVT_SHOW;
157extern wxEventType wxEVT_ICONIZE;
158extern wxEventType wxEVT_MAXIMIZE;
159extern wxEventType wxEVT_MOUSE_CAPTURE_CHANGED;
160extern wxEventType wxEVT_PAINT;
161extern wxEventType wxEVT_ERASE_BACKGROUND;
162extern wxEventType wxEVT_NC_PAINT;
163extern wxEventType wxEVT_PAINT_ICON;
164extern wxEventType wxEVT_MENU_CHAR;
165extern wxEventType wxEVT_MENU_INIT;
166extern wxEventType wxEVT_MENU_HIGHLIGHT;
167extern wxEventType wxEVT_POPUP_MENU_INIT;
168extern wxEventType wxEVT_CONTEXT_MENU;
169extern wxEventType wxEVT_SYS_COLOUR_CHANGED;
170extern wxEventType wxEVT_SETTING_CHANGED;
171extern wxEventType wxEVT_QUERY_NEW_PALETTE;
172extern wxEventType wxEVT_PALETTE_CHANGED;
173extern wxEventType wxEVT_JOY_BUTTON_DOWN;
174extern wxEventType wxEVT_JOY_BUTTON_UP;
175extern wxEventType wxEVT_JOY_MOVE;
176extern wxEventType wxEVT_JOY_ZMOVE;
177extern wxEventType wxEVT_DROP_FILES;
178extern wxEventType wxEVT_DRAW_ITEM;
179extern wxEventType wxEVT_MEASURE_ITEM;
180extern wxEventType wxEVT_COMPARE_ITEM;
181extern wxEventType wxEVT_INIT_DIALOG;
182extern wxEventType wxEVT_IDLE;
183extern wxEventType wxEVT_UPDATE_UI;
77d4384e
RR
184
185// System misc.
0b5eceb6 186extern wxEventType wxEVT_END_PROCESS;
77d4384e
RR
187
188// Dial up events
0b5eceb6
VZ
189extern wxEventType wxEVT_DIALUP_CONNECTED;
190extern wxEventType wxEVT_DIALUP_DISCONNECTED;
77d4384e
RR
191
192// Generic command events
193// Note: a click is a higher-level event than button down/up
0b5eceb6
VZ
194extern wxEventType wxEVT_COMMAND_LEFT_CLICK;
195extern wxEventType wxEVT_COMMAND_LEFT_DCLICK;
196extern wxEventType wxEVT_COMMAND_RIGHT_CLICK;
197extern wxEventType wxEVT_COMMAND_RIGHT_DCLICK;
198extern wxEventType wxEVT_COMMAND_SET_FOCUS;
199extern wxEventType wxEVT_COMMAND_KILL_FOCUS;
200extern wxEventType wxEVT_COMMAND_ENTER;
77d4384e
RR
201
202// Tree control event types
0b5eceb6
VZ
203extern wxEventType wxEVT_COMMAND_TREE_BEGIN_DRAG;
204extern wxEventType wxEVT_COMMAND_TREE_BEGIN_RDRAG;
205extern wxEventType wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT;
206extern wxEventType wxEVT_COMMAND_TREE_END_LABEL_EDIT;
207extern wxEventType wxEVT_COMMAND_TREE_DELETE_ITEM;
208extern wxEventType wxEVT_COMMAND_TREE_GET_INFO;
209extern wxEventType wxEVT_COMMAND_TREE_SET_INFO;
210extern wxEventType wxEVT_COMMAND_TREE_ITEM_EXPANDED;
211extern wxEventType wxEVT_COMMAND_TREE_ITEM_EXPANDING;
212extern wxEventType wxEVT_COMMAND_TREE_ITEM_COLLAPSED;
213extern wxEventType wxEVT_COMMAND_TREE_ITEM_COLLAPSING;
214extern wxEventType wxEVT_COMMAND_TREE_SEL_CHANGED;
215extern wxEventType wxEVT_COMMAND_TREE_SEL_CHANGING;
216extern wxEventType wxEVT_COMMAND_TREE_KEY_DOWN;
217extern wxEventType wxEVT_COMMAND_TREE_ITEM_ACTIVATED;
218extern wxEventType wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK;
219extern wxEventType wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK;
220extern wxEventType wxEVT_COMMAND_TREE_END_DRAG;
77d4384e
RR
221
222// List control event types
0b5eceb6
VZ
223extern wxEventType wxEVT_COMMAND_LIST_BEGIN_DRAG;
224extern wxEventType wxEVT_COMMAND_LIST_BEGIN_RDRAG;
225extern wxEventType wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
226extern wxEventType wxEVT_COMMAND_LIST_END_LABEL_EDIT;
227extern wxEventType wxEVT_COMMAND_LIST_DELETE_ITEM;
228extern wxEventType wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
229extern wxEventType wxEVT_COMMAND_LIST_GET_INFO;
230extern wxEventType wxEVT_COMMAND_LIST_SET_INFO;
231extern wxEventType wxEVT_COMMAND_LIST_ITEM_SELECTED;
232extern wxEventType wxEVT_COMMAND_LIST_ITEM_DESELECTED;
233extern wxEventType wxEVT_COMMAND_LIST_KEY_DOWN;
234extern wxEventType wxEVT_COMMAND_LIST_INSERT_ITEM;
235extern wxEventType wxEVT_COMMAND_LIST_COL_CLICK;
236extern wxEventType wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK;
237extern wxEventType wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK;
238extern wxEventType wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
77d4384e
RR
239
240// Tab and notebook control event types
0b5eceb6
VZ
241extern wxEventType wxEVT_COMMAND_TAB_SEL_CHANGED;
242extern wxEventType wxEVT_COMMAND_TAB_SEL_CHANGING;
243extern wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED;
244extern wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING;
77d4384e
RR
245
246// Splitter events
0b5eceb6
VZ
247extern wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED;
248extern wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING;
249extern wxEventType wxEVT_COMMAND_SPLITTER_DOUBLECLICKED;
250extern wxEventType wxEVT_COMMAND_SPLITTER_UNSPLIT;
77d4384e
RR
251
252// Wizard events
0b5eceb6
VZ
253extern wxEventType wxEVT_WIZARD_PAGE_CHANGED;
254extern wxEventType wxEVT_WIZARD_PAGE_CHANGING;
255extern wxEventType wxEVT_WIZARD_CANCEL;
77d4384e
RR
256
257// Calendar events
0b5eceb6
VZ
258extern wxEventType wxEVT_CALENDAR_SEL_CHANGED;
259extern wxEventType wxEVT_CALENDAR_DAY_CHANGED;
260extern wxEventType wxEVT_CALENDAR_MONTH_CHANGED;
261extern wxEventType wxEVT_CALENDAR_YEAR_CHANGED;
262extern wxEventType wxEVT_CALENDAR_DOUBLECLICKED;
263extern wxEventType wxEVT_CALENDAR_WEEKDAY_CLICKED;
77d4384e
RR
264
265// Help events
0b5eceb6
VZ
266extern wxEventType wxEVT_HELP;
267extern wxEventType wxEVT_DETAILED_HELP;
77d4384e
RR
268
269// Compatibility
c801d85f
KB
270
271#if WXWIN_COMPATIBILITY
272
273#define wxEVENT_TYPE_BUTTON_COMMAND wxEVT_COMMAND_BUTTON_CLICKED
274#define wxEVENT_TYPE_CHECKBOX_COMMAND wxEVT_COMMAND_CHECKBOX_CLICKED
275#define wxEVENT_TYPE_CHOICE_COMMAND wxEVT_COMMAND_CHOICE_SELECTED
276#define wxEVENT_TYPE_LISTBOX_COMMAND wxEVT_COMMAND_LISTBOX_SELECTED
277#define wxEVENT_TYPE_LISTBOX_DCLICK_COMMAND wxEVT_COMMAND_LISTBOX_DOUBLECLICKED
278#define wxEVENT_TYPE_TEXT_COMMAND wxEVT_COMMAND_TEXT_UPDATED
279#define wxEVENT_TYPE_MULTITEXT_COMMAND wxEVT_COMMAND_TEXT_UPDATED
280#define wxEVENT_TYPE_MENU_COMMAND wxEVT_COMMAND_MENU_SELECTED
281#define wxEVENT_TYPE_SLIDER_COMMAND wxEVT_COMMAND_SLIDER_UPDATED
282#define wxEVENT_TYPE_RADIOBOX_COMMAND wxEVT_COMMAND_RADIOBOX_SELECTED
283#define wxEVENT_TYPE_RADIOBUTTON_COMMAND wxEVT_COMMAND_RADIOBUTTON_SELECTED
284#define wxEVENT_TYPE_TEXT_ENTER_COMMAND wxEVT_COMMAND_TEXT_ENTER
285#define wxEVENT_TYPE_SET_FOCUS wxEVT_SET_FOCUS
286#define wxEVENT_TYPE_KILL_FOCUS wxEVT_KILL_FOCUS
287#define wxEVENT_TYPE_SCROLLBAR_COMMAND wxEVT_COMMAND_SCROLLBAR_UPDATED
288#define wxEVENT_TYPE_VIRT_LISTBOX_COMMAND wxEVT_COMMAND_VLBOX_SELECTED
289#define wxEVENT_TYPE_COMBOBOX_COMMAND wxEVT_COMMAND_COMBOBOX_SELECTED
290
291#define wxEVENT_TYPE_LEFT_DOWN wxEVT_LEFT_DOWN
292#define wxEVENT_TYPE_LEFT_UP wxEVT_LEFT_UP
293#define wxEVENT_TYPE_MIDDLE_DOWN wxEVT_MIDDLE_DOWN
294#define wxEVENT_TYPE_MIDDLE_UP wxEVT_MIDDLE_UP
295#define wxEVENT_TYPE_RIGHT_DOWN wxEVT_RIGHT_DOWN
296#define wxEVENT_TYPE_RIGHT_UP wxEVT_RIGHT_UP
297#define wxEVENT_TYPE_MOTION wxEVT_MOTION
298#define wxEVENT_TYPE_ENTER_WINDOW wxEVT_ENTER_WINDOW
299#define wxEVENT_TYPE_LEAVE_WINDOW wxEVT_LEAVE_WINDOW
300#define wxEVENT_TYPE_LEFT_DCLICK wxEVT_LEFT_DCLICK
301#define wxEVENT_TYPE_MIDDLE_DCLICK wxEVT_MIDDLE_DCLICK
302#define wxEVENT_TYPE_RIGHT_DCLICK wxEVT_RIGHT_DCLICK
303#define wxEVENT_TYPE_CHAR wxEVT_CHAR
304#define wxEVENT_TYPE_SCROLL_TOP wxEVT_SCROLL_TOP
305#define wxEVENT_TYPE_SCROLL_BOTTOM wxEVT_SCROLL_BOTTOM
306#define wxEVENT_TYPE_SCROLL_LINEUP wxEVT_SCROLL_LINEUP
307#define wxEVENT_TYPE_SCROLL_LINEDOWN wxEVT_SCROLL_LINEDOWN
308#define wxEVENT_TYPE_SCROLL_PAGEUP wxEVT_SCROLL_PAGEUP
309#define wxEVENT_TYPE_SCROLL_PAGEDOWN wxEVT_SCROLL_PAGEDOWN
310#define wxEVENT_TYPE_SCROLL_THUMBTRACK wxEVT_SCROLL_THUMBTRACK
311
2b854a32 312#endif // WXWIN_COMPATIBILITY
c801d85f
KB
313
314/*
315 * wxWindows events, covering all interesting things that might happen
316 * (button clicking, resizing, setting text in widgets, etc.).
317 *
318 * For each completely new event type, derive a new event class.
319 * An event CLASS represents a C++ class defining a range of similar event TYPES;
320 * examples are canvas events, panel item command events.
321 * An event TYPE is a unique identifier for a particular system event,
322 * such as a button press or a listbox deselection.
323 *
324 */
325
2b854a32 326class WXDLLEXPORT wxEvent : public wxObject
c801d85f 327{
2b854a32 328 DECLARE_ABSTRACT_CLASS(wxEvent)
c801d85f
KB
329
330public:
2b854a32
VZ
331 wxEvent(int id = 0);
332 ~wxEvent() {}
333
334 void SetEventType(wxEventType typ) { m_eventType = typ; }
335 wxEventType GetEventType() const { return m_eventType; }
336 wxObject *GetEventObject() const { return m_eventObject; }
337 void SetEventObject(wxObject *obj) { m_eventObject = obj; }
338 long GetTimestamp() const { return m_timeStamp; }
339 void SetTimestamp(long ts = 0) { m_timeStamp = ts; }
340 int GetId() const { return m_id; }
341 void SetId(int Id) { m_id = Id; }
342
343 // Can instruct event processor that we wish to ignore this event
344 // (treat as if the event table entry had not been found): this must be done
345 // to allow the event processing by the base classes (calling event.Skip()
346 // is the analog of calling the base class verstion of a virtual function)
347 void Skip(bool skip = TRUE) { m_skipped = skip; }
348 bool GetSkipped() const { return m_skipped; };
c801d85f 349
193bf013
VZ
350 // implementation only: this test is explicitlty anti OO and this functions
351 // exists only for optimization purposes
352 bool IsCommandEvent() const { return m_isCommandEvent; }
353
aadbdf11 354 void CopyObject(wxObject& object_dest) const;
a737331d 355
c801d85f 356public:
2b854a32 357 wxObject* m_eventObject;
2b854a32
VZ
358 wxEventType m_eventType;
359 long m_timeStamp;
360 int m_id;
361 wxObject* m_callbackUserData;
42e69d6b 362 bool m_skipped;
193bf013
VZ
363
364 // optimization: instead of using costly IsKindOf() we keep a flag telling
365 // whether we're a command event (by far the most common case)
366 bool m_isCommandEvent;
c801d85f
KB
367};
368
e90c1d2a
VZ
369#if wxUSE_GUI
370
c801d85f
KB
371// Item or menu event class
372/*
373 wxEVT_COMMAND_BUTTON_CLICKED
374 wxEVT_COMMAND_CHECKBOX_CLICKED
375 wxEVT_COMMAND_CHOICE_SELECTED
376 wxEVT_COMMAND_LISTBOX_SELECTED
377 wxEVT_COMMAND_LISTBOX_DOUBLECLICKED
378 wxEVT_COMMAND_TEXT_UPDATED
379 wxEVT_COMMAND_TEXT_ENTER
380 wxEVT_COMMAND_MENU_SELECTED
381 wxEVT_COMMAND_SLIDER_UPDATED
382 wxEVT_COMMAND_RADIOBOX_SELECTED
383 wxEVT_COMMAND_RADIOBUTTON_SELECTED
384 wxEVT_COMMAND_SCROLLBAR_UPDATED
385 wxEVT_COMMAND_VLBOX_SELECTED
386 wxEVT_COMMAND_COMBOBOX_SELECTED
387*/
388
2b854a32 389class WXDLLEXPORT wxCommandEvent : public wxEvent
c801d85f 390{
2b854a32 391 DECLARE_DYNAMIC_CLASS(wxCommandEvent)
c801d85f 392
2b854a32
VZ
393public:
394 wxCommandEvent(wxEventType commandType = wxEVT_NULL, int id = 0);
395 ~wxCommandEvent() {}
c801d85f 396
2b854a32
VZ
397 /*
398 * Accessors dependent on context
399 *
400 */
c801d85f 401
2b854a32
VZ
402 // Set/Get client data from controls
403 void SetClientData(void* clientData) { m_clientData = clientData; }
404 void *GetClientData() const { return m_clientData; }
c801d85f 405
2b854a32
VZ
406 // Set/Get client object from controls
407 void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; }
408 void *GetClientObject() const { return m_clientObject; }
f5e27805 409
2b854a32
VZ
410 // Get listbox selection if single-choice
411 int GetSelection() const { return m_commandInt; }
c801d85f 412
2b854a32 413 // Set/Get listbox/choice selection string
29006414 414 void SetString(const wxString& s) { m_commandString = s; }
7214297d 415 wxString GetString() const { return m_commandString; }
c801d85f 416
2b854a32 417 // Get checkbox value
3ca6a5f0 418 bool IsChecked() const { return m_commandInt != 0; }
c801d85f 419
2b854a32
VZ
420 // TRUE if the listbox event was a selection.
421 bool IsSelection() const { return (m_extraLong != 0); }
c801d85f 422
2b854a32
VZ
423 void SetExtraLong(long extraLong) { m_extraLong = extraLong; }
424 long GetExtraLong() const { return m_extraLong ; }
c801d85f 425
2b854a32
VZ
426 void SetInt(int i) { m_commandInt = i; }
427 long GetInt() const { return m_commandInt ; }
c801d85f 428
aadbdf11
GL
429 void CopyObject(wxObject& obj) const;
430
3ca6a5f0
BP
431#ifdef WXWIN_COMPATIBILITY_2
432 bool Checked() const { return IsChecked(); }
433#endif // WXWIN_COMPATIBILITY_2
434
2b854a32 435public:
29006414 436 wxString m_commandString; // String event argument
2b854a32
VZ
437 int m_commandInt;
438 long m_extraLong; // Additional information (e.g. select/deselect)
439 void* m_clientData; // Arbitrary client data
440 wxClientData* m_clientObject; // Arbitrary client object
c801d85f
KB
441};
442
fd3f686c
VZ
443// this class adds a possibility to react (from the user) code to a control
444// notification: allow or veto the operation being reported.
2b854a32 445class WXDLLEXPORT wxNotifyEvent : public wxCommandEvent
fd3f686c
VZ
446{
447public:
448 wxNotifyEvent(wxEventType commandType = wxEVT_NULL, int id = 0)
449 : wxCommandEvent(commandType, id) { m_bAllow = TRUE; }
450
23f681ec 451 // veto the operation (usually it's allowed by default)
fd3f686c
VZ
452 void Veto() { m_bAllow = FALSE; }
453
23f681ec
VZ
454 // allow the operation if it was disabled by default
455 void Allow() { m_bAllow = TRUE; }
456
fd3f686c
VZ
457 // for implementation code only: is the operation allowed?
458 bool IsAllowed() const { return m_bAllow; }
459
924ef850
RR
460 // probably useless: CopyObject() is used for deferred event
461 // handling but wxNotifyEvent must be processed immediately
462 void CopyObject(wxObject& obj) const;
463
fd3f686c
VZ
464private:
465 bool m_bAllow;
466
92976ab6 467 DECLARE_DYNAMIC_CLASS(wxNotifyEvent)
fd3f686c
VZ
468};
469
d1367c3d
RR
470// Scroll event class, derived form wxCommandEvent. wxScrollEvents are
471// sent by wxSlider and wxScrollbar.
c801d85f
KB
472/*
473 wxEVT_SCROLL_TOP
474 wxEVT_SCROLL_BOTTOM
475 wxEVT_SCROLL_LINEUP
476 wxEVT_SCROLL_LINEDOWN
477 wxEVT_SCROLL_PAGEUP
478 wxEVT_SCROLL_PAGEDOWN
479 wxEVT_SCROLL_THUMBTRACK
7d56fb8f 480 wxEVT_SCROLL_THUMBRELEASE
c801d85f
KB
481*/
482
2b854a32 483class WXDLLEXPORT wxScrollEvent : public wxCommandEvent
c801d85f 484{
2b854a32 485 DECLARE_DYNAMIC_CLASS(wxScrollEvent)
c801d85f 486
2b854a32
VZ
487public:
488 wxScrollEvent(wxEventType commandType = wxEVT_NULL,
489 int id = 0, int pos = 0, int orient = 0);
490 ~wxScrollEvent() {}
491
492 /*
493 * Accessors
494 *
495 */
496
497 int GetOrientation() const { return (int) m_extraLong ; }
498 int GetPosition() const { return m_commandInt ; }
499 void SetOrientation(int orient) { m_extraLong = (long) orient; }
500 void SetPosition(int pos) { m_commandInt = pos; }
c801d85f
KB
501};
502
d1367c3d
RR
503// ScrollWin event class, derived fom wxEvent. wxScrollWinEvents
504// are sent by wxWindow.
505/*
506 wxEVT_SCROLLWIN_TOP
507 wxEVT_SCROLLWIN_BOTTOM
508 wxEVT_SCROLLWIN_LINEUP
509 wxEVT_SCROLLWIN_LINEDOWN
510 wxEVT_SCROLLWIN_PAGEUP
511 wxEVT_SCROLLWIN_PAGEDOWN
512 wxEVT_SCROLLWIN_THUMBTRACK
7d56fb8f 513 wxEVT_SCROLLWIN_THUMBRELEASE
d1367c3d
RR
514*/
515
516class WXDLLEXPORT wxScrollWinEvent : public wxEvent
517{
518 DECLARE_DYNAMIC_CLASS(wxScrollWinEvent)
519
520public:
521 wxScrollWinEvent(wxEventType commandType = wxEVT_NULL,
522 int pos = 0, int orient = 0);
523 ~wxScrollWinEvent() {}
524
525 /*
526 * Accessors
527 */
528
529 int GetOrientation() const { return (int) m_extraLong ; }
530 int GetPosition() const { return m_commandInt ; }
531 void SetOrientation(int orient) { m_extraLong = (long) orient; }
532 void SetPosition(int pos) { m_commandInt = pos; }
533
3c679789 534 void CopyObject(wxObject& object_dest) const;
d1367c3d
RR
535public:
536 int m_commandInt; // Additional information
20947e08 537 long m_extraLong;
d1367c3d
RR
538};
539
c801d85f
KB
540// Mouse event class
541
542/*
543 wxEVT_LEFT_DOWN
544 wxEVT_LEFT_UP
545 wxEVT_MIDDLE_DOWN
546 wxEVT_MIDDLE_UP
547 wxEVT_RIGHT_DOWN
548 wxEVT_RIGHT_UP
549 wxEVT_MOTION
550 wxEVT_ENTER_WINDOW
551 wxEVT_LEAVE_WINDOW
552 wxEVT_LEFT_DCLICK
553 wxEVT_MIDDLE_DCLICK
554 wxEVT_RIGHT_DCLICK
555 wxEVT_NC_LEFT_DOWN
556 wxEVT_NC_LEFT_UP,
557 wxEVT_NC_MIDDLE_DOWN,
558 wxEVT_NC_MIDDLE_UP,
559 wxEVT_NC_RIGHT_DOWN,
560 wxEVT_NC_RIGHT_UP,
561 wxEVT_NC_MOTION,
562 wxEVT_NC_ENTER_WINDOW,
563 wxEVT_NC_LEAVE_WINDOW,
564 wxEVT_NC_LEFT_DCLICK,
565 wxEVT_NC_MIDDLE_DCLICK,
566 wxEVT_NC_RIGHT_DCLICK,
567*/
568
2b854a32 569class WXDLLEXPORT wxMouseEvent : public wxEvent
c801d85f 570{
2b854a32 571 DECLARE_DYNAMIC_CLASS(wxMouseEvent)
c801d85f 572
2b854a32
VZ
573public:
574 wxMouseEvent(wxEventType mouseType = wxEVT_NULL);
c801d85f 575
2b854a32
VZ
576 // Was it a button event? (*doesn't* mean: is any button *down*?)
577 bool IsButton() const { return Button(-1); }
c801d85f 578
2b854a32
VZ
579 // Was it a down event from button 1, 2 or 3 or any?
580 bool ButtonDown(int but = -1) const;
c801d85f 581
2b854a32
VZ
582 // Was it a dclick event from button 1, 2 or 3 or any?
583 bool ButtonDClick(int but = -1) const;
c801d85f 584
2b854a32
VZ
585 // Was it a up event from button 1, 2 or 3 or any?
586 bool ButtonUp(int but = -1) const;
c801d85f 587
2b854a32
VZ
588 // Was the given button 1,2,3 or any changing state?
589 bool Button(int but) const;
c801d85f 590
2b854a32
VZ
591 // Was the given button 1,2,3 or any in Down state?
592 bool ButtonIsDown(int but) const;
c801d85f 593
2b854a32
VZ
594 // Find state of shift/control keys
595 bool ControlDown() const { return m_controlDown; }
596 bool MetaDown() const { return m_metaDown; }
597 bool AltDown() const { return m_altDown; }
598 bool ShiftDown() const { return m_shiftDown; }
c801d85f 599
2b854a32
VZ
600 // Find which event was just generated
601 bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); }
602 bool MiddleDown() const { return (m_eventType == wxEVT_MIDDLE_DOWN); }
603 bool RightDown() const { return (m_eventType == wxEVT_RIGHT_DOWN); }
c801d85f 604
2b854a32
VZ
605 bool LeftUp() const { return (m_eventType == wxEVT_LEFT_UP); }
606 bool MiddleUp() const { return (m_eventType == wxEVT_MIDDLE_UP); }
607 bool RightUp() const { return (m_eventType == wxEVT_RIGHT_UP); }
c801d85f 608
2b854a32
VZ
609 bool LeftDClick() const { return (m_eventType == wxEVT_LEFT_DCLICK); }
610 bool MiddleDClick() const { return (m_eventType == wxEVT_MIDDLE_DCLICK); }
611 bool RightDClick() const { return (m_eventType == wxEVT_RIGHT_DCLICK); }
c801d85f 612
2b854a32
VZ
613 // Find the current state of the mouse buttons (regardless
614 // of current event type)
615 bool LeftIsDown() const { return m_leftDown; }
616 bool MiddleIsDown() const { return m_middleDown; }
617 bool RightIsDown() const { return m_rightDown; }
c801d85f 618
2b854a32
VZ
619 // True if a button is down and the mouse is moving
620 bool Dragging() const
621 {
622 return ((m_eventType == wxEVT_MOTION) &&
623 (LeftIsDown() || MiddleIsDown() || RightIsDown()));
624 }
c801d85f 625
2b854a32
VZ
626 // True if the mouse is moving, and no button is down
627 bool Moving() const { return (m_eventType == wxEVT_MOTION); }
c801d85f 628
2b854a32
VZ
629 // True if the mouse is just entering the window
630 bool Entering() const { return (m_eventType == wxEVT_ENTER_WINDOW); }
c801d85f 631
2b854a32
VZ
632 // True if the mouse is just leaving the window
633 bool Leaving() const { return (m_eventType == wxEVT_LEAVE_WINDOW); }
c801d85f 634
2b854a32 635 // Find the position of the event
20947e08 636 void GetPosition(wxCoord *xpos, wxCoord *ypos) const
b02da6b1
VZ
637 {
638 if (xpos)
20947e08 639 *xpos = m_x;
b02da6b1
VZ
640 if (ypos)
641 *ypos = m_y;
642 }
643
0e528b99 644#ifndef __WIN16__
bf57d1ad 645 void GetPosition(long *xpos, long *ypos) const
b02da6b1
VZ
646 {
647 if (xpos)
20947e08 648 *xpos = (long)m_x;
b02da6b1 649 if (ypos)
bf57d1ad 650 *ypos = (long)m_y;
b02da6b1 651 }
0e528b99 652#endif
c801d85f 653
2b854a32
VZ
654 // Find the position of the event
655 wxPoint GetPosition() const { return wxPoint(m_x, m_y); }
c801d85f 656
2b854a32
VZ
657 // Find the logical position of the event given the DC
658 wxPoint GetLogicalPosition(const wxDC& dc) const ;
c801d85f 659
2b854a32
VZ
660 // Compatibility
661#if WXWIN_COMPATIBILITY
20947e08 662 void Position(long *xpos, long *ypos) const
b02da6b1
VZ
663 {
664 if (xpos)
20947e08 665 *xpos = (long)m_x;
b02da6b1
VZ
666 if (ypos)
667 *ypos = (long)m_y;
668 }
669
2b854a32
VZ
670 void Position(float *xpos, float *ypos) const
671 {
672 *xpos = (float) m_x; *ypos = (float) m_y;
673 }
674#endif // WXWIN_COMPATIBILITY
c801d85f 675
2b854a32 676 // Get X position
6cedba09 677 wxCoord GetX() const { return m_x; }
c801d85f 678
2b854a32 679 // Get Y position
6cedba09 680 wxCoord GetY() const { return m_y; }
c801d85f 681
aadbdf11
GL
682 void CopyObject(wxObject& obj) const;
683
c801d85f 684public:
b02da6b1
VZ
685 wxCoord m_x, m_y;
686
2b854a32
VZ
687 bool m_leftDown;
688 bool m_middleDown;
689 bool m_rightDown;
690
691 bool m_controlDown;
692 bool m_shiftDown;
693 bool m_altDown;
694 bool m_metaDown;
c801d85f
KB
695};
696
43b5058d
VZ
697// Cursor set event
698
699/*
700 wxEVT_SET_CURSOR
701 */
702
703class WXDLLEXPORT wxSetCursorEvent : public wxEvent
704{
705public:
706 wxSetCursorEvent(wxCoord x, wxCoord y)
707 {
708 m_eventType = wxEVT_SET_CURSOR;
709
710 m_x = x;
711 m_y = y;
712 }
713
714 wxCoord GetX() const { return m_x; }
715 wxCoord GetY() const { return m_y; }
716
717 void SetCursor(const wxCursor& cursor) { m_cursor = cursor; }
718 const wxCursor& GetCursor() const { return m_cursor; }
719 bool HasCursor() const { return m_cursor.Ok(); }
720
721private:
722 wxCoord m_x, m_y;
723 wxCursor m_cursor;
724};
725
c801d85f
KB
726// Keyboard input event class
727
728/*
729 wxEVT_CHAR
730 wxEVT_CHAR_HOOK
4ce81a75 731 wxEVT_KEY_DOWN
c801d85f
KB
732 wxEVT_KEY_UP
733 */
734
2b854a32 735class WXDLLEXPORT wxKeyEvent : public wxEvent
c801d85f 736{
2b854a32 737 DECLARE_DYNAMIC_CLASS(wxKeyEvent)
c801d85f
KB
738
739public:
2b854a32 740 wxKeyEvent(wxEventType keyType = wxEVT_NULL);
c801d85f 741
2b854a32
VZ
742 // Find state of shift/control keys
743 bool ControlDown() const { return m_controlDown; }
744 bool MetaDown() const { return m_metaDown; }
745 bool AltDown() const { return m_altDown; }
746 bool ShiftDown() const { return m_shiftDown; }
f6bcfd97
BP
747
748 bool HasModifiers() const { return ControlDown() || AltDown() || MetaDown(); }
749
750 // get the key code: an ASCII7 char or an element of wxKeyCode enum
751 int GetKeyCode() const { return (int)m_keyCode; }
c801d85f 752
2b854a32 753 // Find the position of the event
b02da6b1
VZ
754 void GetPosition(wxCoord *xpos, wxCoord *ypos) const
755 {
20947e08 756 if (xpos) *xpos = m_x;
b02da6b1
VZ
757 if (ypos) *ypos = m_y;
758 }
759
0e528b99 760#ifndef __WIN16__
bf57d1ad 761 void GetPosition(long *xpos, long *ypos) const
b02da6b1 762 {
20947e08 763 if (xpos) *xpos = (long)m_x;
bf57d1ad 764 if (ypos) *ypos = (long)m_y;
b02da6b1 765 }
0e528b99 766#endif
803ef874
JS
767
768 wxPoint GetPosition() const
769 { return wxPoint(m_x, m_y); }
c801d85f 770
2b854a32 771 // Get X position
b02da6b1 772 wxCoord GetX() const { return m_x; }
c801d85f 773
2b854a32 774 // Get Y position
b02da6b1 775 wxCoord GetY() const { return m_y; }
c801d85f 776
aadbdf11
GL
777 void CopyObject(wxObject& obj) const;
778
f6bcfd97
BP
779 // deprecated
780 long KeyCode() const { return m_keyCode; }
781
2b854a32 782public:
b02da6b1
VZ
783 wxCoord m_x, m_y;
784
2b854a32 785 long m_keyCode;
b02da6b1 786
2b854a32
VZ
787 bool m_controlDown;
788 bool m_shiftDown;
789 bool m_altDown;
790 bool m_metaDown;
b0e813a0 791 bool m_scanCode;
c801d85f
KB
792};
793
794// Size event class
795/*
796 wxEVT_SIZE
797 */
798
2b854a32 799class WXDLLEXPORT wxSizeEvent : public wxEvent
c801d85f 800{
2b854a32 801 DECLARE_DYNAMIC_CLASS(wxSizeEvent)
c801d85f 802
2b854a32
VZ
803public:
804 wxSize m_size;
c801d85f 805
2b854a32
VZ
806 wxSizeEvent() { m_eventType = wxEVT_SIZE; }
807 wxSizeEvent(const wxSize& sz, int id = 0)
808 : m_size(sz)
809 { m_eventType = wxEVT_SIZE; m_id = id; }
c801d85f 810
2b854a32 811 wxSize GetSize() const { return m_size; }
aadbdf11
GL
812
813 void CopyObject(wxObject& obj) const;
c801d85f
KB
814};
815
816// Move event class
817
818/*
819 wxEVT_MOVE
820 */
821
2b854a32 822class WXDLLEXPORT wxMoveEvent : public wxEvent
c801d85f 823{
2b854a32 824 DECLARE_DYNAMIC_CLASS(wxMoveEvent)
c801d85f 825
2b854a32
VZ
826public:
827 wxPoint m_pos;
c801d85f 828
2b854a32
VZ
829 wxMoveEvent() { m_eventType = wxEVT_MOVE; }
830 wxMoveEvent(const wxPoint& pos, int id = 0)
831 : m_pos(pos)
832 { m_eventType = wxEVT_MOVE; m_id = id; }
c801d85f 833
2b854a32 834 wxPoint GetPosition() const { return m_pos; }
aadbdf11
GL
835
836 void CopyObject(wxObject& obj) const;
c801d85f
KB
837};
838
839// Paint event class
840/*
841 wxEVT_PAINT
842 wxEVT_NC_PAINT
843 wxEVT_PAINT_ICON
844 */
845
b078fa02
JS
846#if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__))
847 // see comments in src/msw|os2/dcclient.cpp where g_isPainting is defined
98243fed 848 extern WXDLLEXPORT int g_isPainting;
edccf428
VZ
849#endif // debug
850
2b854a32 851class WXDLLEXPORT wxPaintEvent : public wxEvent
c801d85f 852{
2b854a32 853 DECLARE_DYNAMIC_CLASS(wxPaintEvent)
c801d85f 854
2b854a32 855public:
edccf428
VZ
856 wxPaintEvent(int Id = 0)
857 {
858 m_eventType = wxEVT_PAINT;
859 m_id = Id;
860
b078fa02 861#if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__))
edccf428
VZ
862 // set the internal flag for the duration of processing of WM_PAINT
863 g_isPainting++;
864#endif // debug
865 }
866
b078fa02 867#if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__))
edccf428
VZ
868 ~wxPaintEvent()
869 {
870 g_isPainting--;
871 }
872#endif // debug
c801d85f
KB
873};
874
875// Erase background event class
876/*
877 wxEVT_ERASE_BACKGROUND
878 */
879
2b854a32 880class WXDLLEXPORT wxEraseEvent : public wxEvent
c801d85f 881{
2b854a32
VZ
882 DECLARE_DYNAMIC_CLASS(wxEraseEvent)
883
884public:
885 wxDC *m_dc;
886
887 wxEraseEvent(int Id = 0, wxDC *dc = (wxDC *) NULL)
888 { m_eventType = wxEVT_ERASE_BACKGROUND; m_id = Id; m_dc = dc; }
889 wxDC *GetDC() const { return m_dc; }
aadbdf11
GL
890
891 void CopyObject(wxObject& obj) const;
c801d85f
KB
892};
893
894// Focus event class
895/*
896 wxEVT_SET_FOCUS
897 wxEVT_KILL_FOCUS
898 */
899
2b854a32 900class WXDLLEXPORT wxFocusEvent : public wxEvent
c801d85f 901{
2b854a32 902 DECLARE_DYNAMIC_CLASS(wxFocusEvent)
c801d85f 903
2b854a32
VZ
904public:
905 wxFocusEvent(wxEventType type = wxEVT_NULL, int Id = 0)
906 { m_eventType = type; m_id = Id; }
c801d85f
KB
907};
908
909// Activate event class
910/*
911 wxEVT_ACTIVATE
912 wxEVT_ACTIVATE_APP
913 */
914
2b854a32 915class WXDLLEXPORT wxActivateEvent : public wxEvent
c801d85f 916{
2b854a32
VZ
917 DECLARE_DYNAMIC_CLASS(wxActivateEvent)
918
919public:
920 wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = TRUE, int Id = 0)
921 { m_eventType = type; m_active = active; m_id = Id; }
922 bool GetActive() const { return m_active; }
c801d85f 923
aadbdf11
GL
924 void CopyObject(wxObject& obj) const;
925
2b854a32
VZ
926private:
927 bool m_active;
c801d85f
KB
928};
929
930// InitDialog event class
931/*
932 wxEVT_INIT_DIALOG
933 */
934
2b854a32 935class WXDLLEXPORT wxInitDialogEvent : public wxEvent
c801d85f 936{
2b854a32 937 DECLARE_DYNAMIC_CLASS(wxInitDialogEvent)
c801d85f 938
2b854a32
VZ
939public:
940 wxInitDialogEvent(int Id = 0)
941 { m_eventType = wxEVT_INIT_DIALOG; m_id = Id; }
c801d85f
KB
942};
943
944// Miscellaneous menu event class
945/*
946 wxEVT_MENU_CHAR,
947 wxEVT_MENU_INIT,
948 wxEVT_MENU_HIGHLIGHT,
949 wxEVT_POPUP_MENU_INIT,
950 wxEVT_CONTEXT_MENU,
951*/
952
2b854a32 953class WXDLLEXPORT wxMenuEvent : public wxEvent
c801d85f 954{
2b854a32 955 DECLARE_DYNAMIC_CLASS(wxMenuEvent)
c801d85f
KB
956
957public:
aadbdf11
GL
958 wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0)
959 { m_eventType = type; m_menuId = id; }
c801d85f 960
aadbdf11 961 int GetMenuId() const { return m_menuId; }
c801d85f 962
aadbdf11 963 void CopyObject(wxObject& obj) const;
2b854a32 964private:
aadbdf11 965 int m_menuId;
c801d85f
KB
966};
967
968// Window close or session close event class
969/*
970 wxEVT_CLOSE_WINDOW,
971 wxEVT_END_SESSION,
972 wxEVT_QUERY_END_SESSION
973 */
974
2b854a32 975class WXDLLEXPORT wxCloseEvent : public wxEvent
c801d85f 976{
2b854a32
VZ
977 DECLARE_DYNAMIC_CLASS(wxCloseEvent)
978
c801d85f 979public:
2b854a32
VZ
980 wxCloseEvent(wxEventType type = wxEVT_NULL, int id = 0)
981 {
982 m_eventType = type;
983 m_loggingOff = TRUE;
984 m_veto = FALSE; // should be FALSE by default
985 m_id = id;
986#if WXWIN_COMPATIBILITY
987 m_force = FALSE;
988#endif // WXWIN_COMPATIBILITY
989 m_canVeto = TRUE;
990 }
991
992 void SetLoggingOff(bool logOff) { m_loggingOff = logOff; }
993 bool GetLoggingOff() const { return m_loggingOff; }
994
fe4e9e6c
VZ
995 void Veto(bool veto = TRUE)
996 {
997 // GetVeto() will return FALSE anyhow...
998 wxCHECK_RET( m_canVeto,
223d09f6 999 wxT("call to Veto() ignored (can't veto this event)") );
fe4e9e6c
VZ
1000
1001 m_veto = veto;
1002 }
2b854a32 1003 void SetCanVeto(bool canVeto) { m_canVeto = canVeto; }
e3065973 1004 // No more asserts here please, the one you put here was wrong.
2b854a32 1005 bool CanVeto() const { return m_canVeto; }
fe4e9e6c 1006 bool GetVeto() const { return m_canVeto && m_veto; }
c801d85f 1007
2b854a32
VZ
1008#if WXWIN_COMPATIBILITY
1009 // This is probably obsolete now, since we use CanVeto instead, in
1010 // both OnCloseWindow and OnQueryEndSession.
1011 // m_force == ! m_canVeto i.e., can't veto means we must force it to close.
1012 void SetForce(bool force) { m_force = force; }
1013 bool GetForce() const { return m_force; }
1014#endif
1015
aadbdf11
GL
1016 void CopyObject(wxObject& obj) const;
1017
2b854a32
VZ
1018protected:
1019 bool m_loggingOff;
1020 bool m_veto, m_canVeto;
1021
1022#if WXWIN_COMPATIBILITY
1023 bool m_force;
1024#endif
c801d85f
KB
1025};
1026
1027/*
1028 wxEVT_SHOW
1029 */
1030
2b854a32 1031class WXDLLEXPORT wxShowEvent : public wxEvent
c801d85f 1032{
2b854a32
VZ
1033 DECLARE_DYNAMIC_CLASS(wxShowEvent)
1034
c801d85f
KB
1035public:
1036
2b854a32
VZ
1037 wxShowEvent(int id = 0, bool show = FALSE)
1038 { m_eventType = wxEVT_SHOW; m_id = id; m_show = show; }
c801d85f 1039
2b854a32
VZ
1040 void SetShow(bool show) { m_show = show; }
1041 bool GetShow() const { return m_show; }
c801d85f 1042
aadbdf11
GL
1043 void CopyObject(wxObject& obj) const;
1044
c801d85f 1045protected:
2b854a32 1046 bool m_show;
c801d85f
KB
1047};
1048
1049/*
1050 wxEVT_ICONIZE
1051 */
1052
2b854a32 1053class WXDLLEXPORT wxIconizeEvent : public wxEvent
c801d85f 1054{
2b854a32 1055 DECLARE_DYNAMIC_CLASS(wxIconizeEvent)
c801d85f 1056
2b854a32
VZ
1057public:
1058 wxIconizeEvent(int id = 0)
1059 { m_eventType = wxEVT_ICONIZE; m_id = id; }
c801d85f
KB
1060};
1061
1062/*
1063 wxEVT_MAXIMIZE
1064 */
1065
2b854a32 1066class WXDLLEXPORT wxMaximizeEvent : public wxEvent
c801d85f 1067{
2b854a32 1068 DECLARE_DYNAMIC_CLASS(wxMaximizeEvent)
c801d85f 1069
2b854a32
VZ
1070public:
1071 wxMaximizeEvent(int id = 0)
1072 { m_eventType = wxEVT_MAXIMIZE; m_id = id; }
c801d85f
KB
1073};
1074
1075// Joystick event class
1076/*
1077 wxEVT_JOY_BUTTON_DOWN,
1078 wxEVT_JOY_BUTTON_UP,
1079 wxEVT_JOY_MOVE,
1080 wxEVT_JOY_ZMOVE
1081*/
1082
1083// Which joystick? Same as Windows ids so no conversion necessary.
1084#define wxJOYSTICK1 0
1085#define wxJOYSTICK2 1
1086
1087// Which button is down?
1088#define wxJOY_BUTTON1 1
1089#define wxJOY_BUTTON2 2
1090#define wxJOY_BUTTON3 4
1091#define wxJOY_BUTTON4 8
1092#define wxJOY_BUTTON_ANY -1
1093
2b854a32 1094class WXDLLEXPORT wxJoystickEvent : public wxEvent
c801d85f 1095{
2b854a32
VZ
1096 DECLARE_DYNAMIC_CLASS(wxJoystickEvent)
1097
1098public:
1099 wxPoint m_pos;
1100 int m_zPosition;
1101 int m_buttonChange; // Which button changed?
1102 int m_buttonState; // Which buttons are down?
1103 int m_joyStick; // Which joystick?
1104
1105 wxJoystickEvent(wxEventType type = wxEVT_NULL,
1106 int state = 0,
1107 int joystick = wxJOYSTICK1,
1108 int change = 0)
1109 {
1110 m_eventType = type;
1111 m_buttonState = state;
1112 m_pos = wxPoint(0,0);
1113 m_zPosition = 0;
1114 m_joyStick = joystick;
1115 m_buttonChange = change;
1116 }
1117
1118 wxPoint GetPosition() const { return m_pos; }
1119 int GetZPosition() const { return m_zPosition; }
1120 int GetButtonState() const { return m_buttonState; }
1121 int GetButtonChange() const { return m_buttonChange; }
1122 int GetJoystick() const { return m_joyStick; }
1123
1124 void SetJoystick(int stick) { m_joyStick = stick; }
1125 void SetButtonState(int state) { m_buttonState = state; }
1126 void SetButtonChange(int change) { m_buttonChange = change; }
1127 void SetPosition(const wxPoint& pos) { m_pos = pos; }
1128 void SetZPosition(int zPos) { m_zPosition = zPos; }
1129
1130 // Was it a button event? (*doesn't* mean: is any button *down*?)
1131 bool IsButton() const { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) ||
b70ababc 1132 (GetEventType() == wxEVT_JOY_BUTTON_UP)); }
2b854a32
VZ
1133
1134 // Was it a move event?
1135 bool IsMove() const { return (GetEventType() == wxEVT_JOY_MOVE) ; }
1136
1137 // Was it a zmove event?
1138 bool IsZMove() const { return (GetEventType() == wxEVT_JOY_ZMOVE) ; }
1139
1140 // Was it a down event from button 1, 2, 3, 4 or any?
1141 bool ButtonDown(int but = wxJOY_BUTTON_ANY) const
c801d85f 1142 { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) &&
2b854a32 1143 ((but == wxJOY_BUTTON_ANY) || (but == m_buttonChange))); }
c801d85f 1144
2b854a32
VZ
1145 // Was it a up event from button 1, 2, 3 or any?
1146 bool ButtonUp(int but = wxJOY_BUTTON_ANY) const
c801d85f 1147 { return ((GetEventType() == wxEVT_JOY_BUTTON_UP) &&
2b854a32 1148 ((but == wxJOY_BUTTON_ANY) || (but == m_buttonChange))); }
c801d85f 1149
2b854a32
VZ
1150 // Was the given button 1,2,3,4 or any in Down state?
1151 bool ButtonIsDown(int but = wxJOY_BUTTON_ANY) const
c801d85f 1152 { return (((but == wxJOY_BUTTON_ANY) && (m_buttonState != 0)) ||
2b854a32 1153 ((m_buttonState & but) == but)); }
f305c661
GL
1154
1155 void CopyObject(wxObject& obj) const;
c801d85f
KB
1156};
1157
1158// Drop files event class
1159/*
1160 wxEVT_DROP_FILES
1161 */
1162
2b854a32 1163class WXDLLEXPORT wxDropFilesEvent : public wxEvent
c801d85f 1164{
2b854a32 1165 DECLARE_DYNAMIC_CLASS(wxDropFilesEvent)
c801d85f 1166
2b854a32
VZ
1167public:
1168 int m_noFiles;
1169 wxPoint m_pos;
1170 wxString* m_files; // Memory (de)allocated by code calling ProcessEvent
1171
1172 wxDropFilesEvent(wxEventType type = wxEVT_NULL,
1173 int noFiles = 0,
1174 wxString *files = (wxString *) NULL)
1175 { m_eventType = type; m_noFiles = noFiles; m_files = files; }
1176
1177 wxPoint GetPosition() const { return m_pos; }
1178 int GetNumberOfFiles() const { return m_noFiles; }
1179 wxString *GetFiles() const { return m_files; }
f305c661
GL
1180
1181 void CopyObject(wxObject& obj) const;
c801d85f
KB
1182};
1183
c801d85f
KB
1184// Update UI event
1185/*
1186 wxEVT_UPDATE_UI
1187 */
1188
2b854a32 1189class WXDLLEXPORT wxUpdateUIEvent : public wxCommandEvent
c801d85f 1190{
2b854a32 1191 DECLARE_DYNAMIC_CLASS(wxUpdateUIEvent)
c801d85f 1192
2b854a32
VZ
1193public:
1194 wxUpdateUIEvent(wxWindowID commandId = 0)
1195 {
1196 m_eventType = wxEVT_UPDATE_UI;
1197 m_id = commandId;
1198 m_checked = FALSE;
1199 m_setChecked = FALSE;
1200 m_enabled = FALSE;
1201 m_setEnabled = FALSE;
1202 m_setText = FALSE;
1203 m_text = "";
1204 }
1205
1206 bool GetChecked() const { return m_checked; }
1207 bool GetEnabled() const { return m_enabled; }
1208 wxString GetText() const { return m_text; }
1209 bool GetSetText() const { return m_setText; }
1210 bool GetSetChecked() const { return m_setChecked; }
1211 bool GetSetEnabled() const { return m_setEnabled; }
1212
1213 void Check(bool check) { m_checked = check; m_setChecked = TRUE; }
1214 void Enable(bool enable) { m_enabled = enable; m_setEnabled = TRUE; }
1215 void SetText(const wxString& text) { m_text = text; m_setText = TRUE; }
c801d85f 1216
f305c661
GL
1217 void CopyObject(wxObject& obj) const;
1218
2b854a32
VZ
1219protected:
1220 bool m_checked;
1221 bool m_enabled;
1222 bool m_setEnabled;
1223 bool m_setText;
1224 bool m_setChecked;
1225 wxString m_text;
c801d85f
KB
1226};
1227
1228/*
1229 wxEVT_SYS_COLOUR_CHANGED
1230 */
1231
1232// TODO: shouldn't all events record the window ID?
2b854a32 1233class WXDLLEXPORT wxSysColourChangedEvent : public wxEvent
c801d85f 1234{
2b854a32 1235 DECLARE_DYNAMIC_CLASS(wxSysColourChangedEvent)
c801d85f 1236
2b854a32
VZ
1237public:
1238 wxSysColourChangedEvent()
1239 { m_eventType = wxEVT_SYS_COLOUR_CHANGED; }
c801d85f
KB
1240};
1241
f7bd2698
JS
1242/*
1243 wxEVT_PALETTE_CHANGED
1244 */
1245
2b854a32 1246class WXDLLEXPORT wxPaletteChangedEvent : public wxEvent
f7bd2698 1247{
2b854a32 1248 DECLARE_DYNAMIC_CLASS(wxPaletteChangedEvent)
f7bd2698
JS
1249
1250public:
2b854a32
VZ
1251 wxPaletteChangedEvent(wxWindowID id = 0) : wxEvent(id)
1252 {
1253 m_eventType = wxEVT_PALETTE_CHANGED;
1254 m_changedWindow = (wxWindow *) NULL;
1255 }
f7bd2698 1256
2b854a32
VZ
1257 void SetChangedWindow(wxWindow* win) { m_changedWindow = win; }
1258 wxWindow* GetChangedWindow() const { return m_changedWindow; }
f7bd2698 1259
f305c661
GL
1260 void CopyObject(wxObject& obj) const;
1261
f7bd2698 1262protected:
2b854a32 1263 wxWindow* m_changedWindow;
f7bd2698
JS
1264};
1265
1266/*
1267 wxEVT_QUERY_NEW_PALETTE
1268 Indicates the window is getting keyboard focus and should re-do its palette.
1269 */
1270
2b854a32 1271class WXDLLEXPORT wxQueryNewPaletteEvent : public wxEvent
f7bd2698 1272{
2b854a32 1273 DECLARE_DYNAMIC_CLASS(wxQueryNewPaletteEvent)
f7bd2698
JS
1274
1275public:
2b854a32
VZ
1276 wxQueryNewPaletteEvent(wxWindowID id = 0): wxEvent(id)
1277 { m_eventType = wxEVT_QUERY_NEW_PALETTE; m_paletteRealized = FALSE; }
f7bd2698 1278
2b854a32
VZ
1279 // App sets this if it changes the palette.
1280 void SetPaletteRealized(bool realized) { m_paletteRealized = realized; }
1281 bool GetPaletteRealized() const { return m_paletteRealized; }
f7bd2698 1282
f305c661
GL
1283 void CopyObject(wxObject& obj) const;
1284
f7bd2698 1285protected:
2b854a32 1286 bool m_paletteRealized;
f7bd2698
JS
1287};
1288
7fdefd57
VZ
1289/*
1290 Event generated by dialog navigation keys
1291 wxEVT_NAVIGATION_KEY
1292 */
d9506e77
VZ
1293// NB: don't derive from command event to avoid being propagated to the parent
1294class WXDLLEXPORT wxNavigationKeyEvent : public wxEvent
7fdefd57 1295{
7fdefd57 1296public:
d9506e77
VZ
1297 wxNavigationKeyEvent()
1298 {
1299 SetEventType(wxEVT_NAVIGATION_KEY);
1300
1301 m_flags = IsForward | Propagate; // defaults are for TAB
1302 m_focus = (wxWindow *)NULL;
1303 }
7fdefd57 1304
2b854a32 1305 // direction: forward (true) or backward (false)
d9506e77
VZ
1306 bool GetDirection() const
1307 { return (m_flags & IsForward) != 0; }
1308 void SetDirection(bool bForward)
1309 { if ( bForward ) m_flags |= IsForward; else m_flags &= ~IsForward; }
7fdefd57 1310
2b854a32
VZ
1311 // it may be a window change event (MDI, notebook pages...) or a control
1312 // change event
d9506e77
VZ
1313 bool IsWindowChange() const
1314 { return (m_flags & WinChange) != 0; }
1315 void SetWindowChange(bool bIs)
1316 { if ( bIs ) m_flags |= WinChange; else m_flags &= ~WinChange; }
1317
1318 // some navigation events are meant to be propagated upwards (Windows
1319 // convention is to do this for TAB events) while others should always
1320 // cycle inside the panel/radiobox/whatever we're current inside
1321 bool ShouldPropagate() const
1322 { return (m_flags & Propagate) != 0; }
1323 void SetPropagate(bool bDoIt)
1324 { if ( bDoIt ) m_flags |= Propagate; else m_flags &= ~Propagate; }
7fdefd57 1325
2b854a32
VZ
1326 // the child which has the focus currently (may be NULL - use
1327 // wxWindow::FindFocus then)
d9506e77
VZ
1328 wxWindow* GetCurrentFocus() const { return m_focus; }
1329 void SetCurrentFocus(wxWindow *win) { m_focus = win; }
1330
1331private:
1332 enum
1333 {
1334 IsForward = 0x0001,
1335 WinChange = 0x0002,
1336 Propagate = 0x0004
1337 };
1338
1339 long m_flags;
1340 wxWindow *m_focus;
1341
1342 DECLARE_DYNAMIC_CLASS(wxNavigationKeyEvent)
7fdefd57
VZ
1343};
1344
42e69d6b
VZ
1345// Window creation/destruction events: the first is sent as soon as window is
1346// created (i.e. the underlying GUI object exists), but when the C++ object is
1347// fully initialized (so virtual functions may be called). The second,
1348// wxEVT_DESTROY, is sent right before the window is destroyed - again, it's
1349// still safe to call virtual functions at this moment
1350/*
1351 wxEVT_CREATE
1352 wxEVT_DESTROY
1353 */
1354
f6bcfd97 1355class WXDLLEXPORT wxWindowCreateEvent : public wxCommandEvent
42e69d6b
VZ
1356{
1357 DECLARE_DYNAMIC_CLASS(wxWindowCreateEvent)
1358
1359public:
1360 wxWindowCreateEvent(wxWindow *win = NULL);
1361
1362 wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
1363};
1364
f6bcfd97 1365class WXDLLEXPORT wxWindowDestroyEvent : public wxCommandEvent
42e69d6b
VZ
1366{
1367 DECLARE_DYNAMIC_CLASS(wxWindowDestroyEvent)
1368
1369public:
1370 wxWindowDestroyEvent(wxWindow *win = NULL);
1371
1372 wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
1373};
1374
bd83cb56 1375// A help event is sent when the user clicks on a window in context-help mode.
b96340e6 1376/*
bd83cb56
VZ
1377 wxEVT_HELP
1378 wxEVT_DETAILED_HELP
1379*/
b96340e6
JS
1380
1381class WXDLLEXPORT wxHelpEvent : public wxCommandEvent
1382{
b96340e6 1383public:
bd83cb56
VZ
1384 wxHelpEvent(wxEventType type = wxEVT_NULL,
1385 wxWindowID id = 0,
1386 const wxPoint& pt = wxDefaultPosition)
1387 {
1388 m_eventType = type;
1389 m_id = id;
1390 m_pos = pt;
1391 }
b96340e6 1392
bd83cb56
VZ
1393 // Position of event (in screen coordinates)
1394 const wxPoint& GetPosition() const { return m_pos; }
1395 void SetPosition(const wxPoint& pos) { m_pos = pos; }
b96340e6 1396
bd83cb56
VZ
1397 // Optional link to further help
1398 const wxString& GetLink() const { return m_link; }
1399 void SetLink(const wxString& link) { m_link = link; }
fb6261e9 1400
bd83cb56
VZ
1401 // Optional target to display help in. E.g. a window specification
1402 const wxString& GetTarget() const { return m_target; }
1403 void SetTarget(const wxString& target) { m_target = target; }
fb6261e9 1404
bd83cb56
VZ
1405protected:
1406 wxPoint m_pos;
1407 wxString m_target;
1408 wxString m_link;
1409
1410private:
1411 DECLARE_DYNAMIC_CLASS(wxHelpEvent)
b96340e6
JS
1412};
1413
e90c1d2a
VZ
1414#endif // wxUSE_GUI
1415
1416// Idle event
1417/*
1418 wxEVT_IDLE
1419 */
1420
1421class WXDLLEXPORT wxIdleEvent : public wxEvent
1422{
1423 DECLARE_DYNAMIC_CLASS(wxIdleEvent)
1424
1425public:
1426 wxIdleEvent()
1427 { m_eventType = wxEVT_IDLE; m_requestMore = FALSE; }
1428
1429 void RequestMore(bool needMore = TRUE) { m_requestMore = needMore; }
1430 bool MoreRequested() const { return m_requestMore; }
1431
1432 void CopyObject(wxObject& obj) const;
1433
1434protected:
1435 bool m_requestMore;
1436};
1437
e5fb7191 1438/* TODO
c801d85f 1439 wxEVT_POWER,
c801d85f
KB
1440 wxEVT_MOUSE_CAPTURE_CHANGED,
1441 wxEVT_SETTING_CHANGED, // WM_WININICHANGE (NT) / WM_SETTINGCHANGE (Win95)
c801d85f
KB
1442// wxEVT_FONT_CHANGED, // WM_FONTCHANGE: roll into wxEVT_SETTING_CHANGED, but remember to propagate
1443 // wxEVT_FONT_CHANGED to all other windows (maybe).
1444 wxEVT_DRAW_ITEM, // Leave these three as virtual functions in wxControl?? Platform-specific.
1445 wxEVT_MEASURE_ITEM,
1446 wxEVT_COMPARE_ITEM
1447*/
1448
8e193f38
VZ
1449// ============================================================================
1450// event handler and related classes
1451// ============================================================================
1452
c801d85f
KB
1453typedef void (wxObject::*wxObjectEventFunction)(wxEvent&);
1454
1455struct WXDLLEXPORT wxEventTableEntry
77d4384e 1456{
0b5eceb6
VZ
1457 wxEventTableEntry(int evType, int id, int idLast,
1458 wxObjectEventFunction fn, wxObject *data);
82a5f02c 1459
0b5eceb6 1460 int m_eventType; // the event type
77d4384e
RR
1461 int m_id; // control/menu/toolbar id
1462 int m_lastId; // used for ranges of ids
1463 wxObjectEventFunction m_fn; // function to call: not wxEventFunction,
1464 // because of dependency problems
1465
1466 wxObject* m_callbackUserData;
1467};
1468
0b5eceb6 1469struct WXDLLEXPORT wxDynamicEventTableEntry : public wxEventTableEntry
c801d85f 1470{
0b5eceb6
VZ
1471 wxDynamicEventTableEntry(int evType, int id, int idLast,
1472 wxObjectEventFunction fn, wxObject *data)
1473 : wxEventTableEntry(evType, id, idLast, fn, data)
1474 {
1475 }
c801d85f
KB
1476};
1477
1478struct WXDLLEXPORT wxEventTable
1479{
0b5eceb6
VZ
1480 const wxEventTable *baseTable; // base event table (next in chain)
1481 const wxEventTableEntry *entries; // bottom of entry array
c801d85f
KB
1482};
1483
2b854a32 1484class WXDLLEXPORT wxEvtHandler : public wxObject
c801d85f 1485{
2b854a32
VZ
1486 DECLARE_DYNAMIC_CLASS(wxEvtHandler)
1487
1488public:
1489 wxEvtHandler();
1490 ~wxEvtHandler();
1491
1492 wxEvtHandler *GetNextHandler() const { return m_nextHandler; }
1493 wxEvtHandler *GetPreviousHandler() const { return m_previousHandler; }
1494 void SetNextHandler(wxEvtHandler *handler) { m_nextHandler = handler; }
1495 void SetPreviousHandler(wxEvtHandler *handler) { m_previousHandler = handler; }
1496
8e193f38 1497 void SetEvtHandlerEnabled(bool enabled) { m_enabled = enabled; }
2b854a32
VZ
1498 bool GetEvtHandlerEnabled() const { return m_enabled; }
1499
8e193f38
VZ
1500 // process an event right now
1501 virtual bool ProcessEvent(wxEvent& event);
2b854a32 1502
8e193f38
VZ
1503 // add an event to be processed later
1504 void AddPendingEvent(wxEvent& event);
2b854a32 1505
8e193f38
VZ
1506 // process all pending events
1507 void ProcessPendingEvents();
2b854a32 1508
20947e08 1509 // add a
7214297d
GL
1510#if wxUSE_THREADS
1511 bool ProcessThreadEvent(wxEvent& event);
7214297d 1512#endif
2b854a32
VZ
1513
1514 // Dynamic association of a member function handler with the event handler,
1515 // id and event type
77d4384e 1516 void Connect( int id, int lastId, int eventType,
2b854a32
VZ
1517 wxObjectEventFunction func,
1518 wxObject *userData = (wxObject *) NULL );
1519
1520 // Convenience function: take just one id
77d4384e 1521 void Connect( int id, int eventType,
2b854a32
VZ
1522 wxObjectEventFunction func,
1523 wxObject *userData = (wxObject *) NULL )
1524 { Connect(id, -1, eventType, func, userData); }
1525
97d7bfb8
RR
1526 bool Disconnect( int id, int lastId = -1, wxEventType eventType = wxEVT_NULL,
1527 wxObjectEventFunction func = NULL,
1528 wxObject *userData = (wxObject *) NULL );
1529
1530 // Convenience function: take just one id
1531 bool Disconnect( int id, wxEventType eventType = wxEVT_NULL,
1532 wxObjectEventFunction func = NULL,
1533 wxObject *userData = (wxObject *) NULL )
1534 { return Disconnect(id, -1, eventType, func, userData); }
98243fed 1535
8e193f38
VZ
1536 // implementation from now on
1537 virtual bool SearchEventTable(wxEventTable& table, wxEvent& event);
2b854a32 1538 bool SearchDynamicEventTable( wxEvent& event );
c801d85f 1539
63863e09 1540#if wxUSE_THREADS
20947e08
DW
1541 void ClearEventLocker()
1542 {
1543# if !defined(__VISAGECPP__)
1544 delete m_eventsLocker;
1545 m_eventsLocker = NULL;
1546#endif
1547 };
63863e09
JS
1548#endif
1549
8e193f38
VZ
1550 // old stuff
1551
1552#if WXWIN_COMPATIBILITY_2
1553 virtual void OnCommand(wxWindow& WXUNUSED(win),
1554 wxCommandEvent& WXUNUSED(event))
1555 {
1556 wxFAIL_MSG(wxT("shouldn't be called any more"));
1557 }
1558
1559 // Called if child control has no callback function
1560 virtual long Default()
1561 { return GetNextHandler() ? GetNextHandler()->Default() : 0; };
1562#endif // WXWIN_COMPATIBILITY_2
1563
1564#if WXWIN_COMPATIBILITY
1565 virtual bool OnClose();
1566#endif
1567
c801d85f 1568private:
8e193f38 1569 static const wxEventTableEntry sm_eventTableEntries[];
2b854a32 1570
c801d85f 1571protected:
193bf013
VZ
1572 static const wxEventTable sm_eventTable;
1573
1574 virtual const wxEventTable *GetEventTable() const;
1575
c801d85f 1576protected:
63863e09
JS
1577 wxEvtHandler* m_nextHandler;
1578 wxEvtHandler* m_previousHandler;
63863e09 1579 wxList* m_dynamicEvents;
42e69d6b 1580 wxList* m_pendingEvents;
7214297d 1581#if wxUSE_THREADS
20947e08
DW
1582#if defined (__VISAGECPP__)
1583 wxCriticalSection m_eventsLocker;
1584# else
63863e09 1585 wxCriticalSection* m_eventsLocker;
20947e08 1586# endif
7214297d 1587#endif
193bf013
VZ
1588
1589 // optimization: instead of using costly IsKindOf() to decide whether we're
1590 // a window (which is true in 99% of cases), use this flag
63863e09 1591 bool m_isWindow;
8e193f38
VZ
1592
1593 // Is event handler enabled?
1594 bool m_enabled;
c801d85f
KB
1595};
1596
1597typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&);
e90c1d2a 1598#if wxUSE_GUI
c801d85f
KB
1599typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&);
1600typedef void (wxEvtHandler::*wxScrollEventFunction)(wxScrollEvent&);
c5b42c87 1601typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&);
c801d85f
KB
1602typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&);
1603typedef void (wxEvtHandler::*wxMoveEventFunction)(wxMoveEvent&);
1604typedef void (wxEvtHandler::*wxPaintEventFunction)(wxPaintEvent&);
1605typedef void (wxEvtHandler::*wxEraseEventFunction)(wxEraseEvent&);
1606typedef void (wxEvtHandler::*wxMouseEventFunction)(wxMouseEvent&);
1607typedef void (wxEvtHandler::*wxCharEventFunction)(wxKeyEvent&);
1608typedef void (wxEvtHandler::*wxFocusEventFunction)(wxFocusEvent&);
1609typedef void (wxEvtHandler::*wxActivateEventFunction)(wxActivateEvent&);
1610typedef void (wxEvtHandler::*wxMenuEventFunction)(wxMenuEvent&);
1611typedef void (wxEvtHandler::*wxJoystickEventFunction)(wxJoystickEvent&);
1612typedef void (wxEvtHandler::*wxDropFilesEventFunction)(wxDropFilesEvent&);
1613typedef void (wxEvtHandler::*wxInitDialogEventFunction)(wxInitDialogEvent&);
1614typedef void (wxEvtHandler::*wxSysColourChangedFunction)(wxSysColourChangedEvent&);
1615typedef void (wxEvtHandler::*wxUpdateUIEventFunction)(wxUpdateUIEvent&);
1616typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&);
1617typedef void (wxEvtHandler::*wxCloseEventFunction)(wxCloseEvent&);
1618typedef void (wxEvtHandler::*wxShowEventFunction)(wxShowEvent&);
1619typedef void (wxEvtHandler::*wxIconizeEventFunction)(wxShowEvent&);
1620typedef void (wxEvtHandler::*wxMaximizeEventFunction)(wxShowEvent&);
81d66cf3 1621typedef void (wxEvtHandler::*wxNavigationKeyEventFunction)(wxNavigationKeyEvent&);
f7bd2698
JS
1622typedef void (wxEvtHandler::*wxPaletteChangedEventFunction)(wxPaletteChangedEvent&);
1623typedef void (wxEvtHandler::*wxQueryNewPaletteEventFunction)(wxQueryNewPaletteEvent&);
43b5058d
VZ
1624typedef void (wxEvtHandler::*wxWindowCreateEventFunction)(wxWindowCreateEvent&);
1625typedef void (wxEvtHandler::*wxWindowDestroyEventFunction)(wxWindowDestroyEvent&);
1626typedef void (wxEvtHandler::*wxSetCursorEventFunction)(wxSetCursorEvent&);
669f7a11 1627typedef void (wxEvtHandler::*wxNotifyEventFunction)(wxNotifyEvent&);
b96340e6 1628typedef void (wxEvtHandler::*wxHelpEventFunction)(wxHelpEvent&);
e90c1d2a 1629#endif // wxUSE_GUI
c801d85f
KB
1630
1631// N.B. In GNU-WIN32, you *have* to take the address of a member function
1632// (use &) or the compiler crashes...
1633
1634#define DECLARE_EVENT_TABLE() \
1635private:\
2b854a32 1636 static const wxEventTableEntry sm_eventTableEntries[];\
c801d85f 1637protected:\
2b854a32
VZ
1638 static const wxEventTable sm_eventTable;\
1639 virtual const wxEventTable* GetEventTable() const;
c801d85f
KB
1640
1641#define BEGIN_EVENT_TABLE(theClass, baseClass) \
1642const wxEventTable *theClass::GetEventTable() const { return &theClass::sm_eventTable; }\
1643const wxEventTable theClass::sm_eventTable =\
2b854a32 1644 { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] };\
c801d85f
KB
1645const wxEventTableEntry theClass::sm_eventTableEntries[] = { \
1646
1647#define END_EVENT_TABLE() \
82a5f02c 1648 wxEventTableEntry( 0, 0, 0, 0, 0 ) };
2b854a32 1649
c801d85f
KB
1650/*
1651 * Event table macros
1652 */
1653
1654// Generic events
82a5f02c
RR
1655#define EVT_CUSTOM(event, id, func) wxEventTableEntry( event, id, -1, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ),
1656#define EVT_CUSTOM_RANGE(event, id1, id2, func) wxEventTableEntry( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ),
c801d85f
KB
1657
1658// Miscellaneous
82a5f02c
RR
1659#define EVT_SIZE(func) wxEventTableEntry( wxEVT_SIZE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) & func, (wxObject *) NULL ),
1660#define EVT_MOVE(func) wxEventTableEntry( wxEVT_MOVE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMoveEventFunction) & func, (wxObject *) NULL ),
1661#define EVT_CLOSE(func) wxEventTableEntry( wxEVT_CLOSE_WINDOW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
1662#define EVT_END_SESSION(func) wxEventTableEntry( wxEVT_END_SESSION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
1663#define EVT_QUERY_END_SESSION(func) wxEventTableEntry( wxEVT_QUERY_END_SESSION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
1664#define EVT_PAINT(func) wxEventTableEntry( wxEVT_PAINT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxPaintEventFunction) & func, (wxObject *) NULL ),
1665#define EVT_ERASE_BACKGROUND(func) wxEventTableEntry( wxEVT_ERASE_BACKGROUND, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxEraseEventFunction) & func, (wxObject *) NULL ),
1666#define EVT_CHAR(func) wxEventTableEntry( wxEVT_CHAR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ),
1667#define EVT_KEY_DOWN(func) wxEventTableEntry( wxEVT_KEY_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ),
1668#define EVT_KEY_UP(func) wxEventTableEntry( wxEVT_KEY_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ),
1669#define EVT_CHAR_HOOK(func) wxEventTableEntry( wxEVT_CHAR_HOOK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, NULL ),
1670#define EVT_MENU_HIGHLIGHT(id, func) wxEventTableEntry( wxEVT_MENU_HIGHLIGHT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
1671#define EVT_MENU_HIGHLIGHT_ALL(func) wxEventTableEntry( wxEVT_MENU_HIGHLIGHT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
1672#define EVT_SET_FOCUS(func) wxEventTableEntry( wxEVT_SET_FOCUS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ),
1673#define EVT_KILL_FOCUS(func) wxEventTableEntry( wxEVT_KILL_FOCUS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ),
1674#define EVT_ACTIVATE(func) wxEventTableEntry( wxEVT_ACTIVATE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxActivateEventFunction) & func, (wxObject *) NULL ),
1675#define EVT_ACTIVATE_APP(func) wxEventTableEntry( wxEVT_ACTIVATE_APP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxActivateEventFunction) & func, (wxObject *) NULL ),
1676#define EVT_END_SESSION(func) wxEventTableEntry( wxEVT_END_SESSION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
1677#define EVT_QUERY_END_SESSION(func) wxEventTableEntry( wxEVT_QUERY_END_SESSION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
1678#define EVT_DROP_FILES(func) wxEventTableEntry( wxEVT_DROP_FILES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxDropFilesEventFunction) & func, (wxObject *) NULL ),
1679#define EVT_INIT_DIALOG(func) wxEventTableEntry( wxEVT_INIT_DIALOG, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxInitDialogEventFunction) & func, (wxObject *) NULL ),
1680#define EVT_SYS_COLOUR_CHANGED(func) wxEventTableEntry( wxEVT_SYS_COLOUR_CHANGED, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxSysColourChangedFunction) & func, (wxObject *) NULL ),
1681#define EVT_SHOW(func) wxEventTableEntry( wxEVT_SHOW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxShowEventFunction) & func, (wxObject *) NULL ),
1682#define EVT_MAXIMIZE(func) wxEventTableEntry( wxEVT_MAXIMIZE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMaximizeEventFunction) & func, (wxObject *) NULL ),
1683#define EVT_ICONIZE(func) wxEventTableEntry( wxEVT_ICONIZE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxIconizeEventFunction) & func, (wxObject *) NULL ),
1684#define EVT_NAVIGATION_KEY(func) wxEventTableEntry( wxEVT_NAVIGATION_KEY, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNavigationKeyEventFunction) & func, (wxObject *) NULL ),
1685#define EVT_PALETTE_CHANGED(func) wxEventTableEntry( wxEVT_PALETTE_CHANGED, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxPaletteChangedEventFunction) & func, (wxObject *) NULL ),
1686#define EVT_QUERY_NEW_PALETTE(func) wxEventTableEntry( wxEVT_QUERY_NEW_PALETTE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxQueryNewPaletteEventFunction) & func, (wxObject *) NULL ),
1687#define EVT_WINDOW_CREATE(func) wxEventTableEntry( wxEVT_CREATE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxWindowCreateEventFunction) & func, (wxObject *) NULL ),
1688#define EVT_WINDOW_DESTROY(func) wxEventTableEntry( wxEVT_DESTROY, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxWindowDestroyEventFunction) & func, (wxObject *) NULL ),
1689#define EVT_SET_CURSOR(func) wxEventTableEntry( wxEVT_SET_CURSOR, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxSetCursorEventFunction) & func, (wxObject *) NULL ),
c801d85f
KB
1690
1691// Mouse events
82a5f02c
RR
1692#define EVT_LEFT_DOWN(func) wxEventTableEntry( wxEVT_LEFT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1693#define EVT_LEFT_UP(func) wxEventTableEntry( wxEVT_LEFT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1694#define EVT_MIDDLE_DOWN(func) wxEventTableEntry( wxEVT_MIDDLE_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1695#define EVT_MIDDLE_UP(func) wxEventTableEntry( wxEVT_MIDDLE_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1696#define EVT_RIGHT_DOWN(func) wxEventTableEntry( wxEVT_RIGHT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1697#define EVT_RIGHT_UP(func) wxEventTableEntry( wxEVT_RIGHT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1698#define EVT_MOTION(func) wxEventTableEntry( wxEVT_MOTION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1699#define EVT_LEFT_DCLICK(func) wxEventTableEntry( wxEVT_LEFT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1700#define EVT_MIDDLE_DCLICK(func) wxEventTableEntry( wxEVT_MIDDLE_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1701#define EVT_RIGHT_DCLICK(func) wxEventTableEntry( wxEVT_RIGHT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1702#define EVT_LEAVE_WINDOW(func) wxEventTableEntry( wxEVT_LEAVE_WINDOW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
1703#define EVT_ENTER_WINDOW(func) wxEventTableEntry( wxEVT_ENTER_WINDOW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
c801d85f
KB
1704
1705// All mouse events
1706#define EVT_MOUSE_EVENTS(func) \
82a5f02c
RR
1707 wxEventTableEntry( wxEVT_LEFT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1708 wxEventTableEntry( wxEVT_LEFT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1709 wxEventTableEntry( wxEVT_MIDDLE_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1710 wxEventTableEntry( wxEVT_MIDDLE_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1711 wxEventTableEntry( wxEVT_RIGHT_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1712 wxEventTableEntry( wxEVT_RIGHT_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1713 wxEventTableEntry( wxEVT_MOTION, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1714 wxEventTableEntry( wxEVT_LEFT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1715 wxEventTableEntry( wxEVT_MIDDLE_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1716 wxEventTableEntry( wxEVT_RIGHT_DCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1717 wxEventTableEntry( wxEVT_ENTER_WINDOW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
1718 wxEventTableEntry( wxEVT_LEAVE_WINDOW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
c801d85f
KB
1719
1720// EVT_COMMAND
82a5f02c
RR
1721#define EVT_COMMAND(id, event, fn) wxEventTableEntry( event, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1722#define EVT_COMMAND_RANGE(id1, id2, event, fn) wxEventTableEntry( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
c801d85f 1723
c5b42c87
RR
1724// Scrolling from wxWindow (sent to wxScrolledWindow)
1725#define EVT_SCROLLWIN(func) \
82a5f02c
RR
1726 wxEventTableEntry( wxEVT_SCROLLWIN_TOP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
1727 wxEventTableEntry( wxEVT_SCROLLWIN_BOTTOM, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
1728 wxEventTableEntry( wxEVT_SCROLLWIN_LINEUP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
1729 wxEventTableEntry( wxEVT_SCROLLWIN_LINEDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
1730 wxEventTableEntry( wxEVT_SCROLLWIN_PAGEUP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
1731 wxEventTableEntry( wxEVT_SCROLLWIN_PAGEDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
1732 wxEventTableEntry( wxEVT_SCROLLWIN_THUMBTRACK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
1733 wxEventTableEntry( wxEVT_SCROLLWIN_THUMBRELEASE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
1734
1735#define EVT_SCROLLWIN_TOP(func) wxEventTableEntry( wxEVT_SCROLLWIN_TOP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
1736#define EVT_SCROLLWIN_BOTTOM(func) wxEventTableEntry( wxEVT_SCROLLWIN_BOTTOM, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
1737#define EVT_SCROLLWIN_LINEUP(func) wxEventTableEntry( wxEVT_SCROLLWIN_LINEUP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
1738#define EVT_SCROLLWIN_LINEDOWN(func) wxEventTableEntry( wxEVT_SCROLLWIN_LINEDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
1739#define EVT_SCROLLWIN_PAGEUP(func) wxEventTableEntry( wxEVT_SCROLLWIN_PAGEUP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
1740#define EVT_SCROLLWIN_PAGEDOWN(func) wxEventTableEntry( wxEVT_SCROLLWIN_PAGEDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
1741#define EVT_SCROLLWIN_THUMBTRACK(func) wxEventTableEntry( wxEVT_SCROLLWIN_THUMBTRACK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
1742#define EVT_SCROLLWIN_THUMBRELEASE(func) wxEventTableEntry( wxEVT_SCROLLWIN_THUMBRELEASE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
c5b42c87
RR
1743
1744// Scrolling from wxSlider and wxScrollBar
c801d85f 1745#define EVT_SCROLL(func) \
82a5f02c
RR
1746 wxEventTableEntry( wxEVT_SCROLL_TOP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1747 wxEventTableEntry( wxEVT_SCROLL_BOTTOM, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1748 wxEventTableEntry( wxEVT_SCROLL_LINEUP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1749 wxEventTableEntry( wxEVT_SCROLL_LINEDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1750 wxEventTableEntry( wxEVT_SCROLL_PAGEUP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1751 wxEventTableEntry( wxEVT_SCROLL_PAGEDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1752 wxEventTableEntry( wxEVT_SCROLL_THUMBTRACK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1753 wxEventTableEntry( wxEVT_SCROLL_THUMBRELEASE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1754
1755#define EVT_SCROLL_TOP(func) wxEventTableEntry( wxEVT_SCROLL_TOP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1756#define EVT_SCROLL_BOTTOM(func) wxEventTableEntry( wxEVT_SCROLL_BOTTOM, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1757#define EVT_SCROLL_LINEUP(func) wxEventTableEntry( wxEVT_SCROLL_LINEUP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1758#define EVT_SCROLL_LINEDOWN(func) wxEventTableEntry( wxEVT_SCROLL_LINEDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1759#define EVT_SCROLL_PAGEUP(func) wxEventTableEntry( wxEVT_SCROLL_PAGEUP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1760#define EVT_SCROLL_PAGEDOWN(func) wxEventTableEntry( wxEVT_SCROLL_PAGEDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1761#define EVT_SCROLL_THUMBTRACK(func) wxEventTableEntry( wxEVT_SCROLL_THUMBTRACK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1762#define EVT_SCROLL_THUMBRELEASE(func) wxEventTableEntry( wxEVT_SCROLL_THUMBRELEASE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
c801d85f 1763
c5b42c87 1764// Scrolling from wxSlider and wxScrollBar, with an id
c801d85f 1765#define EVT_COMMAND_SCROLL(id, func) \
82a5f02c
RR
1766 wxEventTableEntry( wxEVT_SCROLL_TOP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1767 wxEventTableEntry( wxEVT_SCROLL_BOTTOM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1768 wxEventTableEntry( wxEVT_SCROLL_LINEUP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1769 wxEventTableEntry( wxEVT_SCROLL_LINEDOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1770 wxEventTableEntry( wxEVT_SCROLL_PAGEUP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1771 wxEventTableEntry( wxEVT_SCROLL_PAGEDOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1772 wxEventTableEntry( wxEVT_SCROLL_THUMBTRACK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
1773 wxEventTableEntry( wxEVT_SCROLL_THUMBRELEASE, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1774
1775#define EVT_COMMAND_SCROLL_TOP(id, func) wxEventTableEntry( wxEVT_SCROLL_TOP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1776#define EVT_COMMAND_SCROLL_BOTTOM(id, func) wxEventTableEntry( wxEVT_SCROLL_BOTTOM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1777#define EVT_COMMAND_SCROLL_LINEUP(id, func) wxEventTableEntry( wxEVT_SCROLL_LINEUP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1778#define EVT_COMMAND_SCROLL_LINEDOWN(id, func) wxEventTableEntry( wxEVT_SCROLL_LINEDOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1779#define EVT_COMMAND_SCROLL_PAGEUP(id, func) wxEventTableEntry( wxEVT_SCROLL_PAGEUP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1780#define EVT_COMMAND_SCROLL_PAGEDOWN(id, func) wxEventTableEntry( wxEVT_SCROLL_PAGEDOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1781#define EVT_COMMAND_SCROLL_THUMBTRACK(id, func) wxEventTableEntry( wxEVT_SCROLL_THUMBTRACK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
1782#define EVT_COMMAND_SCROLL_THUMBRELEASE(id, func) wxEventTableEntry( wxEVT_SCROLL_THUMBRELEASE, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
c801d85f
KB
1783
1784// Convenience macros for commonly-used commands
82a5f02c
RR
1785#define EVT_BUTTON(id, fn) wxEventTableEntry( wxEVT_COMMAND_BUTTON_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1786#define EVT_CHECKBOX(id, fn) wxEventTableEntry( wxEVT_COMMAND_CHECKBOX_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1787#define EVT_CHOICE(id, fn) wxEventTableEntry( wxEVT_COMMAND_CHOICE_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1788#define EVT_LISTBOX(id, fn) wxEventTableEntry( wxEVT_COMMAND_LISTBOX_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1789#define EVT_LISTBOX_DCLICK(id, fn) wxEventTableEntry( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1790#define EVT_TEXT(id, fn) wxEventTableEntry( wxEVT_COMMAND_TEXT_UPDATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1791#define EVT_TEXT_ENTER(id, fn) wxEventTableEntry( wxEVT_COMMAND_TEXT_ENTER, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1792#define EVT_MENU(id, fn) wxEventTableEntry( wxEVT_COMMAND_MENU_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1793#define EVT_MENU_RANGE(id1, id2, fn) wxEventTableEntry( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1794#define EVT_SLIDER(id, fn) wxEventTableEntry( wxEVT_COMMAND_SLIDER_UPDATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1795#define EVT_RADIOBOX(id, fn) wxEventTableEntry( wxEVT_COMMAND_RADIOBOX_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1796#define EVT_RADIOBUTTON(id, fn) wxEventTableEntry( wxEVT_COMMAND_RADIOBUTTON_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
c801d85f 1797// EVT_SCROLLBAR is now obsolete since we use EVT_COMMAND_SCROLL... events
82a5f02c
RR
1798#define EVT_SCROLLBAR(id, fn) wxEventTableEntry( wxEVT_COMMAND_SCROLLBAR_UPDATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1799#define EVT_VLBOX(id, fn) wxEventTableEntry( wxEVT_COMMAND_VLBOX_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1800#define EVT_COMBOBOX(id, fn) wxEventTableEntry( wxEVT_COMMAND_COMBOBOX_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1801#define EVT_TOOL(id, fn) wxEventTableEntry( wxEVT_COMMAND_TOOL_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1802#define EVT_TOOL_RANGE(id1, id2, fn) wxEventTableEntry( wxEVT_COMMAND_TOOL_CLICKED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1803#define EVT_TOOL_RCLICKED(id, fn) wxEventTableEntry( wxEVT_COMMAND_TOOL_RCLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1804#define EVT_TOOL_RCLICKED_RANGE(id1, id2, fn) wxEventTableEntry( wxEVT_COMMAND_TOOL_RCLICKED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1805#define EVT_TOOL_ENTER(id, fn) wxEventTableEntry( wxEVT_COMMAND_TOOL_ENTER, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1806#define EVT_CHECKLISTBOX(id, fn) wxEventTableEntry( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
c801d85f
KB
1807
1808// Generic command events
82a5f02c
RR
1809#define EVT_COMMAND_LEFT_CLICK(id, fn) wxEventTableEntry( wxEVT_COMMAND_LEFT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1810#define EVT_COMMAND_LEFT_DCLICK(id, fn) wxEventTableEntry( wxEVT_COMMAND_LEFT_DCLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1811#define EVT_COMMAND_RIGHT_CLICK(id, fn) wxEventTableEntry( wxEVT_COMMAND_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1812#define EVT_COMMAND_RIGHT_DCLICK(id, fn) wxEventTableEntry( wxEVT_COMMAND_RIGHT_DCLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1813#define EVT_COMMAND_SET_FOCUS(id, fn) wxEventTableEntry( wxEVT_COMMAND_SET_FOCUS, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1814#define EVT_COMMAND_KILL_FOCUS(id, fn) wxEventTableEntry( wxEVT_COMMAND_KILL_FOCUS, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
1815#define EVT_COMMAND_ENTER(id, fn) wxEventTableEntry( wxEVT_COMMAND_ENTER, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
c801d85f
KB
1816
1817// Joystick events
1818#define EVT_JOY_DOWN(func) \
82a5f02c 1819 wxEventTableEntry( wxEVT_JOY_BUTTON_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
c801d85f 1820#define EVT_JOY_UP(func) \
82a5f02c 1821 wxEventTableEntry( wxEVT_JOY_BUTTON_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
c801d85f 1822#define EVT_JOY_MOVE(func) \
82a5f02c 1823 wxEventTableEntry( wxEVT_JOY_MOVE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
c801d85f 1824#define EVT_JOY_ZMOVE(func) \
82a5f02c 1825 wxEventTableEntry( wxEVT_JOY_ZMOVE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
c801d85f
KB
1826
1827// All joystick events
1828#define EVT_JOYSTICK_EVENTS(func) \
82a5f02c
RR
1829 wxEventTableEntry( wxEVT_JOY_BUTTON_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\
1830 wxEventTableEntry( wxEVT_JOY_BUTTON_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\
1831 wxEventTableEntry( wxEVT_JOY_MOVE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\
1832 wxEventTableEntry( wxEVT_JOY_ZMOVE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
c801d85f
KB
1833
1834// Idle event
1835#define EVT_IDLE(func) \
82a5f02c 1836 wxEventTableEntry( wxEVT_IDLE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) & func, (wxObject *) NULL ),
c801d85f
KB
1837
1838// Update UI event
1839#define EVT_UPDATE_UI(id, func) \
82a5f02c 1840 wxEventTableEntry( wxEVT_UPDATE_UI, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxUpdateUIEventFunction) & func, (wxObject *) NULL ),
3ca6a5f0 1841#define EVT_UPDATE_UI_RANGE(id1, id2, func) \
82a5f02c 1842 wxEventTableEntry( wxEVT_UPDATE_UI, id1, id2, (wxObjectEventFunction)(wxEventFunction)(wxUpdateUIEventFunction)&func, (wxObject *) NULL ),
c801d85f 1843
b96340e6
JS
1844// Help events
1845#define EVT_HELP(id, func) \
82a5f02c 1846 wxEventTableEntry( wxEVT_HELP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ),
b96340e6
JS
1847
1848#define EVT_HELP_RANGE(id1, id2, func) \
82a5f02c 1849 wxEventTableEntry( wxEVT_HELP, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ),
b96340e6 1850
fb6261e9 1851#define EVT_DETAILED_HELP(id, func) \
82a5f02c 1852 wxEventTableEntry( wxEVT_DETAILED_HELP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ),
fb6261e9
JS
1853
1854#define EVT_DETAILED_HELP_RANGE(id1, id2, func) \
82a5f02c 1855 wxEventTableEntry( wxEVT_DETAILED_HELP, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ),
fb6261e9 1856
8e193f38
VZ
1857// ----------------------------------------------------------------------------
1858// Global data
1859// ----------------------------------------------------------------------------
1860
1861// for pending event processing - notice that there is intentionally no
1862// WXDLLEXPORT here
1863extern wxList *wxPendingEvents;
1864#if wxUSE_THREADS
1865 extern wxCriticalSection *wxPendingEventsLocker;
1866#endif
1867
e90c1d2a
VZ
1868// ----------------------------------------------------------------------------
1869// Helper functions
1870// ----------------------------------------------------------------------------
1871
1872#if wxUSE_GUI
e702ff0f
JS
1873
1874// Find a window with the focus, that is also a descendant of the given window.
1875// This is used to determine the window to initially send commands to.
1876wxWindow* wxFindFocusDescendant(wxWindow* ancestor);
1877
e90c1d2a
VZ
1878#endif // wxUSE_GUI
1879
c801d85f 1880#endif
2b854a32 1881 // _WX_EVENTH__