1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/event.h 3 // Purpose: Event classes 4 // Author: Julian Smart 5 // Modified by: 6 // Created: 01/02/97 7 // RCS-ID: $Id: event.h,v 1.1 2006/12/02 15:58:23 scara Exp $ 8 // Copyright: (c) wxWindows team 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_EVENTH__ 13 #define _WX_EVENTH__ 14 15 #if defined(__GNUG__) && !defined(__APPLE__) 16 #pragma interface "event.h" 17 #endif 18 19 #include "wx/defs.h" 20 #include "wx/object.h" 21 #include "wx/clntdata.h" 22 23 #if wxUSE_GUI 24 #include "wx/gdicmn.h" 25 #include "wx/cursor.h" 26 #endif 27 28 #include "wx/thread.h" 29 30 // ---------------------------------------------------------------------------- 31 // forward declarations 32 // ---------------------------------------------------------------------------- 33 34 class WXDLLEXPORT wxList; 35 36 #if wxUSE_GUI 37 class WXDLLEXPORT wxDC; 38 class WXDLLEXPORT wxMenu; 39 class WXDLLEXPORT wxWindow; 40 #endif // wxUSE_GUI 41 42 // ---------------------------------------------------------------------------- 43 // Event types 44 // ---------------------------------------------------------------------------- 45 46 typedef int wxEventType; 47 48 // in previous versions of wxWindows the event types used to be constants 49 // which created difficulties with custom/user event types definition 50 // 51 // starting from wxWindows 2.4 the event types are now dynamically assigned 52 // using wxNewEventType() which solves this problem, however at price of 53 // several incompatibilities: 54 // 55 // a) event table macros declaration changed, it now uses wxEventTableEntry 56 // ctor instead of initialisation from an agregate - the macro 57 // DECLARE_EVENT_TABLE_ENTRY may be used to write code which can compile 58 // with all versions of wxWindows 59 // 60 // b) event types can't be used as switch() cases as they're not really 61 // constant any more - there is no magic solution here, you just have to 62 // change the switch()es to if()s 63 // 64 // if these are real problems for you, define WXWIN_COMPATIBILITY_EVENT_TYPES 65 // to get 100% old behaviour, however you won't be able to use the libraries 66 // using the new dynamic event type allocation in such case, so avoid it if 67 // possible. 68 69 #if WXWIN_COMPATIBILITY_EVENT_TYPES 70 71 #define DECLARE_EVENT_TABLE_ENTRY(type, id, idLast, fn, obj) \ 72 { type, id, idLast, fn, obj } 73 74 #define BEGIN_DECLARE_EVENT_TYPES() enum { 75 #define END_DECLARE_EVENT_TYPES() }; 76 #define DECLARE_EVENT_TYPE(name, value) name = wxEVT_FIRST + value, 77 #define DECLARE_LOCAL_EVENT_TYPE(name, value) name = wxEVT_USER_FIRST + value, 78 #define DEFINE_EVENT_TYPE(name) 79 #define DEFINE_LOCAL_EVENT_TYPE(name) 80 81 82 #else // !WXWIN_COMPATIBILITY_EVENT_TYPES 83 84 #define DECLARE_EVENT_TABLE_ENTRY(type, id, idLast, fn, obj) \ 85 wxEventTableEntry(type, id, idLast, fn, obj) 86 87 #define BEGIN_DECLARE_EVENT_TYPES() 88 #define END_DECLARE_EVENT_TYPES() 89 #define DECLARE_EVENT_TYPE(name, value) \ 90 extern const wxEventType WXDLLEXPORT name; 91 #define DECLARE_LOCAL_EVENT_TYPE(name, value) extern const wxEventType name; 92 #define DECLARE_EXPORTED_LOCAL_EVENT_TYPE(usergoo, name, value) extern const wxEventType usergoo name; 93 #define DEFINE_EVENT_TYPE(name) const wxEventType name = wxNewEventType(); 94 #define DEFINE_LOCAL_EVENT_TYPE(name) const wxEventType name = wxNewEventType(); 95 96 // generate a new unique event type 97 extern WXDLLEXPORT wxEventType wxNewEventType(); 98 99 #endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES 100 101 BEGIN_DECLARE_EVENT_TYPES() 102 103 #if WXWIN_COMPATIBILITY_EVENT_TYPES 104 wxEVT_NULL = 0, 105 wxEVT_FIRST = 10000, 106 wxEVT_USER_FIRST = wxEVT_FIRST + 2000, 107 #else // !WXWIN_COMPATIBILITY_EVENT_TYPES 108 // it is important to still have these as constants to avoid 109 // initialization order related problems 110 DECLARE_EVENT_TYPE(wxEVT_NULL, 0) 111 const wxEventType wxEVT_FIRST = 10000; 112 const wxEventType wxEVT_USER_FIRST = wxEVT_FIRST + 2000; 113 #endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES 114 115 DECLARE_EVENT_TYPE(wxEVT_COMMAND_BUTTON_CLICKED, 1) 116 DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHECKBOX_CLICKED, 2) 117 DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHOICE_SELECTED, 3) 118 DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_SELECTED, 4) 119 DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, 5) 120 DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, 6) 121 // now they are in wx/textctrl.h 122 #if WXWIN_COMPATIBILITY_EVENT_TYPES 123 DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED, 7) 124 DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER, 8) 125 DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL, 13) 126 DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN, 14) 127 #endif // WXWIN_COMPATIBILITY_EVENT_TYPES 128 DECLARE_EVENT_TYPE(wxEVT_COMMAND_MENU_SELECTED, 9) 129 DECLARE_EVENT_TYPE(wxEVT_COMMAND_SLIDER_UPDATED, 10) 130 DECLARE_EVENT_TYPE(wxEVT_COMMAND_RADIOBOX_SELECTED, 11) 131 DECLARE_EVENT_TYPE(wxEVT_COMMAND_RADIOBUTTON_SELECTED, 12) 132 133 // wxEVT_COMMAND_SCROLLBAR_UPDATED is now obsolete since we use 134 // wxEVT_SCROLL... events 135 136 DECLARE_EVENT_TYPE(wxEVT_COMMAND_SCROLLBAR_UPDATED, 13) 137 DECLARE_EVENT_TYPE(wxEVT_COMMAND_VLBOX_SELECTED, 14) 138 DECLARE_EVENT_TYPE(wxEVT_COMMAND_COMBOBOX_SELECTED, 15) 139 DECLARE_EVENT_TYPE(wxEVT_COMMAND_TOOL_RCLICKED, 16) 140 DECLARE_EVENT_TYPE(wxEVT_COMMAND_TOOL_ENTER, 17) 141 DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPINCTRL_UPDATED, 18) 142 143 // Sockets and timers send events, too 144 DECLARE_EVENT_TYPE(wxEVT_SOCKET, 50) 145 DECLARE_EVENT_TYPE(wxEVT_TIMER , 80) 146 147 // Mouse event types 148 DECLARE_EVENT_TYPE(wxEVT_LEFT_DOWN, 100) 149 DECLARE_EVENT_TYPE(wxEVT_LEFT_UP, 101) 150 DECLARE_EVENT_TYPE(wxEVT_MIDDLE_DOWN, 102) 151 DECLARE_EVENT_TYPE(wxEVT_MIDDLE_UP, 103) 152 DECLARE_EVENT_TYPE(wxEVT_RIGHT_DOWN, 104) 153 DECLARE_EVENT_TYPE(wxEVT_RIGHT_UP, 105) 154 DECLARE_EVENT_TYPE(wxEVT_MOTION, 106) 155 DECLARE_EVENT_TYPE(wxEVT_ENTER_WINDOW, 107) 156 DECLARE_EVENT_TYPE(wxEVT_LEAVE_WINDOW, 108) 157 DECLARE_EVENT_TYPE(wxEVT_LEFT_DCLICK, 109) 158 DECLARE_EVENT_TYPE(wxEVT_MIDDLE_DCLICK, 110) 159 DECLARE_EVENT_TYPE(wxEVT_RIGHT_DCLICK, 111) 160 DECLARE_EVENT_TYPE(wxEVT_SET_FOCUS, 112) 161 DECLARE_EVENT_TYPE(wxEVT_KILL_FOCUS, 113) 162 DECLARE_EVENT_TYPE(wxEVT_CHILD_FOCUS, 114) 163 DECLARE_EVENT_TYPE(wxEVT_MOUSEWHEEL, 115) 164 165 // Non-client mouse events 166 DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_DOWN, 200) 167 DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_UP, 201) 168 DECLARE_EVENT_TYPE(wxEVT_NC_MIDDLE_DOWN, 202) 169 DECLARE_EVENT_TYPE(wxEVT_NC_MIDDLE_UP, 203) 170 DECLARE_EVENT_TYPE(wxEVT_NC_RIGHT_DOWN, 204) 171 DECLARE_EVENT_TYPE(wxEVT_NC_RIGHT_UP, 205) 172 DECLARE_EVENT_TYPE(wxEVT_NC_MOTION, 206) 173 DECLARE_EVENT_TYPE(wxEVT_NC_ENTER_WINDOW, 207) 174 DECLARE_EVENT_TYPE(wxEVT_NC_LEAVE_WINDOW, 208) 175 DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_DCLICK, 209) 176 DECLARE_EVENT_TYPE(wxEVT_NC_MIDDLE_DCLICK, 210) 177 DECLARE_EVENT_TYPE(wxEVT_NC_RIGHT_DCLICK, 211) 178 179 // Character input event type 180 DECLARE_EVENT_TYPE(wxEVT_CHAR, 212) 181 DECLARE_EVENT_TYPE(wxEVT_CHAR_HOOK, 213) 182 DECLARE_EVENT_TYPE(wxEVT_NAVIGATION_KEY, 214) 183 DECLARE_EVENT_TYPE(wxEVT_KEY_DOWN, 215) 184 DECLARE_EVENT_TYPE(wxEVT_KEY_UP, 216) 185 186 // Set cursor event 187 DECLARE_EVENT_TYPE(wxEVT_SET_CURSOR, 230) 188 189 // wxScrollBar and wxSlider event identifiers 190 DECLARE_EVENT_TYPE(wxEVT_SCROLL_TOP, 300) 191 DECLARE_EVENT_TYPE(wxEVT_SCROLL_BOTTOM, 301) 192 DECLARE_EVENT_TYPE(wxEVT_SCROLL_LINEUP, 302) 193 DECLARE_EVENT_TYPE(wxEVT_SCROLL_LINEDOWN, 303) 194 DECLARE_EVENT_TYPE(wxEVT_SCROLL_PAGEUP, 304) 195 DECLARE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN, 305) 196 DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK, 306) 197 DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE, 307) 198 DECLARE_EVENT_TYPE(wxEVT_SCROLL_ENDSCROLL, 308) 199 200 // Scroll events from wxWindow 201 DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP, 320) 202 DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_BOTTOM, 321) 203 DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_LINEUP, 322) 204 DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_LINEDOWN, 323) 205 DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_PAGEUP, 324) 206 DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_PAGEDOWN, 325) 207 DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_THUMBTRACK, 326) 208 DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_THUMBRELEASE, 327) 209 210 // System events 211 DECLARE_EVENT_TYPE(wxEVT_SIZE, 400) 212 DECLARE_EVENT_TYPE(wxEVT_MOVE, 401) 213 DECLARE_EVENT_TYPE(wxEVT_CLOSE_WINDOW, 402) 214 DECLARE_EVENT_TYPE(wxEVT_END_SESSION, 403) 215 DECLARE_EVENT_TYPE(wxEVT_QUERY_END_SESSION, 404) 216 DECLARE_EVENT_TYPE(wxEVT_ACTIVATE_APP, 405) 217 DECLARE_EVENT_TYPE(wxEVT_POWER, 406) 218 DECLARE_EVENT_TYPE(wxEVT_ACTIVATE, 409) 219 DECLARE_EVENT_TYPE(wxEVT_CREATE, 410) 220 DECLARE_EVENT_TYPE(wxEVT_DESTROY, 411) 221 DECLARE_EVENT_TYPE(wxEVT_SHOW, 412) 222 DECLARE_EVENT_TYPE(wxEVT_ICONIZE, 413) 223 DECLARE_EVENT_TYPE(wxEVT_MAXIMIZE, 414) 224 DECLARE_EVENT_TYPE(wxEVT_MOUSE_CAPTURE_CHANGED, 415) 225 DECLARE_EVENT_TYPE(wxEVT_PAINT, 416) 226 DECLARE_EVENT_TYPE(wxEVT_ERASE_BACKGROUND, 417) 227 DECLARE_EVENT_TYPE(wxEVT_NC_PAINT, 418) 228 DECLARE_EVENT_TYPE(wxEVT_PAINT_ICON, 419) 229 DECLARE_EVENT_TYPE(wxEVT_MENU_OPEN, 420) 230 DECLARE_EVENT_TYPE(wxEVT_MENU_CLOSE, 421) 231 DECLARE_EVENT_TYPE(wxEVT_MENU_HIGHLIGHT, 422) 232 // DECLARE_EVENT_TYPE(wxEVT_POPUP_MENU_INIT, 423) -- free slot 233 DECLARE_EVENT_TYPE(wxEVT_CONTEXT_MENU, 424) 234 DECLARE_EVENT_TYPE(wxEVT_SYS_COLOUR_CHANGED, 425) 235 DECLARE_EVENT_TYPE(wxEVT_DISPLAY_CHANGED, 426) 236 DECLARE_EVENT_TYPE(wxEVT_SETTING_CHANGED, 427) 237 DECLARE_EVENT_TYPE(wxEVT_QUERY_NEW_PALETTE, 428) 238 DECLARE_EVENT_TYPE(wxEVT_PALETTE_CHANGED, 429) 239 DECLARE_EVENT_TYPE(wxEVT_JOY_BUTTON_DOWN, 430) 240 DECLARE_EVENT_TYPE(wxEVT_JOY_BUTTON_UP, 431) 241 DECLARE_EVENT_TYPE(wxEVT_JOY_MOVE, 432) 242 DECLARE_EVENT_TYPE(wxEVT_JOY_ZMOVE, 433) 243 DECLARE_EVENT_TYPE(wxEVT_DROP_FILES, 434) 244 DECLARE_EVENT_TYPE(wxEVT_DRAW_ITEM, 435) 245 DECLARE_EVENT_TYPE(wxEVT_MEASURE_ITEM, 436) 246 DECLARE_EVENT_TYPE(wxEVT_COMPARE_ITEM, 437) 247 DECLARE_EVENT_TYPE(wxEVT_INIT_DIALOG, 438) 248 DECLARE_EVENT_TYPE(wxEVT_IDLE, 439) 249 DECLARE_EVENT_TYPE(wxEVT_UPDATE_UI, 440) 250 251 // Generic command events 252 // Note: a click is a higher-level event than button down/up 253 DECLARE_EVENT_TYPE(wxEVT_COMMAND_LEFT_CLICK, 500) 254 DECLARE_EVENT_TYPE(wxEVT_COMMAND_LEFT_DCLICK, 501) 255 DECLARE_EVENT_TYPE(wxEVT_COMMAND_RIGHT_CLICK, 502) 256 DECLARE_EVENT_TYPE(wxEVT_COMMAND_RIGHT_DCLICK, 503) 257 DECLARE_EVENT_TYPE(wxEVT_COMMAND_SET_FOCUS, 504) 258 DECLARE_EVENT_TYPE(wxEVT_COMMAND_KILL_FOCUS, 505) 259 DECLARE_EVENT_TYPE(wxEVT_COMMAND_ENTER, 506) 260 261 // Help events 262 DECLARE_EVENT_TYPE(wxEVT_HELP, 1050) 263 DECLARE_EVENT_TYPE(wxEVT_DETAILED_HELP, 1051) 264 265 END_DECLARE_EVENT_TYPES() 266 267 // these 2 events are the same 268 #define wxEVT_COMMAND_TOOL_CLICKED wxEVT_COMMAND_MENU_SELECTED 269 270 // ---------------------------------------------------------------------------- 271 // Compatibility 272 // ---------------------------------------------------------------------------- 273 274 // this event is also used by wxComboBox and wxSpinCtrl which don't include 275 // wx/textctrl.h in all ports [yet], so declare it here as well 276 // 277 // still, any new code using it should include wx/textctrl.h explicitly 278 #if !WXWIN_COMPATIBILITY_EVENT_TYPES 279 extern const wxEventType WXDLLEXPORT wxEVT_COMMAND_TEXT_UPDATED; 280 #endif 281 282 #if WXWIN_COMPATIBILITY 283 284 #define wxEVENT_TYPE_BUTTON_COMMAND wxEVT_COMMAND_BUTTON_CLICKED 285 #define wxEVENT_TYPE_CHECKBOX_COMMAND wxEVT_COMMAND_CHECKBOX_CLICKED 286 #define wxEVENT_TYPE_CHOICE_COMMAND wxEVT_COMMAND_CHOICE_SELECTED 287 #define wxEVENT_TYPE_LISTBOX_COMMAND wxEVT_COMMAND_LISTBOX_SELECTED 288 #define wxEVENT_TYPE_LISTBOX_DCLICK_COMMAND wxEVT_COMMAND_LISTBOX_DOUBLECLICKED 289 #define wxEVENT_TYPE_TEXT_COMMAND wxEVT_COMMAND_TEXT_UPDATED 290 #define wxEVENT_TYPE_MULTITEXT_COMMAND wxEVT_COMMAND_TEXT_UPDATED 291 #define wxEVENT_TYPE_MENU_COMMAND wxEVT_COMMAND_MENU_SELECTED 292 #define wxEVENT_TYPE_SLIDER_COMMAND wxEVT_COMMAND_SLIDER_UPDATED 293 #define wxEVENT_TYPE_RADIOBOX_COMMAND wxEVT_COMMAND_RADIOBOX_SELECTED 294 #define wxEVENT_TYPE_RADIOBUTTON_COMMAND wxEVT_COMMAND_RADIOBUTTON_SELECTED 295 #define wxEVENT_TYPE_TEXT_ENTER_COMMAND wxEVT_COMMAND_TEXT_ENTER 296 #define wxEVENT_TYPE_SET_FOCUS wxEVT_SET_FOCUS 297 #define wxEVENT_TYPE_KILL_FOCUS wxEVT_KILL_FOCUS 298 #define wxEVENT_TYPE_SCROLLBAR_COMMAND wxEVT_COMMAND_SCROLLBAR_UPDATED 299 #define wxEVENT_TYPE_VIRT_LISTBOX_COMMAND wxEVT_COMMAND_VLBOX_SELECTED 300 #define wxEVENT_TYPE_COMBOBOX_COMMAND wxEVT_COMMAND_COMBOBOX_SELECTED 301 302 #define wxEVENT_TYPE_LEFT_DOWN wxEVT_LEFT_DOWN 303 #define wxEVENT_TYPE_LEFT_UP wxEVT_LEFT_UP 304 #define wxEVENT_TYPE_MIDDLE_DOWN wxEVT_MIDDLE_DOWN 305 #define wxEVENT_TYPE_MIDDLE_UP wxEVT_MIDDLE_UP 306 #define wxEVENT_TYPE_RIGHT_DOWN wxEVT_RIGHT_DOWN 307 #define wxEVENT_TYPE_RIGHT_UP wxEVT_RIGHT_UP 308 #define wxEVENT_TYPE_MOTION wxEVT_MOTION 309 #define wxEVENT_TYPE_ENTER_WINDOW wxEVT_ENTER_WINDOW 310 #define wxEVENT_TYPE_LEAVE_WINDOW wxEVT_LEAVE_WINDOW 311 #define wxEVENT_TYPE_LEFT_DCLICK wxEVT_LEFT_DCLICK 312 #define wxEVENT_TYPE_MIDDLE_DCLICK wxEVT_MIDDLE_DCLICK 313 #define wxEVENT_TYPE_RIGHT_DCLICK wxEVT_RIGHT_DCLICK 314 #define wxEVENT_TYPE_CHAR wxEVT_CHAR 315 #define wxEVENT_TYPE_SCROLL_TOP wxEVT_SCROLL_TOP 316 #define wxEVENT_TYPE_SCROLL_BOTTOM wxEVT_SCROLL_BOTTOM 317 #define wxEVENT_TYPE_SCROLL_LINEUP wxEVT_SCROLL_LINEUP 318 #define wxEVENT_TYPE_SCROLL_LINEDOWN wxEVT_SCROLL_LINEDOWN 319 #define wxEVENT_TYPE_SCROLL_PAGEUP wxEVT_SCROLL_PAGEUP 320 #define wxEVENT_TYPE_SCROLL_PAGEDOWN wxEVT_SCROLL_PAGEDOWN 321 #define wxEVENT_TYPE_SCROLL_THUMBTRACK wxEVT_SCROLL_THUMBTRACK 322 #define wxEVENT_TYPE_SCROLL_ENDSCROLL wxEVT_SCROLL_ENDSCROLL 323 324 #endif // WXWIN_COMPATIBILITY 325 326 /* 327 * wxWindows events, covering all interesting things that might happen 328 * (button clicking, resizing, setting text in widgets, etc.). 329 * 330 * For each completely new event type, derive a new event class. 331 * An event CLASS represents a C++ class defining a range of similar event TYPES; 332 * examples are canvas events, panel item command events. 333 * An event TYPE is a unique identifier for a particular system event, 334 * such as a button press or a listbox deselection. 335 * 336 */ 337 338 class WXDLLEXPORT wxEvent : public wxObject 339 { 340 private: 341 wxEvent& operator=(const wxEvent&); 342 343 protected: 344 wxEvent(const wxEvent&); // for implementing Clone() 345 346 public: 347 wxEvent(int id = 0, wxEventType commandType = wxEVT_NULL ); 348 SetEventType(wxEventType typ)349 void SetEventType(wxEventType typ) { m_eventType = typ; } GetEventType()350 wxEventType GetEventType() const { return m_eventType; } GetEventObject()351 wxObject *GetEventObject() const { return m_eventObject; } SetEventObject(wxObject * obj)352 void SetEventObject(wxObject *obj) { m_eventObject = obj; } GetTimestamp()353 long GetTimestamp() const { return m_timeStamp; } 354 void SetTimestamp(long ts = 0) { m_timeStamp = ts; } GetId()355 int GetId() const { return m_id; } SetId(int Id)356 void SetId(int Id) { m_id = Id; } 357 358 // Can instruct event processor that we wish to ignore this event 359 // (treat as if the event table entry had not been found): this must be done 360 // to allow the event processing by the base classes (calling event.Skip() 361 // is the analog of calling the base class verstion of a virtual function) 362 void Skip(bool skip = TRUE) { m_skipped = skip; } GetSkipped()363 bool GetSkipped() const { return m_skipped; }; 364 365 // Implementation only: this test is explicitlty anti OO and this functions 366 // exists only for optimization purposes. IsCommandEvent()367 bool IsCommandEvent() const { return m_isCommandEvent; } 368 369 // this function is used to create a copy of the event polymorphically and 370 // all derived classes must implement it because otherwise wxPostEvent() 371 // for them wouldn't work (it needs to do a copy of the event) 372 virtual wxEvent *Clone() const = 0; 373 374 public: 375 wxObject* m_eventObject; 376 wxEventType m_eventType; 377 long m_timeStamp; 378 int m_id; 379 wxObject* m_callbackUserData; 380 bool m_skipped; 381 bool m_isCommandEvent; 382 383 private: 384 DECLARE_ABSTRACT_CLASS(wxEvent) 385 }; 386 387 #if wxUSE_GUI 388 389 // Item or menu event class 390 /* 391 wxEVT_COMMAND_BUTTON_CLICKED 392 wxEVT_COMMAND_CHECKBOX_CLICKED 393 wxEVT_COMMAND_CHOICE_SELECTED 394 wxEVT_COMMAND_LISTBOX_SELECTED 395 wxEVT_COMMAND_LISTBOX_DOUBLECLICKED 396 wxEVT_COMMAND_TEXT_UPDATED 397 wxEVT_COMMAND_TEXT_ENTER 398 wxEVT_COMMAND_MENU_SELECTED 399 wxEVT_COMMAND_SLIDER_UPDATED 400 wxEVT_COMMAND_RADIOBOX_SELECTED 401 wxEVT_COMMAND_RADIOBUTTON_SELECTED 402 wxEVT_COMMAND_SCROLLBAR_UPDATED 403 wxEVT_COMMAND_VLBOX_SELECTED 404 wxEVT_COMMAND_COMBOBOX_SELECTED 405 wxEVT_COMMAND_TOGGLEBUTTON_CLICKED 406 */ 407 408 class WXDLLEXPORT wxCommandEvent : public wxEvent 409 { 410 private: 411 wxCommandEvent& operator=(const wxCommandEvent& event); 412 413 public: 414 wxCommandEvent(wxEventType commandType = wxEVT_NULL, int id = 0); 415 wxCommandEvent(const wxCommandEvent & event)416 wxCommandEvent(const wxCommandEvent& event) 417 : wxEvent(event), 418 m_commandString(event.m_commandString), 419 m_commandInt(event.m_commandInt), 420 m_extraLong(event.m_extraLong), 421 m_clientData(event.m_clientData), 422 m_clientObject(event.m_clientObject) 423 { } 424 425 // Set/Get client data from controls SetClientData(void * clientData)426 void SetClientData(void* clientData) { m_clientData = clientData; } GetClientData()427 void *GetClientData() const { return m_clientData; } 428 429 // Set/Get client object from controls SetClientObject(wxClientData * clientObject)430 void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; } GetClientObject()431 void *GetClientObject() const { return m_clientObject; } 432 433 // Get listbox selection if single-choice GetSelection()434 int GetSelection() const { return m_commandInt; } 435 436 // Set/Get listbox/choice selection string SetString(const wxString & s)437 void SetString(const wxString& s) { m_commandString = s; } GetString()438 wxString GetString() const { return m_commandString; } 439 440 // Get checkbox value IsChecked()441 bool IsChecked() const { return m_commandInt != 0; } 442 443 // TRUE if the listbox event was a selection. IsSelection()444 bool IsSelection() const { return (m_extraLong != 0); } 445 SetExtraLong(long extraLong)446 void SetExtraLong(long extraLong) { m_extraLong = extraLong; } GetExtraLong()447 long GetExtraLong() const { return m_extraLong ; } 448 SetInt(int i)449 void SetInt(int i) { m_commandInt = i; } GetInt()450 long GetInt() const { return m_commandInt ; } 451 Clone()452 virtual wxEvent *Clone() const { return new wxCommandEvent(*this); } 453 454 #if WXWIN_COMPATIBILITY_2 Checked()455 bool Checked() const { return IsChecked(); } 456 #endif // WXWIN_COMPATIBILITY_2 457 458 public: 459 wxString m_commandString; // String event argument 460 int m_commandInt; 461 long m_extraLong; // Additional information (e.g. select/deselect) 462 void* m_clientData; // Arbitrary client data 463 wxClientData* m_clientObject; // Arbitrary client object 464 465 private: 466 DECLARE_DYNAMIC_CLASS(wxCommandEvent) 467 }; 468 469 // this class adds a possibility to react (from the user) code to a control 470 // notification: allow or veto the operation being reported. 471 class WXDLLEXPORT wxNotifyEvent : public wxCommandEvent 472 { 473 public: 474 wxNotifyEvent(wxEventType commandType = wxEVT_NULL, int id = 0) wxCommandEvent(commandType,id)475 : wxCommandEvent(commandType, id) 476 { m_bAllow = TRUE; } 477 wxNotifyEvent(const wxNotifyEvent & event)478 wxNotifyEvent(const wxNotifyEvent& event) 479 : wxCommandEvent(event) 480 { m_bAllow = event.m_bAllow; } 481 482 // veto the operation (usually it's allowed by default) Veto()483 void Veto() { m_bAllow = FALSE; } 484 485 // allow the operation if it was disabled by default Allow()486 void Allow() { m_bAllow = TRUE; } 487 488 // for implementation code only: is the operation allowed? IsAllowed()489 bool IsAllowed() const { return m_bAllow; } 490 Clone()491 virtual wxEvent *Clone() const { return new wxNotifyEvent(*this); } 492 493 private: 494 bool m_bAllow; 495 496 private: 497 DECLARE_DYNAMIC_CLASS(wxNotifyEvent) 498 }; 499 500 // Scroll event class, derived form wxCommandEvent. wxScrollEvents are 501 // sent by wxSlider and wxScrollBar. 502 /* 503 wxEVT_SCROLL_TOP 504 wxEVT_SCROLL_BOTTOM 505 wxEVT_SCROLL_LINEUP 506 wxEVT_SCROLL_LINEDOWN 507 wxEVT_SCROLL_PAGEUP 508 wxEVT_SCROLL_PAGEDOWN 509 wxEVT_SCROLL_THUMBTRACK 510 wxEVT_SCROLL_THUMBRELEASE 511 wxEVT_SCROLL_ENDSCROLL 512 */ 513 514 class WXDLLEXPORT wxScrollEvent : public wxCommandEvent 515 { 516 public: 517 wxScrollEvent(wxEventType commandType = wxEVT_NULL, 518 int id = 0, int pos = 0, int orient = 0); 519 GetOrientation()520 int GetOrientation() const { return (int) m_extraLong ; } GetPosition()521 int GetPosition() const { return m_commandInt ; } SetOrientation(int orient)522 void SetOrientation(int orient) { m_extraLong = (long) orient; } SetPosition(int pos)523 void SetPosition(int pos) { m_commandInt = pos; } 524 Clone()525 virtual wxEvent *Clone() const { return new wxScrollEvent(*this); } 526 527 private: 528 DECLARE_DYNAMIC_CLASS(wxScrollEvent) 529 }; 530 531 // ScrollWin event class, derived fom wxEvent. wxScrollWinEvents 532 // are sent by wxWindow. 533 /* 534 wxEVT_SCROLLWIN_TOP 535 wxEVT_SCROLLWIN_BOTTOM 536 wxEVT_SCROLLWIN_LINEUP 537 wxEVT_SCROLLWIN_LINEDOWN 538 wxEVT_SCROLLWIN_PAGEUP 539 wxEVT_SCROLLWIN_PAGEDOWN 540 wxEVT_SCROLLWIN_THUMBTRACK 541 wxEVT_SCROLLWIN_THUMBRELEASE 542 */ 543 544 class WXDLLEXPORT wxScrollWinEvent : public wxEvent 545 { 546 public: 547 wxScrollWinEvent(wxEventType commandType = wxEVT_NULL, 548 int pos = 0, int orient = 0); wxScrollWinEvent(const wxScrollWinEvent & event)549 wxScrollWinEvent(const wxScrollWinEvent & event) : wxEvent(event) 550 { m_commandInt = event.m_commandInt; 551 m_extraLong = event.m_extraLong; } 552 GetOrientation()553 int GetOrientation() const { return (int) m_extraLong ; } GetPosition()554 int GetPosition() const { return m_commandInt ; } SetOrientation(int orient)555 void SetOrientation(int orient) { m_extraLong = (long) orient; } SetPosition(int pos)556 void SetPosition(int pos) { m_commandInt = pos; } 557 Clone()558 virtual wxEvent *Clone() const { return new wxScrollWinEvent(*this); } 559 560 public: 561 int m_commandInt; 562 long m_extraLong; 563 564 private: 565 DECLARE_DYNAMIC_CLASS(wxScrollWinEvent) 566 }; 567 568 // Mouse event class 569 570 /* 571 wxEVT_LEFT_DOWN 572 wxEVT_LEFT_UP 573 wxEVT_MIDDLE_DOWN 574 wxEVT_MIDDLE_UP 575 wxEVT_RIGHT_DOWN 576 wxEVT_RIGHT_UP 577 wxEVT_MOTION 578 wxEVT_ENTER_WINDOW 579 wxEVT_LEAVE_WINDOW 580 wxEVT_LEFT_DCLICK 581 wxEVT_MIDDLE_DCLICK 582 wxEVT_RIGHT_DCLICK 583 wxEVT_NC_LEFT_DOWN 584 wxEVT_NC_LEFT_UP, 585 wxEVT_NC_MIDDLE_DOWN, 586 wxEVT_NC_MIDDLE_UP, 587 wxEVT_NC_RIGHT_DOWN, 588 wxEVT_NC_RIGHT_UP, 589 wxEVT_NC_MOTION, 590 wxEVT_NC_ENTER_WINDOW, 591 wxEVT_NC_LEAVE_WINDOW, 592 wxEVT_NC_LEFT_DCLICK, 593 wxEVT_NC_MIDDLE_DCLICK, 594 wxEVT_NC_RIGHT_DCLICK, 595 */ 596 597 // the symbolic names for the mouse buttons 598 enum 599 { 600 wxMOUSE_BTN_ANY = -1, 601 wxMOUSE_BTN_NONE = -1, 602 wxMOUSE_BTN_LEFT = 0, 603 wxMOUSE_BTN_MIDDLE = 1, 604 wxMOUSE_BTN_RIGHT = 2 605 }; 606 607 class WXDLLEXPORT wxMouseEvent : public wxEvent 608 { 609 public: 610 wxMouseEvent(wxEventType mouseType = wxEVT_NULL); wxMouseEvent(const wxMouseEvent & event)611 wxMouseEvent(const wxMouseEvent& event) : wxEvent(event) 612 { Assign(event); } 613 614 // Was it a button event? (*doesn't* mean: is any button *down*?) IsButton()615 bool IsButton() const { return Button(wxMOUSE_BTN_ANY); } 616 617 // Was it a down event from button 1, 2 or 3 or any? 618 bool ButtonDown(int but = wxMOUSE_BTN_ANY) const; 619 620 // Was it a dclick event from button 1, 2 or 3 or any? 621 bool ButtonDClick(int but = wxMOUSE_BTN_ANY) const; 622 623 // Was it a up event from button 1, 2 or 3 or any? 624 bool ButtonUp(int but = wxMOUSE_BTN_ANY) const; 625 626 // Was the given button 1,2,3 or any changing state? 627 bool Button(int but) const; 628 629 // Was the given button 1,2,3 or any in Down state? 630 bool ButtonIsDown(int but) const; 631 632 // Get the button which is changing state (wxMOUSE_BTN_NONE if none) 633 int GetButton() const; 634 635 // Find state of shift/control keys ControlDown()636 bool ControlDown() const { return m_controlDown; } MetaDown()637 bool MetaDown() const { return m_metaDown; } AltDown()638 bool AltDown() const { return m_altDown; } ShiftDown()639 bool ShiftDown() const { return m_shiftDown; } 640 641 // Find which event was just generated LeftDown()642 bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); } MiddleDown()643 bool MiddleDown() const { return (m_eventType == wxEVT_MIDDLE_DOWN); } RightDown()644 bool RightDown() const { return (m_eventType == wxEVT_RIGHT_DOWN); } 645 LeftUp()646 bool LeftUp() const { return (m_eventType == wxEVT_LEFT_UP); } MiddleUp()647 bool MiddleUp() const { return (m_eventType == wxEVT_MIDDLE_UP); } RightUp()648 bool RightUp() const { return (m_eventType == wxEVT_RIGHT_UP); } 649 LeftDClick()650 bool LeftDClick() const { return (m_eventType == wxEVT_LEFT_DCLICK); } MiddleDClick()651 bool MiddleDClick() const { return (m_eventType == wxEVT_MIDDLE_DCLICK); } RightDClick()652 bool RightDClick() const { return (m_eventType == wxEVT_RIGHT_DCLICK); } 653 654 // Find the current state of the mouse buttons (regardless 655 // of current event type) LeftIsDown()656 bool LeftIsDown() const { return m_leftDown; } MiddleIsDown()657 bool MiddleIsDown() const { return m_middleDown; } RightIsDown()658 bool RightIsDown() const { return m_rightDown; } 659 660 // True if a button is down and the mouse is moving Dragging()661 bool Dragging() const 662 { 663 return ((m_eventType == wxEVT_MOTION) && 664 (LeftIsDown() || MiddleIsDown() || RightIsDown())); 665 } 666 667 // True if the mouse is moving, and no button is down Moving()668 bool Moving() const { return (m_eventType == wxEVT_MOTION); } 669 670 // True if the mouse is just entering the window Entering()671 bool Entering() const { return (m_eventType == wxEVT_ENTER_WINDOW); } 672 673 // True if the mouse is just leaving the window Leaving()674 bool Leaving() const { return (m_eventType == wxEVT_LEAVE_WINDOW); } 675 676 // Find the position of the event GetPosition(wxCoord * xpos,wxCoord * ypos)677 void GetPosition(wxCoord *xpos, wxCoord *ypos) const 678 { 679 if (xpos) 680 *xpos = m_x; 681 if (ypos) 682 *ypos = m_y; 683 } 684 685 #ifndef __WIN16__ GetPosition(long * xpos,long * ypos)686 void GetPosition(long *xpos, long *ypos) const 687 { 688 if (xpos) 689 *xpos = (long)m_x; 690 if (ypos) 691 *ypos = (long)m_y; 692 } 693 #endif 694 695 // Find the position of the event GetPosition()696 wxPoint GetPosition() const { return wxPoint(m_x, m_y); } 697 698 // Find the logical position of the event given the DC 699 wxPoint GetLogicalPosition(const wxDC& dc) const ; 700 701 // Compatibility 702 #if WXWIN_COMPATIBILITY Position(long * xpos,long * ypos)703 void Position(long *xpos, long *ypos) const 704 { 705 if (xpos) 706 *xpos = (long)m_x; 707 if (ypos) 708 *ypos = (long)m_y; 709 } 710 Position(float * xpos,float * ypos)711 void Position(float *xpos, float *ypos) const 712 { 713 *xpos = (float) m_x; *ypos = (float) m_y; 714 } 715 #endif // WXWIN_COMPATIBILITY 716 717 // Get X position GetX()718 wxCoord GetX() const { return m_x; } 719 720 // Get Y position GetY()721 wxCoord GetY() const { return m_y; } 722 723 // Get wheel rotation, positive or negative indicates direction of 724 // rotation. Current devices all send an event when rotation is equal to 725 // +/-WheelDelta, but this allows for finer resolution devices to be 726 // created in the future. Because of this you shouldn't assume that one 727 // event is equal to 1 line or whatever, but you should be able to either 728 // do partial line scrolling or wait until +/-WheelDelta rotation values 729 // have been accumulated before scrolling. GetWheelRotation()730 int GetWheelRotation() const { return m_wheelRotation; } 731 732 // Get wheel delta, normally 120. This is the threshold for action to be 733 // taken, and one such action (for example, scrolling one increment) 734 // should occur for each delta. GetWheelDelta()735 int GetWheelDelta() const { return m_wheelDelta; } 736 737 // Returns the configured number of lines (or whatever) to be scrolled per 738 // wheel action. Defaults to one. GetLinesPerAction()739 int GetLinesPerAction() const { return m_linesPerAction; } 740 741 // Is the system set to do page scrolling? IsPageScroll()742 bool IsPageScroll() const { return ((unsigned int)m_linesPerAction == UINT_MAX); } 743 Clone()744 virtual wxEvent *Clone() const { return new wxMouseEvent(*this); } 745 746 wxMouseEvent& operator=(const wxMouseEvent& event) { Assign(event); return *this; } 747 748 public: 749 wxCoord m_x, m_y; 750 751 bool m_leftDown; 752 bool m_middleDown; 753 bool m_rightDown; 754 755 bool m_controlDown; 756 bool m_shiftDown; 757 bool m_altDown; 758 bool m_metaDown; 759 760 int m_wheelRotation; 761 int m_wheelDelta; 762 int m_linesPerAction; 763 764 protected: 765 void Assign(const wxMouseEvent& evt); 766 767 private: 768 DECLARE_DYNAMIC_CLASS(wxMouseEvent) 769 }; 770 771 // Cursor set event 772 773 /* 774 wxEVT_SET_CURSOR 775 */ 776 777 class WXDLLEXPORT wxSetCursorEvent : public wxEvent 778 { 779 public: 780 wxSetCursorEvent(wxCoord x = 0, wxCoord y = 0) 781 : wxEvent(0, wxEVT_SET_CURSOR), 782 m_x(x), m_y(y), m_cursor() 783 { } 784 wxSetCursorEvent(const wxSetCursorEvent & event)785 wxSetCursorEvent(const wxSetCursorEvent & event) : wxEvent(event) 786 { m_x = event.m_x; 787 m_y = event.m_y; 788 m_cursor = event.m_cursor; } 789 GetX()790 wxCoord GetX() const { return m_x; } GetY()791 wxCoord GetY() const { return m_y; } 792 SetCursor(const wxCursor & cursor)793 void SetCursor(const wxCursor& cursor) { m_cursor = cursor; } GetCursor()794 const wxCursor& GetCursor() const { return m_cursor; } HasCursor()795 bool HasCursor() const { return m_cursor.Ok(); } 796 Clone()797 virtual wxEvent *Clone() const { return new wxSetCursorEvent(*this); } 798 799 private: 800 wxCoord m_x, m_y; 801 wxCursor m_cursor; 802 803 private: 804 DECLARE_DYNAMIC_CLASS(wxSetCursorEvent) 805 }; 806 807 // Keyboard input event class 808 809 /* 810 wxEVT_CHAR 811 wxEVT_CHAR_HOOK 812 wxEVT_KEY_DOWN 813 wxEVT_KEY_UP 814 */ 815 816 class WXDLLEXPORT wxKeyEvent : public wxEvent 817 { 818 public: 819 wxKeyEvent(wxEventType keyType = wxEVT_NULL); 820 wxKeyEvent(const wxKeyEvent& evt); 821 822 // Find state of shift/control keys ControlDown()823 bool ControlDown() const { return m_controlDown; } MetaDown()824 bool MetaDown() const { return m_metaDown; } AltDown()825 bool AltDown() const { return m_altDown; } ShiftDown()826 bool ShiftDown() const { return m_shiftDown; } 827 828 // exclude MetaDown() from HasModifiers() because NumLock under X is often 829 // configured as mod2 modifier, yet the key events even when it is pressed 830 // should be processed normally, not like Ctrl- or Alt-key HasModifiers()831 bool HasModifiers() const { return ControlDown() || AltDown(); } 832 833 // get the key code: an ASCII7 char or an element of wxKeyCode enum GetKeyCode()834 int GetKeyCode() const { return (int)m_keyCode; } 835 836 // get the raw key code (platform-dependent) GetRawKeyCode()837 wxUint32 GetRawKeyCode() const { return m_rawCode; } 838 839 // get the raw key flags (platform-dependent) GetRawKeyFlags()840 wxUint32 GetRawKeyFlags() const { return m_rawFlags; } 841 842 // Find the position of the event GetPosition(wxCoord * xpos,wxCoord * ypos)843 void GetPosition(wxCoord *xpos, wxCoord *ypos) const 844 { 845 if (xpos) *xpos = m_x; 846 if (ypos) *ypos = m_y; 847 } 848 849 #ifndef __WIN16__ GetPosition(long * xpos,long * ypos)850 void GetPosition(long *xpos, long *ypos) const 851 { 852 if (xpos) *xpos = (long)m_x; 853 if (ypos) *ypos = (long)m_y; 854 } 855 #endif 856 GetPosition()857 wxPoint GetPosition() const 858 { return wxPoint(m_x, m_y); } 859 860 // Get X position GetX()861 wxCoord GetX() const { return m_x; } 862 863 // Get Y position GetY()864 wxCoord GetY() const { return m_y; } 865 866 // deprecated KeyCode()867 long KeyCode() const { return m_keyCode; } 868 Clone()869 virtual wxEvent *Clone() const { return new wxKeyEvent(*this); } 870 871 // we do need to copy wxKeyEvent sometimes (in wxTreeCtrl code, for 872 // example) 873 wxKeyEvent& operator=(const wxKeyEvent& evt) 874 { 875 m_x = evt.m_x; 876 m_y = evt.m_y; 877 878 m_keyCode = evt.m_keyCode; 879 880 m_controlDown = evt.m_controlDown; 881 m_shiftDown = evt.m_shiftDown; 882 m_altDown = evt.m_altDown; 883 m_metaDown = evt.m_metaDown; 884 m_scanCode = evt.m_scanCode; 885 m_rawCode = evt.m_rawCode; 886 m_rawFlags = evt.m_rawFlags; 887 888 return *this; 889 } 890 891 public: 892 wxCoord m_x, m_y; 893 894 long m_keyCode; 895 896 bool m_controlDown; 897 bool m_shiftDown; 898 bool m_altDown; 899 bool m_metaDown; 900 bool m_scanCode; 901 902 #if wxUSE_UNICODE 903 // This contains the full Unicode character 904 // in a character events in Unicode mode 905 wxChar m_uniChar; 906 #endif 907 908 // these fields contain the platform-specific information about 909 // key that was pressed 910 wxUint32 m_rawCode; 911 wxUint32 m_rawFlags; 912 913 private: 914 DECLARE_DYNAMIC_CLASS(wxKeyEvent) 915 }; 916 917 // Size event class 918 /* 919 wxEVT_SIZE 920 */ 921 922 class WXDLLEXPORT wxSizeEvent : public wxEvent 923 { 924 public: wxSizeEvent()925 wxSizeEvent() : wxEvent(0, wxEVT_SIZE) 926 { } 927 wxSizeEvent(const wxSize& sz, int id = 0) wxEvent(id,wxEVT_SIZE)928 : wxEvent(id, wxEVT_SIZE), 929 m_size(sz) 930 { } wxSizeEvent(const wxSizeEvent & event)931 wxSizeEvent(const wxSizeEvent & event) 932 : wxEvent(event), 933 m_size(event.m_size) 934 { } 935 GetSize()936 wxSize GetSize() const { return m_size; } 937 Clone()938 virtual wxEvent *Clone() const { return new wxSizeEvent(*this); } 939 940 public: 941 wxSize m_size; 942 943 private: 944 DECLARE_DYNAMIC_CLASS(wxSizeEvent) 945 }; 946 947 // Move event class 948 949 /* 950 wxEVT_MOVE 951 */ 952 953 class WXDLLEXPORT wxMoveEvent : public wxEvent 954 { 955 public: wxMoveEvent()956 wxMoveEvent() 957 : wxEvent(0, wxEVT_MOVE) 958 { } 959 wxMoveEvent(const wxPoint& pos, int id = 0) wxEvent(id,wxEVT_MOVE)960 : wxEvent(id, wxEVT_MOVE), 961 m_pos(pos) 962 { } wxMoveEvent(const wxMoveEvent & event)963 wxMoveEvent(const wxMoveEvent& event) 964 : wxEvent(event), 965 m_pos(event.m_pos) 966 { } 967 GetPosition()968 wxPoint GetPosition() const { return m_pos; } 969 Clone()970 virtual wxEvent *Clone() const { return new wxMoveEvent(*this); } 971 972 wxPoint m_pos; 973 974 private: 975 DECLARE_DYNAMIC_CLASS(wxMoveEvent) 976 }; 977 978 // Paint event class 979 /* 980 wxEVT_PAINT 981 wxEVT_NC_PAINT 982 wxEVT_PAINT_ICON 983 */ 984 985 #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__)) 986 // see comments in src/msw|os2/dcclient.cpp where g_isPainting is defined 987 extern WXDLLEXPORT int g_isPainting; 988 #endif // debug 989 990 class WXDLLEXPORT wxPaintEvent : public wxEvent 991 { 992 public: 993 wxPaintEvent(int Id = 0) wxEvent(Id,wxEVT_PAINT)994 : wxEvent(Id, wxEVT_PAINT) 995 { 996 #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__)) 997 // set the internal flag for the duration of processing of WM_PAINT 998 g_isPainting++; 999 #endif // debug 1000 } 1001 1002 #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__)) ~wxPaintEvent()1003 ~wxPaintEvent() 1004 { 1005 g_isPainting--; 1006 } 1007 #endif // debug 1008 Clone()1009 virtual wxEvent *Clone() const { return new wxPaintEvent(*this); } 1010 1011 private: 1012 DECLARE_DYNAMIC_CLASS(wxPaintEvent) 1013 }; 1014 1015 class WXDLLEXPORT wxNcPaintEvent : public wxEvent 1016 { 1017 public: 1018 wxNcPaintEvent(int id = 0) wxEvent(id,wxEVT_NC_PAINT)1019 : wxEvent(id, wxEVT_NC_PAINT) 1020 { } 1021 Clone()1022 virtual wxEvent *Clone() const { return new wxNcPaintEvent(*this); } 1023 1024 private: 1025 DECLARE_DYNAMIC_CLASS(wxNcPaintEvent) 1026 }; 1027 1028 // Erase background event class 1029 /* 1030 wxEVT_ERASE_BACKGROUND 1031 */ 1032 1033 class WXDLLEXPORT wxEraseEvent : public wxEvent 1034 { 1035 private: 1036 wxEraseEvent& operator=(const wxEraseEvent& event); 1037 1038 public: 1039 wxEraseEvent(int Id = 0, wxDC *dc = (wxDC *) NULL) wxEvent(Id,wxEVT_ERASE_BACKGROUND)1040 : wxEvent(Id, wxEVT_ERASE_BACKGROUND), 1041 m_dc(dc) 1042 { } 1043 wxEraseEvent(const wxEraseEvent & event)1044 wxEraseEvent(const wxEraseEvent& event) 1045 : wxEvent(event), 1046 m_dc(event.m_dc) 1047 { } 1048 GetDC()1049 wxDC *GetDC() const { return m_dc; } 1050 Clone()1051 virtual wxEvent *Clone() const { return new wxEraseEvent(*this); } 1052 1053 wxDC *m_dc; 1054 1055 private: 1056 DECLARE_DYNAMIC_CLASS(wxEraseEvent) 1057 }; 1058 1059 // Focus event class 1060 /* 1061 wxEVT_SET_FOCUS 1062 wxEVT_KILL_FOCUS 1063 */ 1064 1065 class WXDLLEXPORT wxFocusEvent : public wxEvent 1066 { 1067 private: 1068 wxFocusEvent& operator=(const wxFocusEvent& event); 1069 1070 public: 1071 wxFocusEvent(wxEventType type = wxEVT_NULL, int id = 0) wxEvent(id,type)1072 : wxEvent(id, type) 1073 { m_win = NULL; } 1074 wxFocusEvent(const wxFocusEvent & event)1075 wxFocusEvent(const wxFocusEvent& event) 1076 : wxEvent(event) 1077 { m_win = event.m_win; } 1078 1079 // The window associated with this event is the window which had focus 1080 // before for SET event and the window which will have focus for the KILL 1081 // one. NB: it may be NULL in both cases! GetWindow()1082 wxWindow *GetWindow() const { return m_win; } SetWindow(wxWindow * win)1083 void SetWindow(wxWindow *win) { m_win = win; } 1084 Clone()1085 virtual wxEvent *Clone() const { return new wxFocusEvent(*this); } 1086 1087 private: 1088 wxWindow *m_win; 1089 1090 private: 1091 DECLARE_DYNAMIC_CLASS(wxFocusEvent) 1092 }; 1093 1094 // wxChildFocusEvent notifies the parent that a child has got the focus: unlike 1095 // wxFocusEvent it is propgated upwards the window chain 1096 class WXDLLEXPORT wxChildFocusEvent : public wxCommandEvent 1097 { 1098 public: 1099 wxChildFocusEvent(wxWindow *win = NULL); 1100 GetWindow()1101 wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); } 1102 Clone()1103 virtual wxEvent *Clone() const { return new wxChildFocusEvent(*this); } 1104 1105 private: 1106 DECLARE_DYNAMIC_CLASS(wxChildFocusEvent) 1107 }; 1108 1109 // Activate event class 1110 /* 1111 wxEVT_ACTIVATE 1112 wxEVT_ACTIVATE_APP 1113 */ 1114 1115 class WXDLLEXPORT wxActivateEvent : public wxEvent 1116 { 1117 public: 1118 wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = TRUE, int Id = 0) wxEvent(Id,type)1119 : wxEvent(Id, type) 1120 { m_active = active; } wxActivateEvent(const wxActivateEvent & event)1121 wxActivateEvent(const wxActivateEvent& event) 1122 : wxEvent(event) 1123 { m_active = event.m_active; } 1124 GetActive()1125 bool GetActive() const { return m_active; } 1126 Clone()1127 virtual wxEvent *Clone() const { return new wxActivateEvent(*this); } 1128 1129 private: 1130 bool m_active; 1131 1132 private: 1133 DECLARE_DYNAMIC_CLASS(wxActivateEvent) 1134 }; 1135 1136 // InitDialog event class 1137 /* 1138 wxEVT_INIT_DIALOG 1139 */ 1140 1141 class WXDLLEXPORT wxInitDialogEvent : public wxEvent 1142 { 1143 public: 1144 wxInitDialogEvent(int Id = 0) wxEvent(Id,wxEVT_INIT_DIALOG)1145 : wxEvent(Id, wxEVT_INIT_DIALOG) 1146 { } 1147 Clone()1148 virtual wxEvent *Clone() const { return new wxInitDialogEvent(*this); } 1149 1150 private: 1151 DECLARE_DYNAMIC_CLASS(wxInitDialogEvent) 1152 }; 1153 1154 // Miscellaneous menu event class 1155 /* 1156 wxEVT_MENU_OPEN, 1157 wxEVT_MENU_CLOSE, 1158 wxEVT_MENU_HIGHLIGHT, 1159 */ 1160 1161 class WXDLLEXPORT wxMenuEvent : public wxEvent 1162 { 1163 public: 1164 wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0) wxEvent(id,type)1165 : wxEvent(id, type) 1166 { m_menuId = id; } wxMenuEvent(const wxMenuEvent & event)1167 wxMenuEvent(const wxMenuEvent & event) 1168 : wxEvent(event) 1169 { m_menuId = event.m_menuId; } 1170 1171 // only for wxEVT_MENU_HIGHLIGHT GetMenuId()1172 int GetMenuId() const { return m_menuId; } 1173 1174 // only for wxEVT_MENU_OPEN/CLOSE IsPopup()1175 bool IsPopup() const { return m_menuId == -1; } 1176 Clone()1177 virtual wxEvent *Clone() const { return new wxMenuEvent(*this); } 1178 1179 private: 1180 int m_menuId; 1181 1182 DECLARE_DYNAMIC_CLASS(wxMenuEvent) 1183 }; 1184 1185 // Window close or session close event class 1186 /* 1187 wxEVT_CLOSE_WINDOW, 1188 wxEVT_END_SESSION, 1189 wxEVT_QUERY_END_SESSION 1190 */ 1191 1192 class WXDLLEXPORT wxCloseEvent : public wxEvent 1193 { 1194 public: 1195 wxCloseEvent(wxEventType type = wxEVT_NULL, int id = 0) wxEvent(id,type)1196 : wxEvent(id, type), 1197 m_loggingOff(TRUE), 1198 m_veto(FALSE), // should be FALSE by default 1199 m_canVeto(TRUE) 1200 { 1201 #if WXWIN_COMPATIBILITY 1202 m_force = FALSE; 1203 #endif // WXWIN_COMPATIBILITY 1204 } wxCloseEvent(const wxCloseEvent & event)1205 wxCloseEvent(const wxCloseEvent & event) 1206 : wxEvent(event), 1207 m_loggingOff(event.m_loggingOff), 1208 m_veto(event.m_veto), 1209 m_canVeto(event.m_canVeto) 1210 { 1211 #if WXWIN_COMPATIBILITY 1212 m_force = event.m_force; 1213 #endif // WXWIN_COMPATIBILITY 1214 } 1215 SetLoggingOff(bool logOff)1216 void SetLoggingOff(bool logOff) { m_loggingOff = logOff; } GetLoggingOff()1217 bool GetLoggingOff() const { return m_loggingOff; } 1218 1219 void Veto(bool veto = TRUE) 1220 { 1221 // GetVeto() will return FALSE anyhow... 1222 wxCHECK_RET( m_canVeto, 1223 wxT("call to Veto() ignored (can't veto this event)") ); 1224 1225 m_veto = veto; 1226 } SetCanVeto(bool canVeto)1227 void SetCanVeto(bool canVeto) { m_canVeto = canVeto; } 1228 // No more asserts here please, the one you put here was wrong. CanVeto()1229 bool CanVeto() const { return m_canVeto; } GetVeto()1230 bool GetVeto() const { return m_canVeto && m_veto; } 1231 1232 #if WXWIN_COMPATIBILITY 1233 // This is probably obsolete now, since we use CanVeto instead, in 1234 // both OnCloseWindow and OnQueryEndSession. 1235 // m_force == ! m_canVeto i.e., can't veto means we must force it to close. SetForce(bool force)1236 void SetForce(bool force) { m_force = force; } GetForce()1237 bool GetForce() const { return m_force; } 1238 #endif 1239 Clone()1240 virtual wxEvent *Clone() const { return new wxCloseEvent(*this); } 1241 1242 protected: 1243 bool m_loggingOff; 1244 bool m_veto, m_canVeto; 1245 1246 #if WXWIN_COMPATIBILITY 1247 bool m_force; 1248 #endif 1249 1250 private: 1251 DECLARE_DYNAMIC_CLASS(wxCloseEvent) 1252 1253 }; 1254 1255 /* 1256 wxEVT_SHOW 1257 */ 1258 1259 class WXDLLEXPORT wxShowEvent : public wxEvent 1260 { 1261 public: 1262 wxShowEvent(int id = 0, bool show = FALSE) wxEvent(id,wxEVT_SHOW)1263 : wxEvent(id, wxEVT_SHOW) 1264 { m_show = show; } wxShowEvent(const wxShowEvent & event)1265 wxShowEvent(const wxShowEvent & event) 1266 : wxEvent(event) 1267 { m_show = event.m_show; } 1268 SetShow(bool show)1269 void SetShow(bool show) { m_show = show; } GetShow()1270 bool GetShow() const { return m_show; } 1271 Clone()1272 virtual wxEvent *Clone() const { return new wxShowEvent(*this); } 1273 1274 protected: 1275 bool m_show; 1276 1277 private: 1278 DECLARE_DYNAMIC_CLASS(wxShowEvent) 1279 }; 1280 1281 /* 1282 wxEVT_ICONIZE 1283 */ 1284 1285 class WXDLLEXPORT wxIconizeEvent : public wxEvent 1286 { 1287 public: 1288 wxIconizeEvent(int id = 0, bool iconized = TRUE) wxEvent(id,wxEVT_ICONIZE)1289 : wxEvent(id, wxEVT_ICONIZE) 1290 { m_iconized = iconized; } wxIconizeEvent(const wxIconizeEvent & event)1291 wxIconizeEvent(const wxIconizeEvent & event) 1292 : wxEvent(event) 1293 { m_iconized = event.m_iconized; } 1294 1295 // return true if the frame was iconized, false if restored Iconized()1296 bool Iconized() const { return m_iconized; } 1297 Clone()1298 virtual wxEvent *Clone() const { return new wxIconizeEvent(*this); } 1299 1300 protected: 1301 bool m_iconized; 1302 1303 private: 1304 DECLARE_DYNAMIC_CLASS(wxIconizeEvent) 1305 }; 1306 /* 1307 wxEVT_MAXIMIZE 1308 */ 1309 1310 class WXDLLEXPORT wxMaximizeEvent : public wxEvent 1311 { 1312 public: 1313 wxMaximizeEvent(int id = 0) wxEvent(id,wxEVT_MAXIMIZE)1314 : wxEvent(id, wxEVT_MAXIMIZE) 1315 { } 1316 Clone()1317 virtual wxEvent *Clone() const { return new wxMaximizeEvent(*this); } 1318 1319 private: 1320 DECLARE_DYNAMIC_CLASS(wxMaximizeEvent) 1321 }; 1322 1323 // Joystick event class 1324 /* 1325 wxEVT_JOY_BUTTON_DOWN, 1326 wxEVT_JOY_BUTTON_UP, 1327 wxEVT_JOY_MOVE, 1328 wxEVT_JOY_ZMOVE 1329 */ 1330 1331 // Which joystick? Same as Windows ids so no conversion necessary. 1332 enum 1333 { 1334 wxJOYSTICK1, 1335 wxJOYSTICK2 1336 }; 1337 1338 // Which button is down? 1339 enum 1340 { 1341 wxJOY_BUTTON_ANY = -1, 1342 wxJOY_BUTTON1 = 1, 1343 wxJOY_BUTTON2 = 2, 1344 wxJOY_BUTTON3 = 4, 1345 wxJOY_BUTTON4 = 8 1346 }; 1347 1348 class WXDLLEXPORT wxJoystickEvent : public wxEvent 1349 { 1350 public: 1351 wxPoint m_pos; 1352 int m_zPosition; 1353 int m_buttonChange; // Which button changed? 1354 int m_buttonState; // Which buttons are down? 1355 int m_joyStick; // Which joystick? 1356 1357 wxJoystickEvent(wxEventType type = wxEVT_NULL, 1358 int state = 0, 1359 int joystick = wxJOYSTICK1, 1360 int change = 0) 1361 : wxEvent(0, type), 1362 m_pos(0, 0), 1363 m_zPosition(0), 1364 m_buttonChange(change), 1365 m_buttonState(state), 1366 m_joyStick(joystick) 1367 { 1368 } wxJoystickEvent(const wxJoystickEvent & event)1369 wxJoystickEvent(const wxJoystickEvent & event) 1370 : wxEvent(event), 1371 m_pos(event.m_pos), 1372 m_zPosition(event.m_zPosition), 1373 m_buttonChange(event.m_buttonChange), 1374 m_buttonState(event.m_buttonState), 1375 m_joyStick(event.m_joyStick) 1376 { } 1377 GetPosition()1378 wxPoint GetPosition() const { return m_pos; } GetZPosition()1379 int GetZPosition() const { return m_zPosition; } GetButtonState()1380 int GetButtonState() const { return m_buttonState; } GetButtonChange()1381 int GetButtonChange() const { return m_buttonChange; } GetJoystick()1382 int GetJoystick() const { return m_joyStick; } 1383 SetJoystick(int stick)1384 void SetJoystick(int stick) { m_joyStick = stick; } SetButtonState(int state)1385 void SetButtonState(int state) { m_buttonState = state; } SetButtonChange(int change)1386 void SetButtonChange(int change) { m_buttonChange = change; } SetPosition(const wxPoint & pos)1387 void SetPosition(const wxPoint& pos) { m_pos = pos; } SetZPosition(int zPos)1388 void SetZPosition(int zPos) { m_zPosition = zPos; } 1389 1390 // Was it a button event? (*doesn't* mean: is any button *down*?) IsButton()1391 bool IsButton() const { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) || 1392 (GetEventType() == wxEVT_JOY_BUTTON_UP)); } 1393 1394 // Was it a move event? IsMove()1395 bool IsMove() const { return (GetEventType() == wxEVT_JOY_MOVE) ; } 1396 1397 // Was it a zmove event? IsZMove()1398 bool IsZMove() const { return (GetEventType() == wxEVT_JOY_ZMOVE) ; } 1399 1400 // Was it a down event from button 1, 2, 3, 4 or any? 1401 bool ButtonDown(int but = wxJOY_BUTTON_ANY) const 1402 { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) && 1403 ((but == wxJOY_BUTTON_ANY) || (but == m_buttonChange))); } 1404 1405 // Was it a up event from button 1, 2, 3 or any? 1406 bool ButtonUp(int but = wxJOY_BUTTON_ANY) const 1407 { return ((GetEventType() == wxEVT_JOY_BUTTON_UP) && 1408 ((but == wxJOY_BUTTON_ANY) || (but == m_buttonChange))); } 1409 1410 // Was the given button 1,2,3,4 or any in Down state? 1411 bool ButtonIsDown(int but = wxJOY_BUTTON_ANY) const 1412 { return (((but == wxJOY_BUTTON_ANY) && (m_buttonState != 0)) || 1413 ((m_buttonState & but) == but)); } 1414 Clone()1415 virtual wxEvent *Clone() const { return new wxJoystickEvent(*this); } 1416 1417 private: 1418 DECLARE_DYNAMIC_CLASS(wxJoystickEvent) 1419 }; 1420 1421 // Drop files event class 1422 /* 1423 wxEVT_DROP_FILES 1424 */ 1425 1426 class WXDLLEXPORT wxDropFilesEvent : public wxEvent 1427 { 1428 private: 1429 wxDropFilesEvent& operator=(const wxDropFilesEvent& event); 1430 1431 public: 1432 int m_noFiles; 1433 wxPoint m_pos; 1434 wxString* m_files; 1435 1436 wxDropFilesEvent(wxEventType type = wxEVT_NULL, 1437 int noFiles = 0, 1438 wxString *files = (wxString *) NULL) 1439 : wxEvent(0, type), 1440 m_noFiles(noFiles), 1441 m_pos(), 1442 m_files(files) 1443 { } 1444 1445 // we need a copy ctor to avoid deleting m_files pointer twice wxDropFilesEvent(const wxDropFilesEvent & other)1446 wxDropFilesEvent(const wxDropFilesEvent& other) 1447 : wxEvent(other), 1448 m_noFiles(other.m_noFiles), 1449 m_pos(other.m_pos), 1450 m_files(NULL) 1451 { 1452 m_files = new wxString[m_noFiles]; 1453 for ( int n = 0; n < m_noFiles; n++ ) 1454 { 1455 m_files[n] = other.m_files[n]; 1456 } 1457 } 1458 ~wxDropFilesEvent()1459 virtual ~wxDropFilesEvent() 1460 { 1461 delete [] m_files; 1462 } 1463 GetPosition()1464 wxPoint GetPosition() const { return m_pos; } GetNumberOfFiles()1465 int GetNumberOfFiles() const { return m_noFiles; } GetFiles()1466 wxString *GetFiles() const { return m_files; } 1467 Clone()1468 virtual wxEvent *Clone() const { return new wxDropFilesEvent(*this); } 1469 1470 private: 1471 DECLARE_DYNAMIC_CLASS(wxDropFilesEvent) 1472 }; 1473 1474 // Update UI event 1475 /* 1476 wxEVT_UPDATE_UI 1477 */ 1478 1479 class WXDLLEXPORT wxUpdateUIEvent : public wxCommandEvent 1480 { 1481 public: 1482 wxUpdateUIEvent(wxWindowID commandId = 0) wxCommandEvent(wxEVT_UPDATE_UI,commandId)1483 : wxCommandEvent(wxEVT_UPDATE_UI, commandId) 1484 { 1485 m_checked = 1486 m_enabled = 1487 m_setEnabled = 1488 m_setText = 1489 m_setChecked = FALSE; 1490 } wxUpdateUIEvent(const wxUpdateUIEvent & event)1491 wxUpdateUIEvent(const wxUpdateUIEvent & event) 1492 : wxCommandEvent(event), 1493 m_checked(event.m_checked), 1494 m_enabled(event.m_enabled), 1495 m_setEnabled(event.m_setEnabled), 1496 m_setText(event.m_setText), 1497 m_setChecked(event.m_setChecked), 1498 m_text(event.m_text) 1499 { } 1500 GetChecked()1501 bool GetChecked() const { return m_checked; } GetEnabled()1502 bool GetEnabled() const { return m_enabled; } GetText()1503 wxString GetText() const { return m_text; } GetSetText()1504 bool GetSetText() const { return m_setText; } GetSetChecked()1505 bool GetSetChecked() const { return m_setChecked; } GetSetEnabled()1506 bool GetSetEnabled() const { return m_setEnabled; } 1507 Check(bool check)1508 void Check(bool check) { m_checked = check; m_setChecked = TRUE; } Enable(bool enable)1509 void Enable(bool enable) { m_enabled = enable; m_setEnabled = TRUE; } SetText(const wxString & text)1510 void SetText(const wxString& text) { m_text = text; m_setText = TRUE; } 1511 Clone()1512 virtual wxEvent *Clone() const { return new wxUpdateUIEvent(*this); } 1513 1514 protected: 1515 bool m_checked; 1516 bool m_enabled; 1517 bool m_setEnabled; 1518 bool m_setText; 1519 bool m_setChecked; 1520 wxString m_text; 1521 1522 private: 1523 DECLARE_DYNAMIC_CLASS(wxUpdateUIEvent) 1524 }; 1525 1526 /* 1527 wxEVT_SYS_COLOUR_CHANGED 1528 */ 1529 1530 // TODO: shouldn't all events record the window ID? 1531 class WXDLLEXPORT wxSysColourChangedEvent : public wxEvent 1532 { 1533 public: wxSysColourChangedEvent()1534 wxSysColourChangedEvent() 1535 : wxEvent(0, wxEVT_SYS_COLOUR_CHANGED) 1536 { } 1537 Clone()1538 virtual wxEvent *Clone() const { return new wxSysColourChangedEvent(*this); } 1539 1540 private: 1541 DECLARE_DYNAMIC_CLASS(wxSysColourChangedEvent) 1542 }; 1543 1544 /* 1545 wxEVT_MOUSE_CAPTURE_CHANGED 1546 The window losing the capture receives this message 1547 (even if it released the capture itself). 1548 */ 1549 1550 class WXDLLEXPORT wxMouseCaptureChangedEvent : public wxEvent 1551 { 1552 private: 1553 wxMouseCaptureChangedEvent operator=(const wxMouseCaptureChangedEvent& event); 1554 1555 public: 1556 wxMouseCaptureChangedEvent(wxWindowID id = 0, wxWindow* gainedCapture = NULL) wxEvent(id,wxEVT_MOUSE_CAPTURE_CHANGED)1557 : wxEvent(id, wxEVT_MOUSE_CAPTURE_CHANGED), 1558 m_gainedCapture(gainedCapture) 1559 { } 1560 wxMouseCaptureChangedEvent(const wxMouseCaptureChangedEvent & event)1561 wxMouseCaptureChangedEvent(const wxMouseCaptureChangedEvent& event) 1562 : wxEvent(event), 1563 m_gainedCapture(event.m_gainedCapture) 1564 { } 1565 Clone()1566 virtual wxEvent *Clone() const { return new wxMouseCaptureChangedEvent(*this); } 1567 GetCapturedWindow()1568 wxWindow* GetCapturedWindow() const { return m_gainedCapture; }; 1569 1570 private: 1571 wxWindow* m_gainedCapture; 1572 DECLARE_DYNAMIC_CLASS(wxMouseCaptureChangedEvent) 1573 }; 1574 1575 /* 1576 wxEVT_DISPLAY_CHANGED 1577 */ 1578 class WXDLLEXPORT wxDisplayChangedEvent : public wxEvent 1579 { 1580 private: DECLARE_DYNAMIC_CLASS(wxDisplayChangedEvent)1581 DECLARE_DYNAMIC_CLASS(wxDisplayChangedEvent) 1582 1583 public: 1584 wxDisplayChangedEvent() 1585 : wxEvent(0, wxEVT_DISPLAY_CHANGED) 1586 { } 1587 Clone()1588 virtual wxEvent *Clone() const { return new wxDisplayChangedEvent(*this); } 1589 }; 1590 1591 /* 1592 wxEVT_PALETTE_CHANGED 1593 */ 1594 1595 class WXDLLEXPORT wxPaletteChangedEvent : public wxEvent 1596 { 1597 private: 1598 wxPaletteChangedEvent& operator=(const wxPaletteChangedEvent& event); 1599 1600 public: 1601 wxPaletteChangedEvent(wxWindowID id = 0) wxEvent(id,wxEVT_PALETTE_CHANGED)1602 : wxEvent(id, wxEVT_PALETTE_CHANGED), 1603 m_changedWindow((wxWindow *) NULL) 1604 { } 1605 wxPaletteChangedEvent(const wxPaletteChangedEvent & event)1606 wxPaletteChangedEvent(const wxPaletteChangedEvent& event) 1607 : wxEvent(event), 1608 m_changedWindow(event.m_changedWindow) 1609 { } 1610 SetChangedWindow(wxWindow * win)1611 void SetChangedWindow(wxWindow* win) { m_changedWindow = win; } GetChangedWindow()1612 wxWindow* GetChangedWindow() const { return m_changedWindow; } 1613 Clone()1614 virtual wxEvent *Clone() const { return new wxPaletteChangedEvent(*this); } 1615 1616 protected: 1617 wxWindow* m_changedWindow; 1618 1619 private: 1620 DECLARE_DYNAMIC_CLASS(wxPaletteChangedEvent) 1621 }; 1622 1623 /* 1624 wxEVT_QUERY_NEW_PALETTE 1625 Indicates the window is getting keyboard focus and should re-do its palette. 1626 */ 1627 1628 class WXDLLEXPORT wxQueryNewPaletteEvent : public wxEvent 1629 { 1630 public: 1631 wxQueryNewPaletteEvent(wxWindowID id = 0) wxEvent(id,wxEVT_QUERY_NEW_PALETTE)1632 : wxEvent(id, wxEVT_QUERY_NEW_PALETTE), 1633 m_paletteRealized(FALSE) 1634 { } wxQueryNewPaletteEvent(const wxQueryNewPaletteEvent & event)1635 wxQueryNewPaletteEvent(const wxQueryNewPaletteEvent & event) 1636 : wxEvent(event), 1637 m_paletteRealized(event.m_paletteRealized) 1638 { } 1639 1640 // App sets this if it changes the palette. SetPaletteRealized(bool realized)1641 void SetPaletteRealized(bool realized) { m_paletteRealized = realized; } GetPaletteRealized()1642 bool GetPaletteRealized() const { return m_paletteRealized; } 1643 Clone()1644 virtual wxEvent *Clone() const { return new wxQueryNewPaletteEvent(*this); } 1645 1646 protected: 1647 bool m_paletteRealized; 1648 1649 private: 1650 DECLARE_DYNAMIC_CLASS(wxQueryNewPaletteEvent) 1651 }; 1652 1653 /* 1654 Event generated by dialog navigation keys 1655 wxEVT_NAVIGATION_KEY 1656 */ 1657 // NB: don't derive from command event to avoid being propagated to the parent 1658 class WXDLLEXPORT wxNavigationKeyEvent : public wxEvent 1659 { 1660 private: 1661 wxNavigationKeyEvent& operator=(const wxNavigationKeyEvent& event); 1662 1663 public: wxNavigationKeyEvent()1664 wxNavigationKeyEvent() 1665 : wxEvent(0, wxEVT_NAVIGATION_KEY), 1666 m_flags(IsForward | Propagate), // defaults are for TAB 1667 m_focus((wxWindow *)NULL) 1668 { } 1669 wxNavigationKeyEvent(const wxNavigationKeyEvent & event)1670 wxNavigationKeyEvent(const wxNavigationKeyEvent& event) 1671 : wxEvent(event), 1672 m_flags(event.m_flags), 1673 m_focus(event.m_focus) 1674 { } 1675 1676 // direction: forward (true) or backward (false) GetDirection()1677 bool GetDirection() const 1678 { return (m_flags & IsForward) != 0; } SetDirection(bool bForward)1679 void SetDirection(bool bForward) 1680 { if ( bForward ) m_flags |= IsForward; else m_flags &= ~IsForward; } 1681 1682 // it may be a window change event (MDI, notebook pages...) or a control 1683 // change event IsWindowChange()1684 bool IsWindowChange() const 1685 { return (m_flags & WinChange) != 0; } SetWindowChange(bool bIs)1686 void SetWindowChange(bool bIs) 1687 { if ( bIs ) m_flags |= WinChange; else m_flags &= ~WinChange; } 1688 1689 // some navigation events are meant to be propagated upwards (Windows 1690 // convention is to do this for TAB events) while others should always 1691 // cycle inside the panel/radiobox/whatever we're current inside ShouldPropagate()1692 bool ShouldPropagate() const 1693 { return (m_flags & Propagate) != 0; } SetPropagate(bool bDoIt)1694 void SetPropagate(bool bDoIt) 1695 { if ( bDoIt ) m_flags |= Propagate; else m_flags &= ~Propagate; } 1696 1697 // the child which has the focus currently (may be NULL - use 1698 // wxWindow::FindFocus then) GetCurrentFocus()1699 wxWindow* GetCurrentFocus() const { return m_focus; } SetCurrentFocus(wxWindow * win)1700 void SetCurrentFocus(wxWindow *win) { m_focus = win; } 1701 Clone()1702 virtual wxEvent *Clone() const { return new wxNavigationKeyEvent(*this); } 1703 1704 private: 1705 enum 1706 { 1707 IsForward = 0x0001, 1708 WinChange = 0x0002, 1709 Propagate = 0x0004 1710 }; 1711 1712 long m_flags; 1713 wxWindow *m_focus; 1714 1715 private: 1716 DECLARE_DYNAMIC_CLASS(wxNavigationKeyEvent) 1717 }; 1718 1719 // Window creation/destruction events: the first is sent as soon as window is 1720 // created (i.e. the underlying GUI object exists), but when the C++ object is 1721 // fully initialized (so virtual functions may be called). The second, 1722 // wxEVT_DESTROY, is sent right before the window is destroyed - again, it's 1723 // still safe to call virtual functions at this moment 1724 /* 1725 wxEVT_CREATE 1726 wxEVT_DESTROY 1727 */ 1728 1729 class WXDLLEXPORT wxWindowCreateEvent : public wxCommandEvent 1730 { 1731 public: 1732 wxWindowCreateEvent(wxWindow *win = NULL); 1733 GetWindow()1734 wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); } 1735 Clone()1736 virtual wxEvent *Clone() const { return new wxWindowCreateEvent(*this); } 1737 1738 private: 1739 DECLARE_DYNAMIC_CLASS(wxWindowCreateEvent) 1740 }; 1741 1742 class WXDLLEXPORT wxWindowDestroyEvent : public wxCommandEvent 1743 { 1744 public: 1745 wxWindowDestroyEvent(wxWindow *win = NULL); 1746 GetWindow()1747 wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); } 1748 Clone()1749 virtual wxEvent *Clone() const { return new wxWindowDestroyEvent(*this); } 1750 1751 private: 1752 DECLARE_DYNAMIC_CLASS(wxWindowDestroyEvent) 1753 }; 1754 1755 // A help event is sent when the user clicks on a window in context-help mode. 1756 /* 1757 wxEVT_HELP 1758 wxEVT_DETAILED_HELP 1759 */ 1760 1761 class WXDLLEXPORT wxHelpEvent : public wxCommandEvent 1762 { 1763 public: 1764 wxHelpEvent(wxEventType type = wxEVT_NULL, 1765 wxWindowID id = 0, 1766 const wxPoint& pt = wxDefaultPosition) wxCommandEvent(type,id)1767 : wxCommandEvent(type, id), 1768 m_pos(pt), m_target(), m_link() 1769 { } wxHelpEvent(const wxHelpEvent & event)1770 wxHelpEvent(const wxHelpEvent & event) 1771 : wxCommandEvent(event), 1772 m_pos(event.m_pos), 1773 m_target(event.m_target), 1774 m_link(event.m_link) 1775 { } 1776 1777 // Position of event (in screen coordinates) GetPosition()1778 const wxPoint& GetPosition() const { return m_pos; } SetPosition(const wxPoint & pos)1779 void SetPosition(const wxPoint& pos) { m_pos = pos; } 1780 1781 // Optional link to further help GetLink()1782 const wxString& GetLink() const { return m_link; } SetLink(const wxString & link)1783 void SetLink(const wxString& link) { m_link = link; } 1784 1785 // Optional target to display help in. E.g. a window specification GetTarget()1786 const wxString& GetTarget() const { return m_target; } SetTarget(const wxString & target)1787 void SetTarget(const wxString& target) { m_target = target; } 1788 Clone()1789 virtual wxEvent *Clone() const { return new wxHelpEvent(*this); } 1790 1791 protected: 1792 wxPoint m_pos; 1793 wxString m_target; 1794 wxString m_link; 1795 1796 private: 1797 DECLARE_DYNAMIC_CLASS(wxHelpEvent) 1798 }; 1799 1800 // A Context event is sent when the user right clicks on a window or 1801 // presses Shift-F10 1802 // NOTE : Under windows this is a repackaged WM_CONTETXMENU message 1803 // Under other systems it may have to be generated from a right click event 1804 /* 1805 wxEVT_CONTEXT_MENU 1806 */ 1807 1808 class WXDLLEXPORT wxContextMenuEvent : public wxCommandEvent 1809 { 1810 public: 1811 wxContextMenuEvent(wxEventType type = wxEVT_NULL, 1812 wxWindowID id = 0, 1813 const wxPoint& pt = wxDefaultPosition) wxCommandEvent(type,id)1814 : wxCommandEvent(type, id), 1815 m_pos(pt) 1816 { } wxContextMenuEvent(const wxContextMenuEvent & event)1817 wxContextMenuEvent(const wxContextMenuEvent & event) 1818 : wxCommandEvent(event), 1819 m_pos(event.m_pos) 1820 { } 1821 1822 // Position of event (in screen coordinates) GetPosition()1823 const wxPoint& GetPosition() const { return m_pos; } SetPosition(const wxPoint & pos)1824 void SetPosition(const wxPoint& pos) { m_pos = pos; } 1825 Clone()1826 virtual wxEvent *Clone() const { return new wxContextMenuEvent(*this); } 1827 1828 protected: 1829 wxPoint m_pos; 1830 1831 private: 1832 DECLARE_DYNAMIC_CLASS(wxContextMenuEvent) 1833 }; 1834 1835 // Idle event 1836 /* 1837 wxEVT_IDLE 1838 */ 1839 1840 class WXDLLEXPORT wxIdleEvent : public wxEvent 1841 { 1842 public: wxIdleEvent()1843 wxIdleEvent() 1844 : wxEvent(0, wxEVT_IDLE), 1845 m_requestMore(FALSE) 1846 { } wxIdleEvent(const wxIdleEvent & event)1847 wxIdleEvent(const wxIdleEvent & event) 1848 : wxEvent(event), 1849 m_requestMore(event.m_requestMore) 1850 { } 1851 1852 void RequestMore(bool needMore = TRUE) { m_requestMore = needMore; } MoreRequested()1853 bool MoreRequested() const { return m_requestMore; } 1854 Clone()1855 virtual wxEvent *Clone() const { return new wxIdleEvent(*this); } 1856 1857 protected: 1858 bool m_requestMore; 1859 1860 private: 1861 DECLARE_DYNAMIC_CLASS(wxIdleEvent) 1862 }; 1863 1864 #endif // wxUSE_GUI 1865 1866 /* TODO 1867 wxEVT_POWER, 1868 wxEVT_MOUSE_CAPTURE_CHANGED, 1869 wxEVT_SETTING_CHANGED, // WM_WININICHANGE (NT) / WM_SETTINGCHANGE (Win95) 1870 // wxEVT_FONT_CHANGED, // WM_FONTCHANGE: roll into wxEVT_SETTING_CHANGED, but remember to propagate 1871 // wxEVT_FONT_CHANGED to all other windows (maybe). 1872 wxEVT_DRAW_ITEM, // Leave these three as virtual functions in wxControl?? Platform-specific. 1873 wxEVT_MEASURE_ITEM, 1874 wxEVT_COMPARE_ITEM 1875 */ 1876 1877 1878 // ============================================================================ 1879 // event handler and related classes 1880 // ============================================================================ 1881 1882 typedef void (wxObject::*wxObjectEventFunction)(wxEvent&); 1883 1884 // we can't have ctors nor base struct in backwards compatibility mode or 1885 // otherwise we won't be able to initialize the objects with an agregate, so 1886 // we have to keep both versions 1887 #if WXWIN_COMPATIBILITY_EVENT_TYPES 1888 1889 struct WXDLLEXPORT wxEventTableEntry 1890 { 1891 // For some reason, this can't be wxEventType, or VC++ complains. 1892 int m_eventType; // main event type 1893 int m_id; // control/menu/toolbar id 1894 int m_lastId; // used for ranges of ids 1895 wxObjectEventFunction m_fn; // function to call: not wxEventFunction, 1896 // because of dependency problems 1897 1898 wxObject* m_callbackUserData; 1899 }; 1900 1901 #else // !WXWIN_COMPATIBILITY_EVENT_TYPES 1902 1903 // struct containing the members common to static and dynamic event tables 1904 // entries 1905 struct WXDLLEXPORT wxEventTableEntryBase 1906 { 1907 private: 1908 wxEventTableEntryBase& operator=(const wxEventTableEntryBase& event); 1909 1910 public: wxEventTableEntryBasewxEventTableEntryBase1911 wxEventTableEntryBase(int id, int idLast, 1912 wxObjectEventFunction fn, wxObject *data) 1913 : m_id(id), 1914 m_lastId(idLast), 1915 m_fn(fn), 1916 m_callbackUserData(data) 1917 { } 1918 wxEventTableEntryBasewxEventTableEntryBase1919 wxEventTableEntryBase(const wxEventTableEntryBase& event) 1920 : m_id(event.m_id), 1921 m_lastId(event.m_lastId), 1922 m_fn(event.m_fn), 1923 m_callbackUserData(event.m_callbackUserData) 1924 { } 1925 1926 // the range of ids for this entry: if m_lastId == wxID_ANY, the range 1927 // consists only of m_id, otherwise it is m_id..m_lastId inclusive 1928 int m_id, 1929 m_lastId; 1930 1931 // function to call: not wxEventFunction, because of dependency problems 1932 wxObjectEventFunction m_fn; 1933 1934 // arbitrary user data asosciated with the callback 1935 wxObject* m_callbackUserData; 1936 }; 1937 1938 // an entry from a static event table 1939 struct WXDLLEXPORT wxEventTableEntry : public wxEventTableEntryBase 1940 { wxEventTableEntrywxEventTableEntry1941 wxEventTableEntry(const int& evType, int id, int idLast, 1942 wxObjectEventFunction fn, wxObject *data) 1943 : wxEventTableEntryBase(id, idLast, fn, data), 1944 m_eventType(evType) 1945 { } 1946 1947 // the reference to event type: this allows us to not care about the 1948 // (undefined) order in which the event table entries and the event types 1949 // are initialized: initially the value of this reference might be 1950 // invalid, but by the time it is used for the first time, all global 1951 // objects will have been initialized (including the event type constants) 1952 // and so it will have the correct value when it is needed 1953 const int& m_eventType; 1954 }; 1955 1956 // an entry used in dynamic event table managed by wxEvtHandler::Connect() 1957 struct WXDLLEXPORT wxDynamicEventTableEntry : public wxEventTableEntryBase 1958 { wxDynamicEventTableEntrywxDynamicEventTableEntry1959 wxDynamicEventTableEntry(int evType, int id, int idLast, 1960 wxObjectEventFunction fn, wxObject *data) 1961 : wxEventTableEntryBase(id, idLast, fn, data), 1962 m_eventType(evType) 1963 { } 1964 1965 // not a reference here as we can't keep a reference to a temporary int 1966 // created to wrap the constant value typically passed to Connect() - nor 1967 // do we need it 1968 int m_eventType; 1969 }; 1970 1971 #endif // !WXWIN_COMPATIBILITY_EVENT_TYPES 1972 1973 // ---------------------------------------------------------------------------- 1974 // wxEventTable: an array of event entries terminated with {0, 0, 0, 0, 0} 1975 // ---------------------------------------------------------------------------- 1976 struct WXDLLEXPORT wxEventTable 1977 { 1978 const wxEventTable *baseTable; // base event table (next in chain) 1979 const wxEventTableEntry *entries; // bottom of entry array 1980 }; 1981 1982 // ---------------------------------------------------------------------------- 1983 // wxEvtHandler: the base class for all objects handling wxWindows events 1984 // ---------------------------------------------------------------------------- 1985 1986 class WXDLLEXPORT wxEvtHandler : public wxObject 1987 { 1988 public: 1989 wxEvtHandler(); 1990 virtual ~wxEvtHandler(); 1991 GetNextHandler()1992 wxEvtHandler *GetNextHandler() const { return m_nextHandler; } GetPreviousHandler()1993 wxEvtHandler *GetPreviousHandler() const { return m_previousHandler; } SetNextHandler(wxEvtHandler * handler)1994 void SetNextHandler(wxEvtHandler *handler) { m_nextHandler = handler; } SetPreviousHandler(wxEvtHandler * handler)1995 void SetPreviousHandler(wxEvtHandler *handler) { m_previousHandler = handler; } 1996 SetEvtHandlerEnabled(bool enabled)1997 void SetEvtHandlerEnabled(bool enabled) { m_enabled = enabled; } GetEvtHandlerEnabled()1998 bool GetEvtHandlerEnabled() const { return m_enabled; } 1999 2000 // process an event right now 2001 virtual bool ProcessEvent(wxEvent& event); 2002 2003 // add an event to be processed later 2004 void AddPendingEvent(wxEvent& event); 2005 2006 // process all pending events 2007 void ProcessPendingEvents(); 2008 2009 // add a 2010 #if wxUSE_THREADS 2011 bool ProcessThreadEvent(wxEvent& event); 2012 #endif 2013 2014 // Dynamic association of a member function handler with the event handler, 2015 // id and event type 2016 void Connect( int id, int lastId, int eventType, 2017 wxObjectEventFunction func, 2018 wxObject *userData = (wxObject *) NULL ); 2019 2020 // Convenience function: take just one id 2021 void Connect( int id, int eventType, 2022 wxObjectEventFunction func, 2023 wxObject *userData = (wxObject *) NULL ) 2024 { Connect(id, wxID_ANY, eventType, func, userData); } 2025 2026 bool Disconnect( int id, int lastId, wxEventType eventType, 2027 wxObjectEventFunction func = NULL, 2028 wxObject *userData = (wxObject *) NULL ); 2029 2030 // Convenience function: take just one id 2031 bool Disconnect( int id, wxEventType eventType = wxEVT_NULL, 2032 wxObjectEventFunction func = NULL, 2033 wxObject *userData = (wxObject *) NULL ) 2034 { return Disconnect(id, wxID_ANY, eventType, func, userData); } 2035 2036 2037 // User data can be associated with each wxEvtHandler SetClientObject(wxClientData * data)2038 void SetClientObject( wxClientData *data ) { DoSetClientObject(data); } GetClientObject()2039 wxClientData *GetClientObject() const { return DoGetClientObject(); } 2040 SetClientData(void * data)2041 void SetClientData( void *data ) { DoSetClientData(data); } GetClientData()2042 void *GetClientData() const { return DoGetClientData(); } 2043 2044 2045 // implementation from now on 2046 virtual bool SearchEventTable(wxEventTable& table, wxEvent& event); 2047 bool SearchDynamicEventTable( wxEvent& event ); 2048 2049 #if wxUSE_THREADS ClearEventLocker()2050 void ClearEventLocker() 2051 { 2052 # if !defined(__VISAGECPP__) 2053 delete m_eventsLocker; 2054 m_eventsLocker = NULL; 2055 #endif 2056 }; 2057 #endif 2058 2059 // old stuff 2060 2061 #if WXWIN_COMPATIBILITY_2 OnCommand(wxWindow & WXUNUSED (win),wxCommandEvent & WXUNUSED (event))2062 virtual void OnCommand(wxWindow& WXUNUSED(win), 2063 wxCommandEvent& WXUNUSED(event)) 2064 { 2065 wxFAIL_MSG(wxT("shouldn't be called any more")); 2066 } 2067 2068 // Called if child control has no callback function Default()2069 virtual long Default() 2070 { return GetNextHandler() ? GetNextHandler()->Default() : 0; }; 2071 #endif // WXWIN_COMPATIBILITY_2 2072 2073 #if WXWIN_COMPATIBILITY 2074 virtual bool OnClose(); 2075 #endif 2076 2077 private: 2078 static const wxEventTableEntry sm_eventTableEntries[]; 2079 2080 protected: 2081 static const wxEventTable sm_eventTable; 2082 2083 virtual const wxEventTable *GetEventTable() const; 2084 2085 wxEvtHandler* m_nextHandler; 2086 wxEvtHandler* m_previousHandler; 2087 wxList* m_dynamicEvents; 2088 wxList* m_pendingEvents; 2089 2090 #if wxUSE_THREADS 2091 #if defined (__VISAGECPP__) 2092 wxCriticalSection m_eventsLocker; 2093 # else 2094 wxCriticalSection* m_eventsLocker; 2095 # endif 2096 #endif 2097 2098 // optimization: instead of using costly IsKindOf() to decide whether we're 2099 // a window (which is true in 99% of cases), use this flag 2100 bool m_isWindow; 2101 2102 // Is event handler enabled? 2103 bool m_enabled; 2104 2105 2106 // The user data: either an object which will be deleted by the container 2107 // when it's deleted or some raw pointer which we do nothing with - only 2108 // one type of data can be used with the given window (i.e. you cannot set 2109 // the void data and then associate the container with wxClientData or vice 2110 // versa) 2111 union 2112 { 2113 wxClientData *m_clientObject; 2114 void *m_clientData; 2115 }; 2116 2117 // what kind of data do we have? 2118 wxClientDataType m_clientDataType; 2119 2120 // client data accessors 2121 virtual void DoSetClientObject( wxClientData *data ); 2122 virtual wxClientData *DoGetClientObject() const; 2123 2124 virtual void DoSetClientData( void *data ); 2125 virtual void *DoGetClientData() const; 2126 2127 private: 2128 DECLARE_NO_COPY_CLASS(wxEvtHandler) 2129 DECLARE_DYNAMIC_CLASS(wxEvtHandler) 2130 }; 2131 2132 typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&); 2133 #if wxUSE_GUI 2134 typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&); 2135 typedef void (wxEvtHandler::*wxScrollEventFunction)(wxScrollEvent&); 2136 typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&); 2137 typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&); 2138 typedef void (wxEvtHandler::*wxMoveEventFunction)(wxMoveEvent&); 2139 typedef void (wxEvtHandler::*wxPaintEventFunction)(wxPaintEvent&); 2140 typedef void (wxEvtHandler::*wxEraseEventFunction)(wxEraseEvent&); 2141 typedef void (wxEvtHandler::*wxMouseEventFunction)(wxMouseEvent&); 2142 typedef void (wxEvtHandler::*wxCharEventFunction)(wxKeyEvent&); 2143 typedef void (wxEvtHandler::*wxFocusEventFunction)(wxFocusEvent&); 2144 typedef void (wxEvtHandler::*wxChildFocusEventFunction)(wxChildFocusEvent&); 2145 typedef void (wxEvtHandler::*wxActivateEventFunction)(wxActivateEvent&); 2146 typedef void (wxEvtHandler::*wxMenuEventFunction)(wxMenuEvent&); 2147 typedef void (wxEvtHandler::*wxJoystickEventFunction)(wxJoystickEvent&); 2148 typedef void (wxEvtHandler::*wxDropFilesEventFunction)(wxDropFilesEvent&); 2149 typedef void (wxEvtHandler::*wxInitDialogEventFunction)(wxInitDialogEvent&); 2150 typedef void (wxEvtHandler::*wxSysColourChangedFunction)(wxSysColourChangedEvent&); 2151 typedef void (wxEvtHandler::*wxDisplayChangedFunction)(wxDisplayChangedEvent&); 2152 typedef void (wxEvtHandler::*wxUpdateUIEventFunction)(wxUpdateUIEvent&); 2153 typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&); 2154 typedef void (wxEvtHandler::*wxCloseEventFunction)(wxCloseEvent&); 2155 typedef void (wxEvtHandler::*wxShowEventFunction)(wxShowEvent&); 2156 typedef void (wxEvtHandler::*wxIconizeEventFunction)(wxIconizeEvent&); 2157 typedef void (wxEvtHandler::*wxMaximizeEventFunction)(wxMaximizeEvent&); 2158 typedef void (wxEvtHandler::*wxNavigationKeyEventFunction)(wxNavigationKeyEvent&); 2159 typedef void (wxEvtHandler::*wxPaletteChangedEventFunction)(wxPaletteChangedEvent&); 2160 typedef void (wxEvtHandler::*wxQueryNewPaletteEventFunction)(wxQueryNewPaletteEvent&); 2161 typedef void (wxEvtHandler::*wxWindowCreateEventFunction)(wxWindowCreateEvent&); 2162 typedef void (wxEvtHandler::*wxWindowDestroyEventFunction)(wxWindowDestroyEvent&); 2163 typedef void (wxEvtHandler::*wxSetCursorEventFunction)(wxSetCursorEvent&); 2164 typedef void (wxEvtHandler::*wxNotifyEventFunction)(wxNotifyEvent&); 2165 typedef void (wxEvtHandler::*wxHelpEventFunction)(wxHelpEvent&); 2166 typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&); 2167 typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureChangedEvent&); 2168 #endif // wxUSE_GUI 2169 2170 // N.B. In GNU-WIN32, you *have* to take the address of a member function 2171 // (use &) or the compiler crashes... 2172 2173 #define DECLARE_EVENT_TABLE() \ 2174 private: \ 2175 static const wxEventTableEntry sm_eventTableEntries[]; \ 2176 protected: \ 2177 static const wxEventTable sm_eventTable; \ 2178 virtual const wxEventTable* GetEventTable() const; 2179 2180 #define BEGIN_EVENT_TABLE(theClass, baseClass) \ 2181 const wxEventTable *theClass::GetEventTable() const \ 2182 { return &theClass::sm_eventTable; } \ 2183 const wxEventTable theClass::sm_eventTable = \ 2184 { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ 2185 const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ 2186 2187 #define END_EVENT_TABLE() DECLARE_EVENT_TABLE_ENTRY( wxEVT_NULL, 0, 0, 0, 0 ) }; 2188 2189 /* 2190 * Event table macros 2191 */ 2192 2193 // Generic events 2194 #define EVT_CUSTOM(event, id, func) DECLARE_EVENT_TABLE_ENTRY( event, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ), 2195 #define EVT_CUSTOM_RANGE(event, id1, id2, func) DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ), 2196 2197 // Miscellaneous 2198 #define EVT_SIZE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) & func, (wxObject *) NULL ), 2199 #define EVT_MOVE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMoveEventFunction) & func, (wxObject *) NULL ), 2200 #define EVT_CLOSE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CLOSE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ), 2201 #define EVT_END_SESSION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ), 2202 #define EVT_QUERY_END_SESSION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ), 2203 #define EVT_PAINT(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PAINT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxPaintEventFunction) & func, (wxObject *) NULL ), 2204 #define EVT_NC_PAINT(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_NC_PAINT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxPaintEventFunction) & func, (wxObject *) NULL ), 2205 #define EVT_ERASE_BACKGROUND(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ERASE_BACKGROUND, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxEraseEventFunction) & func, (wxObject *) NULL ), 2206 #define EVT_CHAR(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ), 2207 #define EVT_KEY_DOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ), 2208 #define EVT_KEY_UP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ), 2209 #define EVT_CHAR_HOOK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR_HOOK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, NULL ), 2210 #define EVT_MENU_OPEN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_OPEN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), 2211 #define EVT_MENU_CLOSE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_CLOSE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), 2212 #define EVT_MENU_HIGHLIGHT(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), 2213 #define EVT_MENU_HIGHLIGHT_ALL(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ), 2214 #define EVT_SET_FOCUS(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SET_FOCUS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ), 2215 #define EVT_KILL_FOCUS(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_KILL_FOCUS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ), 2216 #define EVT_CHILD_FOCUS(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHILD_FOCUS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxChildFocusEventFunction) & func, (wxObject *) NULL ), 2217 #define EVT_ACTIVATE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ACTIVATE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxActivateEventFunction) & func, (wxObject *) NULL ), 2218 #define EVT_ACTIVATE_APP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ACTIVATE_APP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxActivateEventFunction) & func, (wxObject *) NULL ), 2219 #define EVT_END_SESSION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ), 2220 #define EVT_QUERY_END_SESSION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ), 2221 #define EVT_DROP_FILES(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_DROP_FILES, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxDropFilesEventFunction) & func, (wxObject *) NULL ), 2222 #define EVT_INIT_DIALOG(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_INIT_DIALOG, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxInitDialogEventFunction) & func, (wxObject *) NULL ), 2223 #define EVT_SYS_COLOUR_CHANGED(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SYS_COLOUR_CHANGED, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxSysColourChangedFunction) & func, (wxObject *) NULL ), 2224 #define EVT_DISPLAY_CHANGED(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_DISPLAY_CHANGED, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxDisplayChangedFunction) & func, (wxObject *) NULL ), 2225 #define EVT_SHOW(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SHOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxShowEventFunction) & func, (wxObject *) NULL ), 2226 #define EVT_MAXIMIZE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MAXIMIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMaximizeEventFunction) & func, (wxObject *) NULL ), 2227 #define EVT_ICONIZE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ICONIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxIconizeEventFunction) & func, (wxObject *) NULL ), 2228 #define EVT_NAVIGATION_KEY(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_NAVIGATION_KEY, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNavigationKeyEventFunction) & func, (wxObject *) NULL ), 2229 #define EVT_PALETTE_CHANGED(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PALETTE_CHANGED, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxPaletteChangedEventFunction) & func, (wxObject *) NULL ), 2230 #define EVT_QUERY_NEW_PALETTE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_NEW_PALETTE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxQueryNewPaletteEventFunction) & func, (wxObject *) NULL ), 2231 #define EVT_WINDOW_CREATE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CREATE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxWindowCreateEventFunction) & func, (wxObject *) NULL ), 2232 #define EVT_WINDOW_DESTROY(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_DESTROY, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxWindowDestroyEventFunction) & func, (wxObject *) NULL ), 2233 #define EVT_SET_CURSOR(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SET_CURSOR, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxSetCursorEventFunction) & func, (wxObject *) NULL ), 2234 #define EVT_MOUSE_CAPTURE_CHANGED(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSE_CAPTURE_CHANGED, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseCaptureChangedEventFunction) & func, (wxObject *) NULL ), 2235 2236 // Mouse events 2237 #define EVT_LEFT_DOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2238 #define EVT_LEFT_UP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2239 #define EVT_MIDDLE_DOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2240 #define EVT_MIDDLE_UP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2241 #define EVT_RIGHT_DOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2242 #define EVT_RIGHT_UP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2243 #define EVT_MOTION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOTION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2244 #define EVT_LEFT_DCLICK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2245 #define EVT_MIDDLE_DCLICK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2246 #define EVT_RIGHT_DCLICK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2247 #define EVT_LEAVE_WINDOW(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEAVE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2248 #define EVT_ENTER_WINDOW(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ENTER_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2249 #define EVT_MOUSEWHEEL(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSEWHEEL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2250 2251 // All mouse events 2252 #define EVT_MOUSE_EVENTS(func) \ 2253 DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2254 DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2255 DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2256 DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2257 DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2258 DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2259 DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOTION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2260 DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2261 DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2262 DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2263 DECLARE_EVENT_TABLE_ENTRY( wxEVT_ENTER_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2264 DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEAVE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\ 2265 DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSEWHEEL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ), 2266 2267 // EVT_COMMAND 2268 #define EVT_COMMAND(id, event, fn) DECLARE_EVENT_TABLE_ENTRY( event, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2269 #define EVT_COMMAND_RANGE(id1, id2, event, fn) DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2270 2271 // Scrolling from wxWindow (sent to wxScrolledWindow) 2272 #define EVT_SCROLLWIN(func) \ 2273 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\ 2274 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_BOTTOM, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\ 2275 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_LINEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\ 2276 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_LINEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\ 2277 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_PAGEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\ 2278 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_PAGEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\ 2279 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_THUMBTRACK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\ 2280 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_THUMBRELEASE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2281 2282 #define EVT_SCROLLWIN_TOP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2283 #define EVT_SCROLLWIN_BOTTOM(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_BOTTOM, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2284 #define EVT_SCROLLWIN_LINEUP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_LINEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2285 #define EVT_SCROLLWIN_LINEDOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_LINEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2286 #define EVT_SCROLLWIN_PAGEUP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_PAGEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2287 #define EVT_SCROLLWIN_PAGEDOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_PAGEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2288 #define EVT_SCROLLWIN_THUMBTRACK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_THUMBTRACK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2289 #define EVT_SCROLLWIN_THUMBRELEASE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_THUMBRELEASE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ), 2290 2291 // Scrolling from wxSlider and wxScrollBar 2292 #define EVT_SCROLL(func) \ 2293 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2294 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2295 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2296 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2297 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2298 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2299 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2300 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), \ 2301 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2302 2303 #define EVT_SCROLL_TOP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2304 #define EVT_SCROLL_BOTTOM(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2305 #define EVT_SCROLL_LINEUP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2306 #define EVT_SCROLL_LINEDOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2307 #define EVT_SCROLL_PAGEUP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2308 #define EVT_SCROLL_PAGEDOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2309 #define EVT_SCROLL_THUMBTRACK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2310 #define EVT_SCROLL_THUMBRELEASE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2311 #define EVT_SCROLL_ENDSCROLL(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2312 2313 // Scrolling from wxSlider and wxScrollBar, with an id 2314 #define EVT_COMMAND_SCROLL(id, func) \ 2315 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2316 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2317 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2318 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2319 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2320 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2321 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\ 2322 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), \ 2323 DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2324 2325 #define EVT_COMMAND_SCROLL_TOP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2326 #define EVT_COMMAND_SCROLL_BOTTOM(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2327 #define EVT_COMMAND_SCROLL_LINEUP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2328 #define EVT_COMMAND_SCROLL_LINEDOWN(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2329 #define EVT_COMMAND_SCROLL_PAGEUP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2330 #define EVT_COMMAND_SCROLL_PAGEDOWN(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2331 #define EVT_COMMAND_SCROLL_THUMBTRACK(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2332 #define EVT_COMMAND_SCROLL_THUMBRELEASE(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2333 #define EVT_COMMAND_SCROLL_ENDSCROLL(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), 2334 2335 // Convenience macros for commonly-used commands 2336 #define EVT_BUTTON(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_BUTTON_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2337 #define EVT_CHECKBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKBOX_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2338 #define EVT_CHOICE(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2339 #define EVT_LISTBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2340 #define EVT_LISTBOX_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2341 #define EVT_MENU(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2342 #define EVT_MENU_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2343 #define EVT_SLIDER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2344 #define EVT_RADIOBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2345 #define EVT_RADIOBUTTON(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBUTTON_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2346 // EVT_SCROLLBAR is now obsolete since we use EVT_COMMAND_SCROLL... events 2347 #define EVT_SCROLLBAR(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SCROLLBAR_UPDATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2348 #define EVT_VLBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_VLBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2349 #define EVT_COMBOBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_COMBOBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2350 #define EVT_TOOL(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2351 #define EVT_TOOL_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_CLICKED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2352 #define EVT_TOOL_RCLICKED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_RCLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2353 #define EVT_TOOL_RCLICKED_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_RCLICKED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2354 #define EVT_TOOL_ENTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_ENTER, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2355 #define EVT_CHECKLISTBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2356 2357 // Generic command events 2358 #define EVT_COMMAND_LEFT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LEFT_CLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2359 #define EVT_COMMAND_LEFT_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LEFT_DCLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2360 #define EVT_COMMAND_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RIGHT_CLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2361 #define EVT_COMMAND_RIGHT_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RIGHT_DCLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2362 #define EVT_COMMAND_SET_FOCUS(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SET_FOCUS, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2363 #define EVT_COMMAND_KILL_FOCUS(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_KILL_FOCUS, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2364 #define EVT_COMMAND_ENTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_ENTER, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ), 2365 2366 // Joystick events 2367 2368 #define EVT_JOY_BUTTON_DOWN(func) \ 2369 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), 2370 #define EVT_JOY_BUTTON_UP(func) \ 2371 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), 2372 #define EVT_JOY_MOVE(func) \ 2373 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), 2374 #define EVT_JOY_ZMOVE(func) \ 2375 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_ZMOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), 2376 2377 // These are obsolete, see _BUTTON_ events 2378 #define EVT_JOY_DOWN(func) \ 2379 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), 2380 #define EVT_JOY_UP(func) \ 2381 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), 2382 2383 // All joystick events 2384 #define EVT_JOYSTICK_EVENTS(func) \ 2385 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\ 2386 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\ 2387 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\ 2388 DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_ZMOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ), 2389 2390 // Idle event 2391 #define EVT_IDLE(func) \ 2392 DECLARE_EVENT_TABLE_ENTRY( wxEVT_IDLE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) & func, (wxObject *) NULL ), 2393 2394 // Update UI event 2395 #define EVT_UPDATE_UI(id, func) \ 2396 DECLARE_EVENT_TABLE_ENTRY( wxEVT_UPDATE_UI, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxUpdateUIEventFunction) & func, (wxObject *) NULL ), 2397 #define EVT_UPDATE_UI_RANGE(id1, id2, func) \ 2398 DECLARE_EVENT_TABLE_ENTRY( wxEVT_UPDATE_UI, id1, id2, (wxObjectEventFunction)(wxEventFunction)(wxUpdateUIEventFunction)&func, (wxObject *) NULL ), 2399 2400 // Help events 2401 #define EVT_HELP(id, func) \ 2402 DECLARE_EVENT_TABLE_ENTRY( wxEVT_HELP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), 2403 2404 #define EVT_HELP_RANGE(id1, id2, func) \ 2405 DECLARE_EVENT_TABLE_ENTRY( wxEVT_HELP, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), 2406 2407 #define EVT_DETAILED_HELP(id, func) \ 2408 DECLARE_EVENT_TABLE_ENTRY( wxEVT_DETAILED_HELP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), 2409 2410 #define EVT_DETAILED_HELP_RANGE(id1, id2, func) \ 2411 DECLARE_EVENT_TABLE_ENTRY( wxEVT_DETAILED_HELP, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ), 2412 2413 // Context Menu Events 2414 #define EVT_CONTEXT_MENU(func) \ 2415 DECLARE_EVENT_TABLE_ENTRY(wxEVT_CONTEXT_MENU, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxContextMenuEventFunction) & func, (wxObject *) NULL ), 2416 2417 // ---------------------------------------------------------------------------- 2418 // Global data 2419 // ---------------------------------------------------------------------------- 2420 2421 // for pending event processing - notice that there is intentionally no 2422 // WXDLLEXPORT here 2423 extern wxList *wxPendingEvents; 2424 #if wxUSE_THREADS 2425 extern wxCriticalSection *wxPendingEventsLocker; 2426 #endif 2427 2428 // ---------------------------------------------------------------------------- 2429 // Helper functions 2430 // ---------------------------------------------------------------------------- 2431 2432 #if wxUSE_GUI 2433 2434 // Find a window with the focus, that is also a descendant of the given window. 2435 // This is used to determine the window to initially send commands to. 2436 wxWindow* wxFindFocusDescendant(wxWindow* ancestor); 2437 2438 #endif // wxUSE_GUI 2439 2440 #endif 2441 // _WX_EVENTH__ 2442