home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / event.h < prev    next >
C/C++ Source or Header  |  2002-11-04  |  103KB  |  2,442 lines

  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.158.2.1 2002/10/30 19:55:06 RR 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.  
  349.     void SetEventType(wxEventType typ) { m_eventType = typ; }
  350.     wxEventType GetEventType() const { return m_eventType; }
  351.     wxObject *GetEventObject() const { return m_eventObject; }
  352.     void SetEventObject(wxObject *obj) { m_eventObject = obj; }
  353.     long GetTimestamp() const { return m_timeStamp; }
  354.     void SetTimestamp(long ts = 0) { m_timeStamp = ts; }
  355.     int GetId() const { return m_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; }
  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.
  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.  
  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
  426.     void SetClientData(void* clientData) { m_clientData = clientData; }
  427.     void *GetClientData() const { return m_clientData; }
  428.  
  429.     // Set/Get client object from controls
  430.     void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; }
  431.     void *GetClientObject() const { return m_clientObject; }
  432.  
  433.     // Get listbox selection if single-choice
  434.     int GetSelection() const { return m_commandInt; }
  435.  
  436.     // Set/Get listbox/choice selection string
  437.     void SetString(const wxString& s) { m_commandString = s; }
  438.     wxString GetString() const { return m_commandString; }
  439.  
  440.     // Get checkbox value
  441.     bool IsChecked() const { return m_commandInt != 0; }
  442.  
  443.     // TRUE if the listbox event was a selection.
  444.     bool IsSelection() const { return (m_extraLong != 0); }
  445.  
  446.     void SetExtraLong(long extraLong) { m_extraLong = extraLong; }
  447.     long GetExtraLong() const { return m_extraLong ; }
  448.  
  449.     void SetInt(int i) { m_commandInt = i; }
  450.     long GetInt() const { return m_commandInt ; }
  451.  
  452.     virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
  453.  
  454. #if WXWIN_COMPATIBILITY_2
  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)
  475.         : wxCommandEvent(commandType, id)
  476.         { m_bAllow = TRUE; }
  477.  
  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)
  483.     void Veto() { m_bAllow = FALSE; }
  484.  
  485.     // allow the operation if it was disabled by default
  486.     void Allow() { m_bAllow = TRUE; }
  487.  
  488.     // for implementation code only: is the operation allowed?
  489.     bool IsAllowed() const { return m_bAllow; }
  490.  
  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.  
  520.     int GetOrientation() const { return (int) m_extraLong ; }
  521.     int GetPosition() const { return m_commandInt ; }
  522.     void SetOrientation(int orient) { m_extraLong = (long) orient; }
  523.     void SetPosition(int pos) { m_commandInt = pos; }
  524.  
  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);
  549.     wxScrollWinEvent(const wxScrollWinEvent & event) : wxEvent(event)
  550.         {    m_commandInt = event.m_commandInt;
  551.             m_extraLong = event.m_extraLong;    }
  552.  
  553.     int GetOrientation() const { return (int) m_extraLong ; }
  554.     int GetPosition() const { return m_commandInt ; }
  555.     void SetOrientation(int orient) { m_extraLong = (long) orient; }
  556.     void SetPosition(int pos) { m_commandInt = pos; }
  557.  
  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);
  611.     wxMouseEvent(const wxMouseEvent& event)    : wxEvent(event)
  612.         { Assign(event); }
  613.  
  614.     // Was it a button event? (*doesn't* mean: is any button *down*?)
  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
  636.     bool ControlDown() const { return m_controlDown; }
  637.     bool MetaDown() const { return m_metaDown; }
  638.     bool AltDown() const { return m_altDown; }
  639.     bool ShiftDown() const { return m_shiftDown; }
  640.  
  641.     // Find which event was just generated
  642.     bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); }
  643.     bool MiddleDown() const { return (m_eventType == wxEVT_MIDDLE_DOWN); }
  644.     bool RightDown() const { return (m_eventType == wxEVT_RIGHT_DOWN); }
  645.  
  646.     bool LeftUp() const { return (m_eventType == wxEVT_LEFT_UP); }
  647.     bool MiddleUp() const { return (m_eventType == wxEVT_MIDDLE_UP); }
  648.     bool RightUp() const { return (m_eventType == wxEVT_RIGHT_UP); }
  649.  
  650.     bool LeftDClick() const { return (m_eventType == wxEVT_LEFT_DCLICK); }
  651.     bool MiddleDClick() const { return (m_eventType == wxEVT_MIDDLE_DCLICK); }
  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)
  656.     bool LeftIsDown() const { return m_leftDown; }
  657.     bool MiddleIsDown() const { return m_middleDown; }
  658.     bool RightIsDown() const { return m_rightDown; }
  659.  
  660.     // True if a button is down and the mouse is moving
  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
  668.     bool Moving() const { return (m_eventType == wxEVT_MOTION); }
  669.  
  670.     // True if the mouse is just entering the window
  671.     bool Entering() const { return (m_eventType == wxEVT_ENTER_WINDOW); }
  672.  
  673.     // True if the mouse is just leaving the window
  674.     bool Leaving() const { return (m_eventType == wxEVT_LEAVE_WINDOW); }
  675.  
  676.     // Find the position of the event
  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__
  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
  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
  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.  
  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
  718.     wxCoord GetX() const { return m_x; }
  719.  
  720.     // Get Y position
  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.
  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.
  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.
  739.     int GetLinesPerAction() const { return m_linesPerAction; }
  740.  
  741.     // Is the system set to do page scrolling?
  742.     bool IsPageScroll() const { return ((unsigned int)m_linesPerAction == UINT_MAX); }
  743.  
  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.  
  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.  
  790.     wxCoord GetX() const { return m_x; }
  791.     wxCoord GetY() const { return m_y; }
  792.  
  793.     void SetCursor(const wxCursor& cursor) { m_cursor = cursor; }
  794.     const wxCursor& GetCursor() const { return m_cursor; }
  795.     bool HasCursor() const { return m_cursor.Ok(); }
  796.  
  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
  823.     bool ControlDown() const { return m_controlDown; }
  824.     bool MetaDown() const { return m_metaDown; }
  825.     bool AltDown() const { return m_altDown; }
  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
  831.     bool HasModifiers() const { return ControlDown() || AltDown(); }
  832.  
  833.     // get the key code: an ASCII7 char or an element of wxKeyCode enum
  834.     int GetKeyCode() const { return (int)m_keyCode; }
  835.  
  836.     // get the raw key code (platform-dependent)
  837.     wxUint32 GetRawKeyCode() const { return m_rawCode; }
  838.  
  839.     // get the raw key flags (platform-dependent)
  840.     wxUint32 GetRawKeyFlags() const { return m_rawFlags; }
  841.  
  842.     // Find the position of the event
  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__
  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.  
  857.     wxPoint GetPosition() const
  858.         { return wxPoint(m_x, m_y); }
  859.  
  860.     // Get X position
  861.     wxCoord GetX() const { return m_x; }
  862.  
  863.     // Get Y position
  864.     wxCoord GetY() const { return m_y; }
  865.  
  866.     // deprecated
  867.     long KeyCode() const { return m_keyCode; }
  868.  
  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:
  925.     wxSizeEvent() : wxEvent(0, wxEVT_SIZE)
  926.         { }
  927.     wxSizeEvent(const wxSize& sz, int id = 0)
  928.         : wxEvent(id, wxEVT_SIZE),
  929.           m_size(sz)
  930.         { }
  931.     wxSizeEvent(const wxSizeEvent & event)
  932.         : wxEvent(event),
  933.           m_size(event.m_size)
  934.         { }
  935.  
  936.     wxSize GetSize() const { return m_size; }
  937.  
  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:
  956.     wxMoveEvent()
  957.         : wxEvent(0, wxEVT_MOVE)
  958.         { }
  959.     wxMoveEvent(const wxPoint& pos, int id = 0)
  960.         : wxEvent(id, wxEVT_MOVE),
  961.           m_pos(pos)
  962.         { }
  963.     wxMoveEvent(const wxMoveEvent& event)
  964.         : wxEvent(event),
  965.           m_pos(event.m_pos)
  966.     { }
  967.  
  968.     wxPoint GetPosition() const { return m_pos; }
  969.  
  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)
  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__))
  1003.     ~wxPaintEvent()
  1004.     {
  1005.         g_isPainting--;
  1006.     }
  1007. #endif // debug
  1008.  
  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)
  1019.         : wxEvent(id, wxEVT_NC_PAINT)
  1020.         { }
  1021.  
  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)
  1040.         : wxEvent(Id, wxEVT_ERASE_BACKGROUND),
  1041.           m_dc(dc)
  1042.         { }
  1043.  
  1044.     wxEraseEvent(const wxEraseEvent& event)
  1045.         : wxEvent(event),
  1046.           m_dc(event.m_dc)
  1047.         { }
  1048.  
  1049.     wxDC *GetDC() const { return m_dc; }
  1050.  
  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)
  1072.         : wxEvent(id, type)
  1073.         { m_win = NULL; }
  1074.  
  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!
  1082.     wxWindow *GetWindow() const { return m_win; }
  1083.     void SetWindow(wxWindow *win) { m_win = win; }
  1084.  
  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.  
  1101.     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
  1102.  
  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)
  1119.         : wxEvent(Id, type)
  1120.         { m_active = active; }
  1121.     wxActivateEvent(const wxActivateEvent& event)
  1122.         : wxEvent(event)
  1123.     { m_active = event.m_active; }
  1124.  
  1125.     bool GetActive() const { return m_active; }
  1126.  
  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)
  1145.         : wxEvent(Id, wxEVT_INIT_DIALOG)
  1146.         { }
  1147.  
  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)
  1165.         : wxEvent(id, type)
  1166.         { m_menuId = id; }
  1167.     wxMenuEvent(const wxMenuEvent & event)
  1168.         : wxEvent(event)
  1169.     { m_menuId = event.m_menuId; }
  1170.  
  1171.     // only for wxEVT_MENU_HIGHLIGHT
  1172.     int GetMenuId() const { return m_menuId; }
  1173.  
  1174.     // only for wxEVT_MENU_OPEN/CLOSE
  1175.     bool IsPopup() const { return m_menuId == -1; }
  1176.  
  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)
  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.     }
  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.  
  1216.     void SetLoggingOff(bool logOff) { m_loggingOff = logOff; }
  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.     }
  1227.     void SetCanVeto(bool canVeto) { m_canVeto = canVeto; }
  1228.     // No more asserts here please, the one you put here was wrong.
  1229.     bool CanVeto() const { return m_canVeto; }
  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.
  1236.     void SetForce(bool force) { m_force = force; }
  1237.     bool GetForce() const { return m_force; }
  1238. #endif
  1239.  
  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)
  1263.         : wxEvent(id, wxEVT_SHOW)
  1264.         { m_show = show; }
  1265.     wxShowEvent(const wxShowEvent & event)
  1266.         : wxEvent(event)
  1267.     { m_show = event.m_show; }
  1268.  
  1269.     void SetShow(bool show) { m_show = show; }
  1270.     bool GetShow() const { return m_show; }
  1271.  
  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)
  1289.         : wxEvent(id, wxEVT_ICONIZE)
  1290.         { m_iconized = iconized; }
  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
  1296.     bool Iconized() const { return m_iconized; }
  1297.  
  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)
  1314.         : wxEvent(id, wxEVT_MAXIMIZE)
  1315.         { }
  1316.  
  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.     }
  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.  
  1378.     wxPoint GetPosition() const { return m_pos; }
  1379.     int GetZPosition() const { return m_zPosition; }
  1380.     int GetButtonState() const { return m_buttonState; }
  1381.     int GetButtonChange() const { return m_buttonChange; }
  1382.     int GetJoystick() const { return m_joyStick; }
  1383.  
  1384.     void SetJoystick(int stick) { m_joyStick = stick; }
  1385.     void SetButtonState(int state) { m_buttonState = state; }
  1386.     void SetButtonChange(int change) { m_buttonChange = change; }
  1387.     void SetPosition(const wxPoint& pos) { m_pos = pos; }
  1388.     void SetZPosition(int zPos) { m_zPosition = zPos; }
  1389.  
  1390.     // Was it a button event? (*doesn't* mean: is any button *down*?)
  1391.     bool IsButton() const { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) ||
  1392.             (GetEventType() == wxEVT_JOY_BUTTON_UP)); }
  1393.  
  1394.     // Was it a move event?
  1395.     bool IsMove() const { return (GetEventType() == wxEVT_JOY_MOVE) ; }
  1396.  
  1397.     // Was it a zmove event?
  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.  
  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
  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.  
  1459.     virtual ~wxDropFilesEvent()
  1460.     {
  1461.         delete [] m_files;
  1462.     }
  1463.  
  1464.     wxPoint GetPosition() const { return m_pos; }
  1465.     int GetNumberOfFiles() const { return m_noFiles; }
  1466.     wxString *GetFiles() const { return m_files; }
  1467.  
  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)
  1483.         : wxCommandEvent(wxEVT_UPDATE_UI, commandId)
  1484.     {
  1485.         m_checked =
  1486.         m_enabled =
  1487.         m_setEnabled =
  1488.         m_setText =
  1489.         m_setChecked = FALSE;
  1490.     }
  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.  
  1501.     bool GetChecked() const { return m_checked; }
  1502.     bool GetEnabled() const { return m_enabled; }
  1503.     wxString GetText() const { return m_text; }
  1504.     bool GetSetText() const { return m_setText; }
  1505.     bool GetSetChecked() const { return m_setChecked; }
  1506.     bool GetSetEnabled() const { return m_setEnabled; }
  1507.  
  1508.     void Check(bool check) { m_checked = check; m_setChecked = TRUE; }
  1509.     void Enable(bool enable) { m_enabled = enable; m_setEnabled = TRUE; }
  1510.     void SetText(const wxString& text) { m_text = text; m_setText = TRUE; }
  1511.  
  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:
  1534.     wxSysColourChangedEvent()
  1535.         : wxEvent(0, wxEVT_SYS_COLOUR_CHANGED)
  1536.         { }
  1537.  
  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)
  1557.         : wxEvent(id, wxEVT_MOUSE_CAPTURE_CHANGED),
  1558.           m_gainedCapture(gainedCapture)
  1559.         { }
  1560.  
  1561.     wxMouseCaptureChangedEvent(const wxMouseCaptureChangedEvent& event)
  1562.         : wxEvent(event),
  1563.           m_gainedCapture(event.m_gainedCapture)
  1564.         { }
  1565.  
  1566.     virtual wxEvent *Clone() const { return new wxMouseCaptureChangedEvent(*this); }
  1567.  
  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:
  1581.     DECLARE_DYNAMIC_CLASS(wxDisplayChangedEvent)
  1582.  
  1583. public:
  1584.     wxDisplayChangedEvent()
  1585.         : wxEvent(0, wxEVT_DISPLAY_CHANGED)
  1586.         { }
  1587.  
  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)
  1602.         : wxEvent(id, wxEVT_PALETTE_CHANGED),
  1603.           m_changedWindow((wxWindow *) NULL)
  1604.         { }
  1605.  
  1606.     wxPaletteChangedEvent(const wxPaletteChangedEvent& event)
  1607.         : wxEvent(event),
  1608.           m_changedWindow(event.m_changedWindow)
  1609.         { }
  1610.  
  1611.     void SetChangedWindow(wxWindow* win) { m_changedWindow = win; }
  1612.     wxWindow* GetChangedWindow() const { return m_changedWindow; }
  1613.  
  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)
  1632.         : wxEvent(id, wxEVT_QUERY_NEW_PALETTE),
  1633.           m_paletteRealized(FALSE)
  1634.         { }
  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.
  1641.     void SetPaletteRealized(bool realized) { m_paletteRealized = realized; }
  1642.     bool GetPaletteRealized() const { return m_paletteRealized; }
  1643.  
  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:
  1664.     wxNavigationKeyEvent()
  1665.         : wxEvent(0, wxEVT_NAVIGATION_KEY),
  1666.           m_flags(IsForward | Propagate),    // defaults are for TAB
  1667.           m_focus((wxWindow *)NULL)
  1668.         { }
  1669.  
  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)
  1677.     bool GetDirection() const
  1678.         { return (m_flags & IsForward) != 0; }
  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
  1684.     bool IsWindowChange() const
  1685.         { return (m_flags & WinChange) != 0; }
  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
  1692.     bool ShouldPropagate() const
  1693.         { return (m_flags & Propagate) != 0; }
  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)
  1699.     wxWindow* GetCurrentFocus() const { return m_focus; }
  1700.     void SetCurrentFocus(wxWindow *win) { m_focus = win; }
  1701.  
  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.  
  1734.     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
  1735.  
  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.  
  1747.     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
  1748.  
  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)
  1767.         : wxCommandEvent(type, id),
  1768.           m_pos(pt), m_target(), m_link()
  1769.     { }
  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)
  1778.     const wxPoint& GetPosition() const { return m_pos; }
  1779.     void SetPosition(const wxPoint& pos) { m_pos = pos; }
  1780.  
  1781.     // Optional link to further help
  1782.     const wxString& GetLink() const { return m_link; }
  1783.     void SetLink(const wxString& link) { m_link = link; }
  1784.  
  1785.     // Optional target to display help in. E.g. a window specification
  1786.     const wxString& GetTarget() const { return m_target; }
  1787.     void SetTarget(const wxString& target) { m_target = target; }
  1788.  
  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)
  1814.         : wxCommandEvent(type, id),
  1815.           m_pos(pt)
  1816.     { }
  1817.     wxContextMenuEvent(const wxContextMenuEvent & event)
  1818.         : wxCommandEvent(event),
  1819.         m_pos(event.m_pos)
  1820.     { }
  1821.  
  1822.     // Position of event (in screen coordinates)
  1823.     const wxPoint& GetPosition() const { return m_pos; }
  1824.     void SetPosition(const wxPoint& pos) { m_pos = pos; }
  1825.  
  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:
  1843.     wxIdleEvent()
  1844.         : wxEvent(0, wxEVT_IDLE),
  1845.           m_requestMore(FALSE)
  1846.         { }
  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; }
  1853.     bool MoreRequested() const { return m_requestMore; }
  1854.  
  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:
  1911.     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.  
  1919.     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. {
  1941.     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. {
  1959.     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.  
  1992.     wxEvtHandler *GetNextHandler() const { return m_nextHandler; }
  1993.     wxEvtHandler *GetPreviousHandler() const { return m_previousHandler; }
  1994.     void SetNextHandler(wxEvtHandler *handler) { m_nextHandler = handler; }
  1995.     void SetPreviousHandler(wxEvtHandler *handler) { m_previousHandler = handler; }
  1996.  
  1997.     void SetEvtHandlerEnabled(bool enabled) { m_enabled = enabled; }
  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
  2038.     void SetClientObject( wxClientData *data ) { DoSetClientObject(data); }
  2039.     wxClientData *GetClientObject() const { return DoGetClientObject(); }
  2040.  
  2041.     void SetClientData( void *data ) { DoSetClientData(data); }
  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
  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
  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
  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.