home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / include / wx / event.h < prev    next >
C/C++ Source or Header  |  2002-08-31  |  104KB  |  2,451 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 2002/08/31 11:29:10 GD 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) : wxEvent(evt)
  821.     {
  822.         m_x = evt.m_x;
  823.         m_y = evt.m_y;
  824.  
  825.         m_keyCode = evt.m_keyCode;
  826.  
  827.         m_controlDown = evt.m_controlDown;
  828.         m_shiftDown = evt.m_shiftDown;
  829.         m_altDown = evt.m_altDown;
  830.         m_metaDown = evt.m_metaDown;
  831.         m_scanCode = evt.m_scanCode;
  832.         m_rawCode = evt.m_rawCode;
  833.         m_rawFlags = evt.m_rawFlags;
  834.     }
  835.  
  836.  
  837.     // Find state of shift/control keys
  838.     bool ControlDown() const { return m_controlDown; }
  839.     bool MetaDown() const { return m_metaDown; }
  840.     bool AltDown() const { return m_altDown; }
  841.     bool ShiftDown() const { return m_shiftDown; }
  842.  
  843.     // exclude MetaDown() from HasModifiers() because NumLock under X is often
  844.     // configured as mod2 modifier, yet the key events even when it is pressed
  845.     // should be processed normally, not like Ctrl- or Alt-key
  846.     bool HasModifiers() const { return ControlDown() || AltDown(); }
  847.  
  848.     // get the key code: an ASCII7 char or an element of wxKeyCode enum
  849.     int GetKeyCode() const { return (int)m_keyCode; }
  850.  
  851.     // get the raw key code (platform-dependent)
  852.     wxUint32 GetRawKeyCode() const { return m_rawCode; }
  853.  
  854.     // get the raw key flags (platform-dependent)
  855.     wxUint32 GetRawKeyFlags() const { return m_rawFlags; }
  856.  
  857.     // Find the position of the event
  858.     void GetPosition(wxCoord *xpos, wxCoord *ypos) const
  859.     {
  860.         if (xpos) *xpos = m_x;
  861.         if (ypos) *ypos = m_y;
  862.     }
  863.  
  864. #ifndef __WIN16__
  865.     void GetPosition(long *xpos, long *ypos) const
  866.     {
  867.         if (xpos) *xpos = (long)m_x;
  868.         if (ypos) *ypos = (long)m_y;
  869.     }
  870. #endif
  871.  
  872.     wxPoint GetPosition() const
  873.         { return wxPoint(m_x, m_y); }
  874.  
  875.     // Get X position
  876.     wxCoord GetX() const { return m_x; }
  877.  
  878.     // Get Y position
  879.     wxCoord GetY() const { return m_y; }
  880.  
  881.     // deprecated
  882.     long KeyCode() const { return m_keyCode; }
  883.  
  884.     virtual wxEvent *Clone() const { return new wxKeyEvent(*this); }
  885.  
  886.     // we do need to copy wxKeyEvent sometimes (in wxTreeCtrl code, for
  887.     // example)
  888.     wxKeyEvent& operator=(const wxKeyEvent& evt)
  889.     {
  890.         m_x = evt.m_x;
  891.         m_y = evt.m_y;
  892.  
  893.         m_keyCode = evt.m_keyCode;
  894.  
  895.         m_controlDown = evt.m_controlDown;
  896.         m_shiftDown = evt.m_shiftDown;
  897.         m_altDown = evt.m_altDown;
  898.         m_metaDown = evt.m_metaDown;
  899.         m_scanCode = evt.m_scanCode;
  900.         m_rawCode = evt.m_rawCode;
  901.         m_rawFlags = evt.m_rawFlags;
  902.  
  903.         return *this;
  904.     }
  905.  
  906. public:
  907.     wxCoord       m_x, m_y;
  908.  
  909.     long          m_keyCode;
  910.  
  911.     bool          m_controlDown;
  912.     bool          m_shiftDown;
  913.     bool          m_altDown;
  914.     bool          m_metaDown;
  915.     bool          m_scanCode;
  916.  
  917.     // these fields contain the platform-specific information about the pressed
  918.     // key
  919.     wxUint32      m_rawCode;
  920.     wxUint32      m_rawFlags;
  921.  
  922. private:
  923.     DECLARE_DYNAMIC_CLASS(wxKeyEvent)
  924. };
  925.  
  926. // Size event class
  927. /*
  928.  wxEVT_SIZE
  929.  */
  930.  
  931. class WXDLLEXPORT wxSizeEvent : public wxEvent
  932. {
  933. public:
  934.     wxSizeEvent() : wxEvent(0, wxEVT_SIZE)
  935.         { }
  936.     wxSizeEvent(const wxSize& sz, int id = 0)
  937.         : wxEvent(id, wxEVT_SIZE),
  938.           m_size(sz)
  939.         { }
  940.     wxSizeEvent(const wxSizeEvent & event)
  941.         : wxEvent(event),
  942.           m_size(event.m_size)
  943.         { }
  944.  
  945.     wxSize GetSize() const { return m_size; }
  946.  
  947.     virtual wxEvent *Clone() const { return new wxSizeEvent(*this); }
  948.  
  949. public:
  950.     wxSize m_size;
  951.  
  952. private:
  953.     DECLARE_DYNAMIC_CLASS(wxSizeEvent)
  954. };
  955.  
  956. // Move event class
  957.  
  958. /*
  959.  wxEVT_MOVE
  960.  */
  961.  
  962. class WXDLLEXPORT wxMoveEvent : public wxEvent
  963. {
  964. public:
  965.     wxMoveEvent()
  966.         : wxEvent(0, wxEVT_MOVE)
  967.         { }
  968.     wxMoveEvent(const wxPoint& pos, int id = 0)
  969.         : wxEvent(id, wxEVT_MOVE),
  970.           m_pos(pos)
  971.         { }
  972.     wxMoveEvent(const wxMoveEvent& event)
  973.         : wxEvent(event),
  974.           m_pos(event.m_pos)
  975.     { }
  976.  
  977.     wxPoint GetPosition() const { return m_pos; }
  978.  
  979.     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
  980.  
  981.     wxPoint m_pos;
  982.  
  983. private:
  984.     DECLARE_DYNAMIC_CLASS(wxMoveEvent)
  985. };
  986.  
  987. // Paint event class
  988. /*
  989.  wxEVT_PAINT
  990.  wxEVT_NC_PAINT
  991.  wxEVT_PAINT_ICON
  992.  */
  993.  
  994. #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__))
  995.     // see comments in src/msw|os2/dcclient.cpp where g_isPainting is defined
  996.     extern WXDLLEXPORT int g_isPainting;
  997. #endif // debug
  998.  
  999. class WXDLLEXPORT wxPaintEvent : public wxEvent
  1000. {
  1001. public:
  1002.     wxPaintEvent(int Id = 0)
  1003.         : wxEvent(Id, wxEVT_PAINT)
  1004.     {
  1005. #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__))
  1006.         // set the internal flag for the duration of processing of WM_PAINT
  1007.         g_isPainting++;
  1008. #endif // debug
  1009.     }
  1010.  
  1011. #if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__))
  1012.     ~wxPaintEvent()
  1013.     {
  1014.         g_isPainting--;
  1015.     }
  1016. #endif // debug
  1017.  
  1018.     virtual wxEvent *Clone() const { return new wxPaintEvent(*this); }
  1019.  
  1020. private:
  1021.     DECLARE_DYNAMIC_CLASS(wxPaintEvent)
  1022. };
  1023.  
  1024. class WXDLLEXPORT wxNcPaintEvent : public wxEvent
  1025. {
  1026. public:
  1027.     wxNcPaintEvent(int id = 0)
  1028.         : wxEvent(id, wxEVT_NC_PAINT)
  1029.         { }
  1030.  
  1031.     virtual wxEvent *Clone() const { return new wxNcPaintEvent(*this); }
  1032.  
  1033. private:
  1034.     DECLARE_DYNAMIC_CLASS(wxNcPaintEvent)
  1035. };
  1036.  
  1037. // Erase background event class
  1038. /*
  1039.  wxEVT_ERASE_BACKGROUND
  1040.  */
  1041.  
  1042. class WXDLLEXPORT wxEraseEvent : public wxEvent
  1043. {
  1044. private:
  1045.     wxEraseEvent& operator=(const wxEraseEvent& event);
  1046.  
  1047. public:
  1048.     wxEraseEvent(int Id = 0, wxDC *dc = (wxDC *) NULL)
  1049.         : wxEvent(Id, wxEVT_ERASE_BACKGROUND),
  1050.           m_dc(dc)
  1051.         { }
  1052.  
  1053.     wxEraseEvent(const wxEraseEvent& event)
  1054.         : wxEvent(event),
  1055.           m_dc(event.m_dc)
  1056.         { }
  1057.  
  1058.     wxDC *GetDC() const { return m_dc; }
  1059.  
  1060.     virtual wxEvent *Clone() const { return new wxEraseEvent(*this); }
  1061.  
  1062.     wxDC *m_dc;
  1063.  
  1064. private:
  1065.     DECLARE_DYNAMIC_CLASS(wxEraseEvent)
  1066. };
  1067.  
  1068. // Focus event class
  1069. /*
  1070.  wxEVT_SET_FOCUS
  1071.  wxEVT_KILL_FOCUS
  1072.  */
  1073.  
  1074. class WXDLLEXPORT wxFocusEvent : public wxEvent
  1075. {
  1076. private:
  1077.     wxFocusEvent& operator=(const wxFocusEvent& event);
  1078.  
  1079. public:
  1080.     wxFocusEvent(wxEventType type = wxEVT_NULL, int id = 0)
  1081.         : wxEvent(id, type)
  1082.         { m_win = NULL; }
  1083.  
  1084.     wxFocusEvent(const wxFocusEvent& event)
  1085.         : wxEvent(event)
  1086.         { m_win = event.m_win; }
  1087.  
  1088.     // The window associated with this event is the window which had focus
  1089.     // before for SET event and the window which will have focus for the KILL
  1090.     // one. NB: it may be NULL in both cases!
  1091.     wxWindow *GetWindow() const { return m_win; }
  1092.     void SetWindow(wxWindow *win) { m_win = win; }
  1093.  
  1094.     virtual wxEvent *Clone() const { return new wxFocusEvent(*this); }
  1095.  
  1096. private:
  1097.     wxWindow *m_win;
  1098.  
  1099. private:
  1100.     DECLARE_DYNAMIC_CLASS(wxFocusEvent)
  1101. };
  1102.  
  1103. // wxChildFocusEvent notifies the parent that a child has got the focus: unlike
  1104. // wxFocusEvent it is propgated upwards the window chain
  1105. class WXDLLEXPORT wxChildFocusEvent : public wxCommandEvent
  1106. {
  1107. public:
  1108.     wxChildFocusEvent(wxWindow *win = NULL);
  1109.  
  1110.     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
  1111.  
  1112.     virtual wxEvent *Clone() const { return new wxChildFocusEvent(*this); }
  1113.  
  1114. private:
  1115.     DECLARE_DYNAMIC_CLASS(wxChildFocusEvent)
  1116. };
  1117.  
  1118. // Activate event class
  1119. /*
  1120.  wxEVT_ACTIVATE
  1121.  wxEVT_ACTIVATE_APP
  1122.  */
  1123.  
  1124. class WXDLLEXPORT wxActivateEvent : public wxEvent
  1125. {
  1126. public:
  1127.     wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = TRUE, int Id = 0)
  1128.         : wxEvent(Id, type)
  1129.         { m_active = active; }
  1130.     wxActivateEvent(const wxActivateEvent& event)
  1131.         : wxEvent(event)
  1132.     { m_active = event.m_active; }
  1133.  
  1134.     bool GetActive() const { return m_active; }
  1135.  
  1136.     virtual wxEvent *Clone() const { return new wxActivateEvent(*this); }
  1137.  
  1138. private:
  1139.     bool m_active;
  1140.  
  1141. private:
  1142.     DECLARE_DYNAMIC_CLASS(wxActivateEvent)
  1143. };
  1144.  
  1145. // InitDialog event class
  1146. /*
  1147.  wxEVT_INIT_DIALOG
  1148.  */
  1149.  
  1150. class WXDLLEXPORT wxInitDialogEvent : public wxEvent
  1151. {
  1152. public:
  1153.     wxInitDialogEvent(int Id = 0)
  1154.         : wxEvent(Id, wxEVT_INIT_DIALOG)
  1155.         { }
  1156.  
  1157.     virtual wxEvent *Clone() const { return new wxInitDialogEvent(*this); }
  1158.  
  1159. private:
  1160.     DECLARE_DYNAMIC_CLASS(wxInitDialogEvent)
  1161. };
  1162.  
  1163. // Miscellaneous menu event class
  1164. /*
  1165.  wxEVT_MENU_OPEN,
  1166.  wxEVT_MENU_CLOSE,
  1167.  wxEVT_MENU_HIGHLIGHT,
  1168. */
  1169.  
  1170. class WXDLLEXPORT wxMenuEvent : public wxEvent
  1171. {
  1172. public:
  1173.     wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0)
  1174.         : wxEvent(id, type)
  1175.         { m_menuId = id; }
  1176.     wxMenuEvent(const wxMenuEvent & event)
  1177.         : wxEvent(event)
  1178.     { m_menuId = event.m_menuId; }
  1179.  
  1180.     // only for wxEVT_MENU_HIGHLIGHT
  1181.     int GetMenuId() const { return m_menuId; }
  1182.  
  1183.     // only for wxEVT_MENU_OPEN/CLOSE
  1184.     bool IsPopup() const { return m_menuId == -1; }
  1185.  
  1186.     virtual wxEvent *Clone() const { return new wxMenuEvent(*this); }
  1187.  
  1188. private:
  1189.     int m_menuId;
  1190.  
  1191.     DECLARE_DYNAMIC_CLASS(wxMenuEvent)
  1192. };
  1193.  
  1194. // Window close or session close event class
  1195. /*
  1196.  wxEVT_CLOSE_WINDOW,
  1197.  wxEVT_END_SESSION,
  1198.  wxEVT_QUERY_END_SESSION
  1199.  */
  1200.  
  1201. class WXDLLEXPORT wxCloseEvent : public wxEvent
  1202. {
  1203. public:
  1204.     wxCloseEvent(wxEventType type = wxEVT_NULL, int id = 0)
  1205.         : wxEvent(id, type),
  1206.           m_loggingOff(TRUE),
  1207.           m_veto(FALSE),      // should be FALSE by default
  1208.           m_canVeto(TRUE)
  1209.     {
  1210. #if WXWIN_COMPATIBILITY
  1211.         m_force = FALSE;
  1212. #endif // WXWIN_COMPATIBILITY
  1213.     }
  1214.     wxCloseEvent(const wxCloseEvent & event)
  1215.         : wxEvent(event),
  1216.         m_loggingOff(event.m_loggingOff),
  1217.         m_veto(event.m_veto),
  1218.         m_canVeto(event.m_canVeto)
  1219.     {
  1220. #if WXWIN_COMPATIBILITY
  1221.         m_force = event.m_force;
  1222. #endif // WXWIN_COMPATIBILITY
  1223.     }
  1224.  
  1225.     void SetLoggingOff(bool logOff) { m_loggingOff = logOff; }
  1226.     bool GetLoggingOff() const { return m_loggingOff; }
  1227.  
  1228.     void Veto(bool veto = TRUE)
  1229.     {
  1230.         // GetVeto() will return FALSE anyhow...
  1231.         wxCHECK_RET( m_canVeto,
  1232.                      wxT("call to Veto() ignored (can't veto this event)") );
  1233.  
  1234.         m_veto = veto;
  1235.     }
  1236.     void SetCanVeto(bool canVeto) { m_canVeto = canVeto; }
  1237.     // No more asserts here please, the one you put here was wrong.
  1238.     bool CanVeto() const { return m_canVeto; }
  1239.     bool GetVeto() const { return m_canVeto && m_veto; }
  1240.  
  1241. #if WXWIN_COMPATIBILITY
  1242.     // This is probably obsolete now, since we use CanVeto instead, in
  1243.     // both OnCloseWindow and OnQueryEndSession.
  1244.     // m_force == ! m_canVeto i.e., can't veto means we must force it to close.
  1245.     void SetForce(bool force) { m_force = force; }
  1246.     bool GetForce() const { return m_force; }
  1247. #endif
  1248.  
  1249.     virtual wxEvent *Clone() const { return new wxCloseEvent(*this); }
  1250.  
  1251. protected:
  1252.     bool m_loggingOff;
  1253.     bool m_veto, m_canVeto;
  1254.  
  1255. #if WXWIN_COMPATIBILITY
  1256.     bool m_force;
  1257. #endif
  1258.  
  1259. private:
  1260.     DECLARE_DYNAMIC_CLASS(wxCloseEvent)
  1261.  
  1262. };
  1263.  
  1264. /*
  1265.  wxEVT_SHOW
  1266.  */
  1267.  
  1268. class WXDLLEXPORT wxShowEvent : public wxEvent
  1269. {
  1270. public:
  1271.     wxShowEvent(int id = 0, bool show = FALSE)
  1272.         : wxEvent(id, wxEVT_SHOW)
  1273.         { m_show = show; }
  1274.     wxShowEvent(const wxShowEvent & event)
  1275.         : wxEvent(event)
  1276.     { m_show = event.m_show; }
  1277.  
  1278.     void SetShow(bool show) { m_show = show; }
  1279.     bool GetShow() const { return m_show; }
  1280.  
  1281.     virtual wxEvent *Clone() const { return new wxShowEvent(*this); }
  1282.  
  1283. protected:
  1284.     bool m_show;
  1285.  
  1286. private:
  1287.     DECLARE_DYNAMIC_CLASS(wxShowEvent)
  1288. };
  1289.  
  1290. /*
  1291.  wxEVT_ICONIZE
  1292.  */
  1293.  
  1294. class WXDLLEXPORT wxIconizeEvent : public wxEvent
  1295. {
  1296. public:
  1297.     wxIconizeEvent(int id = 0, bool iconized = TRUE)
  1298.         : wxEvent(id, wxEVT_ICONIZE)
  1299.         { m_iconized = iconized; }
  1300.     wxIconizeEvent(const wxIconizeEvent & event)
  1301.         : wxEvent(event)
  1302.     { m_iconized = event.m_iconized; }
  1303.  
  1304.     // return true if the frame was iconized, false if restored
  1305.     bool Iconized() const { return m_iconized; }
  1306.  
  1307.     virtual wxEvent *Clone() const { return new wxIconizeEvent(*this); }
  1308.  
  1309. protected:
  1310.     bool m_iconized;
  1311.  
  1312. private:
  1313.     DECLARE_DYNAMIC_CLASS(wxIconizeEvent)
  1314. };
  1315. /*
  1316.  wxEVT_MAXIMIZE
  1317.  */
  1318.  
  1319. class WXDLLEXPORT wxMaximizeEvent : public wxEvent
  1320. {
  1321. public:
  1322.     wxMaximizeEvent(int id = 0)
  1323.         : wxEvent(id, wxEVT_MAXIMIZE)
  1324.         { }
  1325.  
  1326.     virtual wxEvent *Clone() const { return new wxMaximizeEvent(*this); }
  1327.  
  1328. private:
  1329.     DECLARE_DYNAMIC_CLASS(wxMaximizeEvent)
  1330. };
  1331.  
  1332. // Joystick event class
  1333. /*
  1334.  wxEVT_JOY_BUTTON_DOWN,
  1335.  wxEVT_JOY_BUTTON_UP,
  1336.  wxEVT_JOY_MOVE,
  1337.  wxEVT_JOY_ZMOVE
  1338. */
  1339.  
  1340. // Which joystick? Same as Windows ids so no conversion necessary.
  1341. enum
  1342. {
  1343.     wxJOYSTICK1,
  1344.     wxJOYSTICK2
  1345. };
  1346.  
  1347. // Which button is down?
  1348. enum
  1349. {
  1350.     wxJOY_BUTTON_ANY = -1,
  1351.     wxJOY_BUTTON1    = 1,
  1352.     wxJOY_BUTTON2    = 2,
  1353.     wxJOY_BUTTON3    = 4,
  1354.     wxJOY_BUTTON4    = 8
  1355. };
  1356.  
  1357. class WXDLLEXPORT wxJoystickEvent : public wxEvent
  1358. {
  1359. public:
  1360.     wxPoint   m_pos;
  1361.     int       m_zPosition;
  1362.     int       m_buttonChange;   // Which button changed?
  1363.     int       m_buttonState;    // Which buttons are down?
  1364.     int       m_joyStick;       // Which joystick?
  1365.  
  1366.     wxJoystickEvent(wxEventType type = wxEVT_NULL,
  1367.                     int state = 0,
  1368.                     int joystick = wxJOYSTICK1,
  1369.                     int change = 0)
  1370.         : wxEvent(0, type),
  1371.           m_pos(0, 0),
  1372.           m_zPosition(0),
  1373.           m_buttonChange(change),
  1374.           m_buttonState(state),
  1375.           m_joyStick(joystick)
  1376.     {
  1377.     }
  1378.     wxJoystickEvent(const wxJoystickEvent & event)
  1379.         : wxEvent(event),
  1380.           m_pos(event.m_pos),
  1381.           m_zPosition(event.m_zPosition),
  1382.           m_buttonChange(event.m_buttonChange),
  1383.           m_buttonState(event.m_buttonState),
  1384.           m_joyStick(event.m_joyStick)
  1385.     { }
  1386.  
  1387.     wxPoint GetPosition() const { return m_pos; }
  1388.     int GetZPosition() const { return m_zPosition; }
  1389.     int GetButtonState() const { return m_buttonState; }
  1390.     int GetButtonChange() const { return m_buttonChange; }
  1391.     int GetJoystick() const { return m_joyStick; }
  1392.  
  1393.     void SetJoystick(int stick) { m_joyStick = stick; }
  1394.     void SetButtonState(int state) { m_buttonState = state; }
  1395.     void SetButtonChange(int change) { m_buttonChange = change; }
  1396.     void SetPosition(const wxPoint& pos) { m_pos = pos; }
  1397.     void SetZPosition(int zPos) { m_zPosition = zPos; }
  1398.  
  1399.     // Was it a button event? (*doesn't* mean: is any button *down*?)
  1400.     bool IsButton() const { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) ||
  1401.             (GetEventType() == wxEVT_JOY_BUTTON_UP)); }
  1402.  
  1403.     // Was it a move event?
  1404.     bool IsMove() const { return (GetEventType() == wxEVT_JOY_MOVE) ; }
  1405.  
  1406.     // Was it a zmove event?
  1407.     bool IsZMove() const { return (GetEventType() == wxEVT_JOY_ZMOVE) ; }
  1408.  
  1409.     // Was it a down event from button 1, 2, 3, 4 or any?
  1410.     bool ButtonDown(int but = wxJOY_BUTTON_ANY) const
  1411.     { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) &&
  1412.             ((but == wxJOY_BUTTON_ANY) || (but == m_buttonChange))); }
  1413.  
  1414.     // Was it a up event from button 1, 2, 3 or any?
  1415.     bool ButtonUp(int but = wxJOY_BUTTON_ANY) const
  1416.     { return ((GetEventType() == wxEVT_JOY_BUTTON_UP) &&
  1417.             ((but == wxJOY_BUTTON_ANY) || (but == m_buttonChange))); }
  1418.  
  1419.     // Was the given button 1,2,3,4 or any in Down state?
  1420.     bool ButtonIsDown(int but =  wxJOY_BUTTON_ANY) const
  1421.     { return (((but == wxJOY_BUTTON_ANY) && (m_buttonState != 0)) ||
  1422.             ((m_buttonState & but) == but)); }
  1423.  
  1424.     virtual wxEvent *Clone() const { return new wxJoystickEvent(*this); }
  1425.  
  1426. private:
  1427.     DECLARE_DYNAMIC_CLASS(wxJoystickEvent)
  1428. };
  1429.  
  1430. // Drop files event class
  1431. /*
  1432.  wxEVT_DROP_FILES
  1433.  */
  1434.  
  1435. class WXDLLEXPORT wxDropFilesEvent : public wxEvent
  1436. {
  1437. private:
  1438.     wxDropFilesEvent& operator=(const wxDropFilesEvent& event);
  1439.  
  1440. public:
  1441.     int       m_noFiles;
  1442.     wxPoint   m_pos;
  1443.     wxString* m_files;
  1444.  
  1445.     wxDropFilesEvent(wxEventType type = wxEVT_NULL,
  1446.                      int noFiles = 0,
  1447.                      wxString *files = (wxString *) NULL)
  1448.         : wxEvent(0, type),
  1449.           m_noFiles(noFiles),
  1450.           m_pos(),
  1451.           m_files(files)
  1452.         { }
  1453.  
  1454.     // we need a copy ctor to avoid deleting m_files pointer twice
  1455.     wxDropFilesEvent(const wxDropFilesEvent& other)
  1456.         : wxEvent(other),
  1457.           m_noFiles(other.m_noFiles),
  1458.           m_pos(other.m_pos),
  1459.           m_files(NULL)
  1460.     {
  1461.         m_files = new wxString[m_noFiles];
  1462.         for ( int n = 0; n < m_noFiles; n++ )
  1463.         {
  1464.             m_files[n] = other.m_files[n];
  1465.         }
  1466.     }
  1467.  
  1468.     virtual ~wxDropFilesEvent()
  1469.     {
  1470.         delete [] m_files;
  1471.     }
  1472.  
  1473.     wxPoint GetPosition() const { return m_pos; }
  1474.     int GetNumberOfFiles() const { return m_noFiles; }
  1475.     wxString *GetFiles() const { return m_files; }
  1476.  
  1477.     virtual wxEvent *Clone() const { return new wxDropFilesEvent(*this); }
  1478.  
  1479. private:
  1480.     DECLARE_DYNAMIC_CLASS(wxDropFilesEvent)
  1481. };
  1482.  
  1483. // Update UI event
  1484. /*
  1485.  wxEVT_UPDATE_UI
  1486.  */
  1487.  
  1488. class WXDLLEXPORT wxUpdateUIEvent : public wxCommandEvent
  1489. {
  1490. public:
  1491.     wxUpdateUIEvent(wxWindowID commandId = 0)
  1492.         : wxCommandEvent(wxEVT_UPDATE_UI, commandId)
  1493.     {
  1494.         m_checked =
  1495.         m_enabled =
  1496.         m_setEnabled =
  1497.         m_setText =
  1498.         m_setChecked = FALSE;
  1499.     }
  1500.     wxUpdateUIEvent(const wxUpdateUIEvent & event)
  1501.         : wxCommandEvent(event),
  1502.           m_checked(event.m_checked),
  1503.           m_enabled(event.m_enabled),
  1504.           m_setEnabled(event.m_setEnabled),
  1505.           m_setText(event.m_setText),
  1506.           m_setChecked(event.m_setChecked),
  1507.           m_text(event.m_text)
  1508.     { }
  1509.  
  1510.     bool GetChecked() const { return m_checked; }
  1511.     bool GetEnabled() const { return m_enabled; }
  1512.     wxString GetText() const { return m_text; }
  1513.     bool GetSetText() const { return m_setText; }
  1514.     bool GetSetChecked() const { return m_setChecked; }
  1515.     bool GetSetEnabled() const { return m_setEnabled; }
  1516.  
  1517.     void Check(bool check) { m_checked = check; m_setChecked = TRUE; }
  1518.     void Enable(bool enable) { m_enabled = enable; m_setEnabled = TRUE; }
  1519.     void SetText(const wxString& text) { m_text = text; m_setText = TRUE; }
  1520.  
  1521.     virtual wxEvent *Clone() const { return new wxUpdateUIEvent(*this); }
  1522.  
  1523. protected:
  1524.     bool          m_checked;
  1525.     bool          m_enabled;
  1526.     bool          m_setEnabled;
  1527.     bool          m_setText;
  1528.     bool          m_setChecked;
  1529.     wxString      m_text;
  1530.  
  1531. private:
  1532.     DECLARE_DYNAMIC_CLASS(wxUpdateUIEvent)
  1533. };
  1534.  
  1535. /*
  1536.  wxEVT_SYS_COLOUR_CHANGED
  1537.  */
  1538.  
  1539. // TODO: shouldn't all events record the window ID?
  1540. class WXDLLEXPORT wxSysColourChangedEvent : public wxEvent
  1541. {
  1542. public:
  1543.     wxSysColourChangedEvent()
  1544.         : wxEvent(0, wxEVT_SYS_COLOUR_CHANGED)
  1545.         { }
  1546.  
  1547.     virtual wxEvent *Clone() const { return new wxSysColourChangedEvent(*this); }
  1548.  
  1549. private:
  1550.     DECLARE_DYNAMIC_CLASS(wxSysColourChangedEvent)
  1551. };
  1552.  
  1553. /*
  1554.  wxEVT_MOUSE_CAPTURE_CHANGED
  1555.  The window losing the capture receives this message
  1556.  (even if it released the capture itself).
  1557.  */
  1558.  
  1559. class WXDLLEXPORT wxMouseCaptureChangedEvent : public wxEvent
  1560. {
  1561. private:
  1562.     wxMouseCaptureChangedEvent operator=(const wxMouseCaptureChangedEvent& event);
  1563.  
  1564. public:
  1565.     wxMouseCaptureChangedEvent(wxWindowID id = 0, wxWindow* gainedCapture = NULL)
  1566.         : wxEvent(id, wxEVT_MOUSE_CAPTURE_CHANGED),
  1567.           m_gainedCapture(gainedCapture)
  1568.         { }
  1569.  
  1570.     wxMouseCaptureChangedEvent(const wxMouseCaptureChangedEvent& event)
  1571.         : wxEvent(event),
  1572.           m_gainedCapture(event.m_gainedCapture)
  1573.         { }
  1574.  
  1575.     virtual wxEvent *Clone() const { return new wxMouseCaptureChangedEvent(*this); }
  1576.  
  1577.     wxWindow* GetCapturedWindow() const { return m_gainedCapture; };
  1578.  
  1579. private:
  1580.     wxWindow* m_gainedCapture;
  1581.     DECLARE_DYNAMIC_CLASS(wxMouseCaptureChangedEvent)
  1582. };
  1583.  
  1584. /*
  1585.  wxEVT_DISPLAY_CHANGED
  1586.  */
  1587. class WXDLLEXPORT wxDisplayChangedEvent : public wxEvent
  1588. {
  1589. private:
  1590.     DECLARE_DYNAMIC_CLASS(wxDisplayChangedEvent)
  1591.  
  1592. public:
  1593.     wxDisplayChangedEvent()
  1594.         : wxEvent(0, wxEVT_DISPLAY_CHANGED)
  1595.         { }
  1596.  
  1597.     virtual wxEvent *Clone() const { return new wxDisplayChangedEvent(*this); }
  1598. };
  1599.  
  1600. /*
  1601.  wxEVT_PALETTE_CHANGED
  1602.  */
  1603.  
  1604. class WXDLLEXPORT wxPaletteChangedEvent : public wxEvent
  1605. {
  1606. private:
  1607.     wxPaletteChangedEvent& operator=(const wxPaletteChangedEvent& event);
  1608.  
  1609. public:
  1610.     wxPaletteChangedEvent(wxWindowID id = 0)
  1611.         : wxEvent(id, wxEVT_PALETTE_CHANGED),
  1612.           m_changedWindow((wxWindow *) NULL)
  1613.         { }
  1614.  
  1615.     wxPaletteChangedEvent(const wxPaletteChangedEvent& event)
  1616.         : wxEvent(event),
  1617.           m_changedWindow(event.m_changedWindow)
  1618.         { }
  1619.  
  1620.     void SetChangedWindow(wxWindow* win) { m_changedWindow = win; }
  1621.     wxWindow* GetChangedWindow() const { return m_changedWindow; }
  1622.  
  1623.     virtual wxEvent *Clone() const { return new wxPaletteChangedEvent(*this); }
  1624.  
  1625. protected:
  1626.     wxWindow*     m_changedWindow;
  1627.  
  1628. private:
  1629.     DECLARE_DYNAMIC_CLASS(wxPaletteChangedEvent)
  1630. };
  1631.  
  1632. /*
  1633.  wxEVT_QUERY_NEW_PALETTE
  1634.  Indicates the window is getting keyboard focus and should re-do its palette.
  1635.  */
  1636.  
  1637. class WXDLLEXPORT wxQueryNewPaletteEvent : public wxEvent
  1638. {
  1639. public:
  1640.     wxQueryNewPaletteEvent(wxWindowID id = 0)
  1641.         : wxEvent(id, wxEVT_QUERY_NEW_PALETTE),
  1642.           m_paletteRealized(FALSE)
  1643.         { }
  1644.     wxQueryNewPaletteEvent(const wxQueryNewPaletteEvent & event)
  1645.         : wxEvent(event),
  1646.         m_paletteRealized(event.m_paletteRealized)
  1647.     { }
  1648.  
  1649.     // App sets this if it changes the palette.
  1650.     void SetPaletteRealized(bool realized) { m_paletteRealized = realized; }
  1651.     bool GetPaletteRealized() const { return m_paletteRealized; }
  1652.  
  1653.     virtual wxEvent *Clone() const { return new wxQueryNewPaletteEvent(*this); }
  1654.  
  1655. protected:
  1656.     bool m_paletteRealized;
  1657.  
  1658. private:
  1659.     DECLARE_DYNAMIC_CLASS(wxQueryNewPaletteEvent)
  1660. };
  1661.  
  1662. /*
  1663.  Event generated by dialog navigation keys
  1664.  wxEVT_NAVIGATION_KEY
  1665.  */
  1666. // NB: don't derive from command event to avoid being propagated to the parent
  1667. class WXDLLEXPORT wxNavigationKeyEvent : public wxEvent
  1668. {
  1669. private:
  1670.     wxNavigationKeyEvent& operator=(const wxNavigationKeyEvent& event);
  1671.  
  1672. public:
  1673.     wxNavigationKeyEvent()
  1674.         : wxEvent(0, wxEVT_NAVIGATION_KEY),
  1675.           m_flags(IsForward | Propagate),    // defaults are for TAB
  1676.           m_focus((wxWindow *)NULL)
  1677.         { }
  1678.  
  1679.     wxNavigationKeyEvent(const wxNavigationKeyEvent& event)
  1680.         : wxEvent(event),
  1681.           m_flags(event.m_flags),
  1682.           m_focus(event.m_focus)
  1683.         { }
  1684.  
  1685.     // direction: forward (true) or backward (false)
  1686.     bool GetDirection() const
  1687.         { return (m_flags & IsForward) != 0; }
  1688.     void SetDirection(bool bForward)
  1689.         { if ( bForward ) m_flags |= IsForward; else m_flags &= ~IsForward; }
  1690.  
  1691.     // it may be a window change event (MDI, notebook pages...) or a control
  1692.     // change event
  1693.     bool IsWindowChange() const
  1694.         { return (m_flags & WinChange) != 0; }
  1695.     void SetWindowChange(bool bIs)
  1696.         { if ( bIs ) m_flags |= WinChange; else m_flags &= ~WinChange; }
  1697.  
  1698.     // some navigation events are meant to be propagated upwards (Windows
  1699.     // convention is to do this for TAB events) while others should always
  1700.     // cycle inside the panel/radiobox/whatever we're current inside
  1701.     bool ShouldPropagate() const
  1702.         { return (m_flags & Propagate) != 0; }
  1703.     void SetPropagate(bool bDoIt)
  1704.         { if ( bDoIt ) m_flags |= Propagate; else m_flags &= ~Propagate; }
  1705.  
  1706.     // the child which has the focus currently (may be NULL - use
  1707.     // wxWindow::FindFocus then)
  1708.     wxWindow* GetCurrentFocus() const { return m_focus; }
  1709.     void SetCurrentFocus(wxWindow *win) { m_focus = win; }
  1710.  
  1711.     virtual wxEvent *Clone() const { return new wxNavigationKeyEvent(*this); }
  1712.  
  1713. private:
  1714.     enum
  1715.     {
  1716.         IsForward = 0x0001,
  1717.         WinChange = 0x0002,
  1718.         Propagate = 0x0004
  1719.     };
  1720.  
  1721.     long m_flags;
  1722.     wxWindow *m_focus;
  1723.  
  1724. private:
  1725.     DECLARE_DYNAMIC_CLASS(wxNavigationKeyEvent)
  1726. };
  1727.  
  1728. // Window creation/destruction events: the first is sent as soon as window is
  1729. // created (i.e. the underlying GUI object exists), but when the C++ object is
  1730. // fully initialized (so virtual functions may be called). The second,
  1731. // wxEVT_DESTROY, is sent right before the window is destroyed - again, it's
  1732. // still safe to call virtual functions at this moment
  1733. /*
  1734.  wxEVT_CREATE
  1735.  wxEVT_DESTROY
  1736.  */
  1737.  
  1738. class WXDLLEXPORT wxWindowCreateEvent : public wxCommandEvent
  1739. {
  1740. public:
  1741.     wxWindowCreateEvent(wxWindow *win = NULL);
  1742.  
  1743.     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
  1744.  
  1745.     virtual wxEvent *Clone() const { return new wxWindowCreateEvent(*this); }
  1746.  
  1747. private:
  1748.     DECLARE_DYNAMIC_CLASS(wxWindowCreateEvent)
  1749. };
  1750.  
  1751. class WXDLLEXPORT wxWindowDestroyEvent : public wxCommandEvent
  1752. {
  1753. public:
  1754.     wxWindowDestroyEvent(wxWindow *win = NULL);
  1755.  
  1756.     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
  1757.  
  1758.     virtual wxEvent *Clone() const { return new wxWindowDestroyEvent(*this); }
  1759.  
  1760. private:
  1761.     DECLARE_DYNAMIC_CLASS(wxWindowDestroyEvent)
  1762. };
  1763.  
  1764. // A help event is sent when the user clicks on a window in context-help mode.
  1765. /*
  1766.  wxEVT_HELP
  1767.  wxEVT_DETAILED_HELP
  1768. */
  1769.  
  1770. class WXDLLEXPORT wxHelpEvent : public wxCommandEvent
  1771. {
  1772. public:
  1773.     wxHelpEvent(wxEventType type = wxEVT_NULL,
  1774.                 wxWindowID id = 0,
  1775.                 const wxPoint& pt = wxDefaultPosition)
  1776.         : wxCommandEvent(type, id),
  1777.           m_pos(pt), m_target(), m_link()
  1778.     { }
  1779.     wxHelpEvent(const wxHelpEvent & event)
  1780.         : wxCommandEvent(event),
  1781.           m_pos(event.m_pos),
  1782.           m_target(event.m_target),
  1783.           m_link(event.m_link)
  1784.     { }
  1785.  
  1786.     // Position of event (in screen coordinates)
  1787.     const wxPoint& GetPosition() const { return m_pos; }
  1788.     void SetPosition(const wxPoint& pos) { m_pos = pos; }
  1789.  
  1790.     // Optional link to further help
  1791.     const wxString& GetLink() const { return m_link; }
  1792.     void SetLink(const wxString& link) { m_link = link; }
  1793.  
  1794.     // Optional target to display help in. E.g. a window specification
  1795.     const wxString& GetTarget() const { return m_target; }
  1796.     void SetTarget(const wxString& target) { m_target = target; }
  1797.  
  1798.     virtual wxEvent *Clone() const { return new wxHelpEvent(*this); }
  1799.  
  1800. protected:
  1801.     wxPoint   m_pos;
  1802.     wxString  m_target;
  1803.     wxString  m_link;
  1804.  
  1805. private:
  1806.     DECLARE_DYNAMIC_CLASS(wxHelpEvent)
  1807. };
  1808.  
  1809. // A Context event is sent when the user right clicks on a window or
  1810. // presses Shift-F10
  1811. // NOTE : Under windows this is a repackaged WM_CONTETXMENU message
  1812. //        Under other systems it may have to be generated from a right click event
  1813. /*
  1814.  wxEVT_CONTEXT_MENU
  1815. */
  1816.  
  1817. class WXDLLEXPORT wxContextMenuEvent : public wxCommandEvent
  1818. {
  1819. public:
  1820.     wxContextMenuEvent(wxEventType type = wxEVT_NULL,
  1821.                        wxWindowID id = 0,
  1822.                        const wxPoint& pt = wxDefaultPosition)
  1823.         : wxCommandEvent(type, id),
  1824.           m_pos(pt)
  1825.     { }
  1826.     wxContextMenuEvent(const wxContextMenuEvent & event)
  1827.         : wxCommandEvent(event),
  1828.         m_pos(event.m_pos)
  1829.     { }
  1830.  
  1831.     // Position of event (in screen coordinates)
  1832.     const wxPoint& GetPosition() const { return m_pos; }
  1833.     void SetPosition(const wxPoint& pos) { m_pos = pos; }
  1834.  
  1835.     virtual wxEvent *Clone() const { return new wxContextMenuEvent(*this); }
  1836.  
  1837. protected:
  1838.     wxPoint   m_pos;
  1839.  
  1840. private:
  1841.     DECLARE_DYNAMIC_CLASS(wxContextMenuEvent)
  1842. };
  1843.  
  1844. // Idle event
  1845. /*
  1846.  wxEVT_IDLE
  1847.  */
  1848.  
  1849. class WXDLLEXPORT wxIdleEvent : public wxEvent
  1850. {
  1851. public:
  1852.     wxIdleEvent()
  1853.         : wxEvent(0, wxEVT_IDLE),
  1854.           m_requestMore(FALSE)
  1855.         { }
  1856.     wxIdleEvent(const wxIdleEvent & event)
  1857.         : wxEvent(event),
  1858.         m_requestMore(event.m_requestMore)
  1859.     { }
  1860.  
  1861.     void RequestMore(bool needMore = TRUE) { m_requestMore = needMore; }
  1862.     bool MoreRequested() const { return m_requestMore; }
  1863.  
  1864.     virtual wxEvent *Clone() const { return new wxIdleEvent(*this); }
  1865.  
  1866. protected:
  1867.     bool m_requestMore;
  1868.  
  1869. private:
  1870.     DECLARE_DYNAMIC_CLASS(wxIdleEvent)
  1871. };
  1872.  
  1873. #endif // wxUSE_GUI
  1874.  
  1875. /* TODO
  1876.  wxEVT_POWER,
  1877.  wxEVT_MOUSE_CAPTURE_CHANGED,
  1878.  wxEVT_SETTING_CHANGED, // WM_WININICHANGE (NT) / WM_SETTINGCHANGE (Win95)
  1879. // wxEVT_FONT_CHANGED,  // WM_FONTCHANGE: roll into wxEVT_SETTING_CHANGED, but remember to propagate
  1880.                         // wxEVT_FONT_CHANGED to all other windows (maybe).
  1881.  wxEVT_DRAW_ITEM, // Leave these three as virtual functions in wxControl?? Platform-specific.
  1882.  wxEVT_MEASURE_ITEM,
  1883.  wxEVT_COMPARE_ITEM
  1884. */
  1885.  
  1886.  
  1887. // ============================================================================
  1888. // event handler and related classes
  1889. // ============================================================================
  1890.  
  1891. typedef void (wxObject::*wxObjectEventFunction)(wxEvent&);
  1892.  
  1893. // we can't have ctors nor base struct in backwards compatibility mode or
  1894. // otherwise we won't be able to initialize the objects with an agregate, so
  1895. // we have to keep both versions
  1896. #if WXWIN_COMPATIBILITY_EVENT_TYPES
  1897.  
  1898. struct WXDLLEXPORT wxEventTableEntry
  1899. {
  1900.     // For some reason, this can't be wxEventType, or VC++ complains.
  1901.     int m_eventType;            // main event type
  1902.     int m_id;                   // control/menu/toolbar id
  1903.     int m_lastId;               // used for ranges of ids
  1904.     wxObjectEventFunction m_fn; // function to call: not wxEventFunction,
  1905.                                 // because of dependency problems
  1906.  
  1907.     wxObject* m_callbackUserData;
  1908. };
  1909.  
  1910. #else // !WXWIN_COMPATIBILITY_EVENT_TYPES
  1911.  
  1912. // struct containing the members common to static and dynamic event tables
  1913. // entries
  1914. struct WXDLLEXPORT wxEventTableEntryBase
  1915. {
  1916. private:
  1917.     wxEventTableEntryBase& operator=(const wxEventTableEntryBase& event);
  1918.  
  1919. public:
  1920.     wxEventTableEntryBase(int id, int idLast,
  1921.                           wxObjectEventFunction fn, wxObject *data)
  1922.         : m_id(id),
  1923.           m_lastId(idLast),
  1924.           m_fn(fn),
  1925.           m_callbackUserData(data)
  1926.     { }
  1927.  
  1928.     wxEventTableEntryBase(const wxEventTableEntryBase& event)
  1929.         : m_id(event.m_id),
  1930.           m_lastId(event.m_lastId),
  1931.           m_fn(event.m_fn),
  1932.           m_callbackUserData(event.m_callbackUserData)
  1933.     { }
  1934.  
  1935.     // the range of ids for this entry: if m_lastId == wxID_ANY, the range
  1936.     // consists only of m_id, otherwise it is m_id..m_lastId inclusive
  1937.     int m_id,
  1938.         m_lastId;
  1939.  
  1940.     // function to call: not wxEventFunction, because of dependency problems
  1941.     wxObjectEventFunction m_fn;
  1942.  
  1943.     // arbitrary user data asosciated with the callback
  1944.     wxObject* m_callbackUserData;
  1945. };
  1946.  
  1947. // an entry from a static event table
  1948. struct WXDLLEXPORT wxEventTableEntry : public wxEventTableEntryBase
  1949. {
  1950.     wxEventTableEntry(const int& evType, int id, int idLast,
  1951.                       wxObjectEventFunction fn, wxObject *data)
  1952.         : wxEventTableEntryBase(id, idLast, fn, data),
  1953.         m_eventType(evType)
  1954.     { }
  1955.  
  1956.     // the reference to event type: this allows us to not care about the
  1957.     // (undefined) order in which the event table entries and the event types
  1958.     // are initialized: initially the value of this reference might be
  1959.     // invalid, but by the time it is used for the first time, all global
  1960.     // objects will have been initialized (including the event type constants)
  1961.     // and so it will have the correct value when it is needed
  1962.     const int& m_eventType;
  1963. };
  1964.  
  1965. // an entry used in dynamic event table managed by wxEvtHandler::Connect()
  1966. struct WXDLLEXPORT wxDynamicEventTableEntry : public wxEventTableEntryBase
  1967. {
  1968.     wxDynamicEventTableEntry(int evType, int id, int idLast,
  1969.                              wxObjectEventFunction fn, wxObject *data)
  1970.         : wxEventTableEntryBase(id, idLast, fn, data),
  1971.           m_eventType(evType)
  1972.     { }
  1973.  
  1974.     // not a reference here as we can't keep a reference to a temporary int
  1975.     // created to wrap the constant value typically passed to Connect() - nor
  1976.     // do we need it
  1977.     int m_eventType;
  1978. };
  1979.  
  1980. #endif // !WXWIN_COMPATIBILITY_EVENT_TYPES
  1981.  
  1982. // ----------------------------------------------------------------------------
  1983. // wxEventTable: an array of event entries terminated with {0, 0, 0, 0, 0}
  1984. // ----------------------------------------------------------------------------
  1985. struct WXDLLEXPORT wxEventTable
  1986. {
  1987.     const wxEventTable *baseTable;    // base event table (next in chain)
  1988.     const wxEventTableEntry *entries; // bottom of entry array
  1989. };
  1990.  
  1991. // ----------------------------------------------------------------------------
  1992. // wxEvtHandler: the base class for all objects handling wxWindows events
  1993. // ----------------------------------------------------------------------------
  1994.  
  1995. class WXDLLEXPORT wxEvtHandler : public wxObject
  1996. {
  1997. public:
  1998.     wxEvtHandler();
  1999.     virtual ~wxEvtHandler();
  2000.  
  2001.     wxEvtHandler *GetNextHandler() const { return m_nextHandler; }
  2002.     wxEvtHandler *GetPreviousHandler() const { return m_previousHandler; }
  2003.     void SetNextHandler(wxEvtHandler *handler) { m_nextHandler = handler; }
  2004.     void SetPreviousHandler(wxEvtHandler *handler) { m_previousHandler = handler; }
  2005.  
  2006.     void SetEvtHandlerEnabled(bool enabled) { m_enabled = enabled; }
  2007.     bool GetEvtHandlerEnabled() const { return m_enabled; }
  2008.  
  2009.     // process an event right now
  2010.     virtual bool ProcessEvent(wxEvent& event);
  2011.  
  2012.     // add an event to be processed later
  2013.     void AddPendingEvent(wxEvent& event);
  2014.  
  2015.     // process all pending events
  2016.     void ProcessPendingEvents();
  2017.  
  2018.     // add a
  2019. #if wxUSE_THREADS
  2020.     bool ProcessThreadEvent(wxEvent& event);
  2021. #endif
  2022.  
  2023.     // Dynamic association of a member function handler with the event handler,
  2024.     // id and event type
  2025.     void Connect( int id, int lastId, int eventType,
  2026.                   wxObjectEventFunction func,
  2027.                   wxObject *userData = (wxObject *) NULL );
  2028.  
  2029.     // Convenience function: take just one id
  2030.     void Connect( int id, int eventType,
  2031.                   wxObjectEventFunction func,
  2032.                   wxObject *userData = (wxObject *) NULL )
  2033.         { Connect(id, wxID_ANY, eventType, func, userData); }
  2034.  
  2035.     bool Disconnect( int id, int lastId, wxEventType eventType,
  2036.                   wxObjectEventFunction func = NULL,
  2037.                   wxObject *userData = (wxObject *) NULL );
  2038.  
  2039.     // Convenience function: take just one id
  2040.     bool Disconnect( int id, wxEventType eventType = wxEVT_NULL,
  2041.                   wxObjectEventFunction func = NULL,
  2042.                   wxObject *userData = (wxObject *) NULL )
  2043.         { return Disconnect(id, wxID_ANY, eventType, func, userData); }
  2044.  
  2045.  
  2046.     // User data can be associated with each wxEvtHandler
  2047.     void SetClientObject( wxClientData *data ) { DoSetClientObject(data); }
  2048.     wxClientData *GetClientObject() const { return DoGetClientObject(); }
  2049.  
  2050.     void SetClientData( void *data ) { DoSetClientData(data); }
  2051.     void *GetClientData() const { return DoGetClientData(); }
  2052.  
  2053.  
  2054.     // implementation from now on
  2055.     virtual bool SearchEventTable(wxEventTable& table, wxEvent& event);
  2056.     bool SearchDynamicEventTable( wxEvent& event );
  2057.  
  2058. #if wxUSE_THREADS
  2059.     void ClearEventLocker()
  2060.    {
  2061. #  if !defined(__VISAGECPP__)
  2062.       delete m_eventsLocker;
  2063.       m_eventsLocker = NULL;
  2064. #endif
  2065.    };
  2066. #endif
  2067.  
  2068.     // old stuff
  2069.  
  2070. #if WXWIN_COMPATIBILITY_2
  2071.     virtual void OnCommand(wxWindow& WXUNUSED(win),
  2072.                            wxCommandEvent& WXUNUSED(event))
  2073.     {
  2074.         wxFAIL_MSG(wxT("shouldn't be called any more"));
  2075.     }
  2076.  
  2077.     // Called if child control has no callback function
  2078.     virtual long Default()
  2079.         { return GetNextHandler() ? GetNextHandler()->Default() : 0; };
  2080. #endif // WXWIN_COMPATIBILITY_2
  2081.  
  2082. #if WXWIN_COMPATIBILITY
  2083.     virtual bool OnClose();
  2084. #endif
  2085.  
  2086. private:
  2087.     static const wxEventTableEntry sm_eventTableEntries[];
  2088.  
  2089. protected:
  2090.     static const wxEventTable sm_eventTable;
  2091.  
  2092.     virtual const wxEventTable *GetEventTable() const;
  2093.  
  2094.     wxEvtHandler*       m_nextHandler;
  2095.     wxEvtHandler*       m_previousHandler;
  2096.     wxList*             m_dynamicEvents;
  2097.     wxList*             m_pendingEvents;
  2098.  
  2099. #if wxUSE_THREADS
  2100. #if defined (__VISAGECPP__)
  2101.     wxCriticalSection   m_eventsLocker;
  2102. #  else
  2103.     wxCriticalSection*  m_eventsLocker;
  2104. #  endif
  2105. #endif
  2106.  
  2107.     // optimization: instead of using costly IsKindOf() to decide whether we're
  2108.     // a window (which is true in 99% of cases), use this flag
  2109.     bool                m_isWindow;
  2110.  
  2111.     // Is event handler enabled?
  2112.     bool                m_enabled;
  2113.  
  2114.  
  2115.     // The user data: either an object which will be deleted by the container
  2116.     // when it's deleted or some raw pointer which we do nothing with - only
  2117.     // one type of data can be used with the given window (i.e. you cannot set
  2118.     // the void data and then associate the container with wxClientData or vice
  2119.     // versa)
  2120.     union
  2121.     {
  2122.         wxClientData *m_clientObject;
  2123.         void         *m_clientData;
  2124.     };
  2125.  
  2126.     // what kind of data do we have?
  2127.     wxClientDataType m_clientDataType;
  2128.  
  2129.     // client data accessors
  2130.     virtual void DoSetClientObject( wxClientData *data );
  2131.     virtual wxClientData *DoGetClientObject() const;
  2132.  
  2133.     virtual void DoSetClientData( void *data );
  2134.     virtual void *DoGetClientData() const;
  2135.  
  2136. private:
  2137.     DECLARE_NO_COPY_CLASS(wxEvtHandler)
  2138.     DECLARE_DYNAMIC_CLASS(wxEvtHandler)
  2139. };
  2140.  
  2141. typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&);
  2142. #if wxUSE_GUI
  2143. typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&);
  2144. typedef void (wxEvtHandler::*wxScrollEventFunction)(wxScrollEvent&);
  2145. typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&);
  2146. typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&);
  2147. typedef void (wxEvtHandler::*wxMoveEventFunction)(wxMoveEvent&);
  2148. typedef void (wxEvtHandler::*wxPaintEventFunction)(wxPaintEvent&);
  2149. typedef void (wxEvtHandler::*wxEraseEventFunction)(wxEraseEvent&);
  2150. typedef void (wxEvtHandler::*wxMouseEventFunction)(wxMouseEvent&);
  2151. typedef void (wxEvtHandler::*wxCharEventFunction)(wxKeyEvent&);
  2152. typedef void (wxEvtHandler::*wxFocusEventFunction)(wxFocusEvent&);
  2153. typedef void (wxEvtHandler::*wxChildFocusEventFunction)(wxChildFocusEvent&);
  2154. typedef void (wxEvtHandler::*wxActivateEventFunction)(wxActivateEvent&);
  2155. typedef void (wxEvtHandler::*wxMenuEventFunction)(wxMenuEvent&);
  2156. typedef void (wxEvtHandler::*wxJoystickEventFunction)(wxJoystickEvent&);
  2157. typedef void (wxEvtHandler::*wxDropFilesEventFunction)(wxDropFilesEvent&);
  2158. typedef void (wxEvtHandler::*wxInitDialogEventFunction)(wxInitDialogEvent&);
  2159. typedef void (wxEvtHandler::*wxSysColourChangedFunction)(wxSysColourChangedEvent&);
  2160. typedef void (wxEvtHandler::*wxDisplayChangedFunction)(wxDisplayChangedEvent&);
  2161. typedef void (wxEvtHandler::*wxUpdateUIEventFunction)(wxUpdateUIEvent&);
  2162. typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&);
  2163. typedef void (wxEvtHandler::*wxCloseEventFunction)(wxCloseEvent&);
  2164. typedef void (wxEvtHandler::*wxShowEventFunction)(wxShowEvent&);
  2165. typedef void (wxEvtHandler::*wxIconizeEventFunction)(wxIconizeEvent&);
  2166. typedef void (wxEvtHandler::*wxMaximizeEventFunction)(wxMaximizeEvent&);
  2167. typedef void (wxEvtHandler::*wxNavigationKeyEventFunction)(wxNavigationKeyEvent&);
  2168. typedef void (wxEvtHandler::*wxPaletteChangedEventFunction)(wxPaletteChangedEvent&);
  2169. typedef void (wxEvtHandler::*wxQueryNewPaletteEventFunction)(wxQueryNewPaletteEvent&);
  2170. typedef void (wxEvtHandler::*wxWindowCreateEventFunction)(wxWindowCreateEvent&);
  2171. typedef void (wxEvtHandler::*wxWindowDestroyEventFunction)(wxWindowDestroyEvent&);
  2172. typedef void (wxEvtHandler::*wxSetCursorEventFunction)(wxSetCursorEvent&);
  2173. typedef void (wxEvtHandler::*wxNotifyEventFunction)(wxNotifyEvent&);
  2174. typedef void (wxEvtHandler::*wxHelpEventFunction)(wxHelpEvent&);
  2175. typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&);
  2176. typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureChangedEvent&);
  2177. #endif // wxUSE_GUI
  2178.  
  2179. // N.B. In GNU-WIN32, you *have* to take the address of a member function
  2180. // (use &) or the compiler crashes...
  2181.  
  2182. #define DECLARE_EVENT_TABLE() \
  2183.     private: \
  2184.         static const wxEventTableEntry sm_eventTableEntries[]; \
  2185.     protected: \
  2186.         static const wxEventTable        sm_eventTable; \
  2187.         virtual const wxEventTable*        GetEventTable() const;
  2188.  
  2189. #define BEGIN_EVENT_TABLE(theClass, baseClass) \
  2190.     const wxEventTable *theClass::GetEventTable() const \
  2191.         { return &theClass::sm_eventTable; } \
  2192.     const wxEventTable theClass::sm_eventTable = \
  2193.         { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \
  2194.     const wxEventTableEntry theClass::sm_eventTableEntries[] = { \
  2195.  
  2196. #define END_EVENT_TABLE() DECLARE_EVENT_TABLE_ENTRY( wxEVT_NULL, 0, 0, 0, 0 ) };
  2197.  
  2198. /*
  2199.  * Event table macros
  2200.  */
  2201.  
  2202. // Generic events
  2203. #define EVT_CUSTOM(event, id, func) DECLARE_EVENT_TABLE_ENTRY( event, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ),
  2204. #define EVT_CUSTOM_RANGE(event, id1, id2, func) DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) & func, (wxObject *) NULL ),
  2205.  
  2206. // Miscellaneous
  2207. #define EVT_SIZE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxSizeEventFunction) & func, (wxObject *) NULL ),
  2208. #define EVT_MOVE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMoveEventFunction) & func, (wxObject *) NULL ),
  2209. #define EVT_CLOSE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CLOSE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
  2210. #define EVT_END_SESSION(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
  2211. #define EVT_QUERY_END_SESSION(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
  2212. #define EVT_PAINT(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_PAINT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxPaintEventFunction) & func, (wxObject *) NULL ),
  2213. #define EVT_NC_PAINT(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_NC_PAINT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxPaintEventFunction) & func, (wxObject *) NULL ),
  2214. #define EVT_ERASE_BACKGROUND(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_ERASE_BACKGROUND, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxEraseEventFunction) & func, (wxObject *) NULL ),
  2215. #define EVT_CHAR(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ),
  2216. #define EVT_KEY_DOWN(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ),
  2217. #define EVT_KEY_UP(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ),
  2218. #define EVT_CHAR_HOOK(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR_HOOK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, NULL ),
  2219. #define EVT_MENU_OPEN(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_OPEN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
  2220. #define EVT_MENU_CLOSE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_CLOSE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
  2221. #define EVT_MENU_HIGHLIGHT(id, func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
  2222. #define EVT_MENU_HIGHLIGHT_ALL(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
  2223. #define EVT_SET_FOCUS(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SET_FOCUS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ),
  2224. #define EVT_KILL_FOCUS(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_KILL_FOCUS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ),
  2225. #define EVT_CHILD_FOCUS(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHILD_FOCUS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxChildFocusEventFunction) & func, (wxObject *) NULL ),
  2226. #define EVT_ACTIVATE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_ACTIVATE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxActivateEventFunction) & func, (wxObject *) NULL ),
  2227. #define EVT_ACTIVATE_APP(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_ACTIVATE_APP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxActivateEventFunction) & func, (wxObject *) NULL ),
  2228. #define EVT_END_SESSION(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
  2229. #define EVT_QUERY_END_SESSION(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_END_SESSION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCloseEventFunction) & func, (wxObject *) NULL ),
  2230. #define EVT_DROP_FILES(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_DROP_FILES, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxDropFilesEventFunction) & func, (wxObject *) NULL ),
  2231. #define EVT_INIT_DIALOG(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_INIT_DIALOG, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxInitDialogEventFunction) & func, (wxObject *) NULL ),
  2232. #define EVT_SYS_COLOUR_CHANGED(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SYS_COLOUR_CHANGED, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxSysColourChangedFunction) & func, (wxObject *) NULL ),
  2233. #define EVT_DISPLAY_CHANGED(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_DISPLAY_CHANGED, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxDisplayChangedFunction) & func, (wxObject *) NULL ),
  2234. #define EVT_SHOW(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SHOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxShowEventFunction) & func, (wxObject *) NULL ),
  2235. #define EVT_MAXIMIZE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MAXIMIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMaximizeEventFunction) & func, (wxObject *) NULL ),
  2236. #define EVT_ICONIZE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ICONIZE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxIconizeEventFunction) & func, (wxObject *) NULL ),
  2237. #define EVT_NAVIGATION_KEY(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_NAVIGATION_KEY, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNavigationKeyEventFunction) & func, (wxObject *) NULL ),
  2238. #define EVT_PALETTE_CHANGED(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_PALETTE_CHANGED, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxPaletteChangedEventFunction) & func, (wxObject *) NULL ),
  2239. #define EVT_QUERY_NEW_PALETTE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_NEW_PALETTE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxQueryNewPaletteEventFunction) & func, (wxObject *) NULL ),
  2240. #define EVT_WINDOW_CREATE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_CREATE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxWindowCreateEventFunction) & func, (wxObject *) NULL ),
  2241. #define EVT_WINDOW_DESTROY(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_DESTROY, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxWindowDestroyEventFunction) & func, (wxObject *) NULL ),
  2242. #define EVT_SET_CURSOR(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SET_CURSOR, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxSetCursorEventFunction) & func, (wxObject *) NULL ),
  2243. #define EVT_MOUSE_CAPTURE_CHANGED(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSE_CAPTURE_CHANGED, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseCaptureChangedEventFunction) & func, (wxObject *) NULL ),
  2244.  
  2245. // Mouse events
  2246. #define EVT_LEFT_DOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2247. #define EVT_LEFT_UP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2248. #define EVT_MIDDLE_DOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2249. #define EVT_MIDDLE_UP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2250. #define EVT_RIGHT_DOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2251. #define EVT_RIGHT_UP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2252. #define EVT_MOTION(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOTION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2253. #define EVT_LEFT_DCLICK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2254. #define EVT_MIDDLE_DCLICK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2255. #define EVT_RIGHT_DCLICK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2256. #define EVT_LEAVE_WINDOW(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEAVE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2257. #define EVT_ENTER_WINDOW(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ENTER_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2258. #define EVT_MOUSEWHEEL(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSEWHEEL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2259.  
  2260. // All mouse events
  2261. #define EVT_MOUSE_EVENTS(func) \
  2262.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2263.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2264.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2265.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2266.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2267.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2268.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOTION, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2269.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEFT_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2270.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MIDDLE_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2271.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_RIGHT_DCLICK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2272.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_ENTER_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2273.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_LEAVE_WINDOW, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),\
  2274.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSEWHEEL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction) & func, (wxObject *) NULL ),
  2275.  
  2276. // EVT_COMMAND
  2277. #define EVT_COMMAND(id, event, fn)  DECLARE_EVENT_TABLE_ENTRY( event, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2278. #define EVT_COMMAND_RANGE(id1, id2, event, fn)  DECLARE_EVENT_TABLE_ENTRY( event, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2279.  
  2280. // Scrolling from wxWindow (sent to wxScrolledWindow)
  2281. #define EVT_SCROLLWIN(func) \
  2282.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
  2283.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_BOTTOM, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
  2284.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_LINEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
  2285.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_LINEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
  2286.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_PAGEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
  2287.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_PAGEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
  2288.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_THUMBTRACK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),\
  2289.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_THUMBRELEASE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2290.  
  2291. #define EVT_SCROLLWIN_TOP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2292. #define EVT_SCROLLWIN_BOTTOM(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_BOTTOM, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2293. #define EVT_SCROLLWIN_LINEUP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_LINEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2294. #define EVT_SCROLLWIN_LINEDOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_LINEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2295. #define EVT_SCROLLWIN_PAGEUP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_PAGEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2296. #define EVT_SCROLLWIN_PAGEDOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_PAGEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2297. #define EVT_SCROLLWIN_THUMBTRACK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_THUMBTRACK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2298. #define EVT_SCROLLWIN_THUMBRELEASE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLLWIN_THUMBRELEASE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollWinEventFunction) & func, (wxObject *) NULL ),
  2299.  
  2300. // Scrolling from wxSlider and wxScrollBar
  2301. #define EVT_SCROLL(func) \
  2302.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2303.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2304.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2305.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2306.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2307.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2308.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2309.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), \
  2310.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2311.  
  2312. #define EVT_SCROLL_TOP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2313. #define EVT_SCROLL_BOTTOM(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2314. #define EVT_SCROLL_LINEUP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2315. #define EVT_SCROLL_LINEDOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2316. #define EVT_SCROLL_PAGEUP(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2317. #define EVT_SCROLL_PAGEDOWN(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2318. #define EVT_SCROLL_THUMBTRACK(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2319. #define EVT_SCROLL_THUMBRELEASE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2320. #define EVT_SCROLL_ENDSCROLL(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2321.  
  2322. // Scrolling from wxSlider and wxScrollBar, with an id
  2323. #define EVT_COMMAND_SCROLL(id, func) \
  2324.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2325.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2326.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2327.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2328.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2329.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2330.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),\
  2331.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ), \
  2332.   DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2333.  
  2334. #define EVT_COMMAND_SCROLL_TOP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_TOP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2335. #define EVT_COMMAND_SCROLL_BOTTOM(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_BOTTOM, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2336. #define EVT_COMMAND_SCROLL_LINEUP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2337. #define EVT_COMMAND_SCROLL_LINEDOWN(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_LINEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2338. #define EVT_COMMAND_SCROLL_PAGEUP(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEUP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2339. #define EVT_COMMAND_SCROLL_PAGEDOWN(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_PAGEDOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2340. #define EVT_COMMAND_SCROLL_THUMBTRACK(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBTRACK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2341. #define EVT_COMMAND_SCROLL_THUMBRELEASE(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_THUMBRELEASE, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2342. #define EVT_COMMAND_SCROLL_ENDSCROLL(id, func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SCROLL_ENDSCROLL, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxScrollEventFunction) & func, (wxObject *) NULL ),
  2343.  
  2344. // Convenience macros for commonly-used commands
  2345. #define EVT_BUTTON(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_BUTTON_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2346. #define EVT_CHECKBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKBOX_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2347. #define EVT_CHOICE(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHOICE_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2348. #define EVT_LISTBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2349. #define EVT_LISTBOX_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2350. #define EVT_MENU(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2351. #define EVT_MENU_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_MENU_SELECTED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2352. #define EVT_SLIDER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SLIDER_UPDATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2353. #define EVT_RADIOBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2354. #define EVT_RADIOBUTTON(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RADIOBUTTON_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2355. // EVT_SCROLLBAR is now obsolete since we use EVT_COMMAND_SCROLL... events
  2356. #define EVT_SCROLLBAR(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SCROLLBAR_UPDATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2357. #define EVT_VLBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_VLBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2358. #define EVT_COMBOBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_COMBOBOX_SELECTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2359. #define EVT_TOOL(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2360. #define EVT_TOOL_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_CLICKED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2361. #define EVT_TOOL_RCLICKED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_RCLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2362. #define EVT_TOOL_RCLICKED_RANGE(id1, id2, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_RCLICKED, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2363. #define EVT_TOOL_ENTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_TOOL_ENTER, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2364. #define EVT_CHECKLISTBOX(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2365.  
  2366. // Generic command events
  2367. #define EVT_COMMAND_LEFT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LEFT_CLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2368. #define EVT_COMMAND_LEFT_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LEFT_DCLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2369. #define EVT_COMMAND_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RIGHT_CLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2370. #define EVT_COMMAND_RIGHT_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RIGHT_DCLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2371. #define EVT_COMMAND_SET_FOCUS(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_SET_FOCUS, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2372. #define EVT_COMMAND_KILL_FOCUS(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_KILL_FOCUS, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2373. #define EVT_COMMAND_ENTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_ENTER, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL ),
  2374.  
  2375. // Joystick events
  2376.  
  2377. #define EVT_JOY_BUTTON_DOWN(func) \
  2378.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
  2379. #define EVT_JOY_BUTTON_UP(func) \
  2380.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
  2381. #define EVT_JOY_MOVE(func) \
  2382.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
  2383. #define EVT_JOY_ZMOVE(func) \
  2384.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_ZMOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
  2385.  
  2386. // These are obsolete, see _BUTTON_ events
  2387. #define EVT_JOY_DOWN(func) \
  2388.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
  2389. #define EVT_JOY_UP(func) \
  2390.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
  2391.  
  2392. // All joystick events
  2393. #define EVT_JOYSTICK_EVENTS(func) \
  2394.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_DOWN, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\
  2395.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_BUTTON_UP, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\
  2396.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_MOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),\
  2397.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_JOY_ZMOVE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxJoystickEventFunction) & func, (wxObject *) NULL ),
  2398.  
  2399. // Idle event
  2400. #define EVT_IDLE(func) \
  2401.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_IDLE, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) & func, (wxObject *) NULL ),
  2402.  
  2403. // Update UI event
  2404. #define EVT_UPDATE_UI(id, func) \
  2405.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_UPDATE_UI, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxUpdateUIEventFunction) & func, (wxObject *) NULL ),
  2406. #define EVT_UPDATE_UI_RANGE(id1, id2, func) \
  2407.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_UPDATE_UI, id1, id2, (wxObjectEventFunction)(wxEventFunction)(wxUpdateUIEventFunction)&func, (wxObject *) NULL ),
  2408.  
  2409. // Help events
  2410. #define EVT_HELP(id, func) \
  2411.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_HELP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ),
  2412.  
  2413. #define EVT_HELP_RANGE(id1, id2, func) \
  2414.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_HELP, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ),
  2415.  
  2416. #define EVT_DETAILED_HELP(id, func) \
  2417.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_DETAILED_HELP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ),
  2418.  
  2419. #define EVT_DETAILED_HELP_RANGE(id1, id2, func) \
  2420.  DECLARE_EVENT_TABLE_ENTRY( wxEVT_DETAILED_HELP, id1, id2, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxHelpEventFunction) & func, (wxObject *) NULL ),
  2421.  
  2422. // Context Menu Events
  2423. #define EVT_CONTEXT_MENU(func) \
  2424.  DECLARE_EVENT_TABLE_ENTRY(wxEVT_CONTEXT_MENU, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxContextMenuEventFunction) & func, (wxObject *) NULL ),
  2425.  
  2426. // ----------------------------------------------------------------------------
  2427. // Global data
  2428. // ----------------------------------------------------------------------------
  2429.  
  2430. // for pending event processing - notice that there is intentionally no
  2431. // WXDLLEXPORT here
  2432. extern wxList *wxPendingEvents;
  2433. #if wxUSE_THREADS
  2434.     extern wxCriticalSection *wxPendingEventsLocker;
  2435. #endif
  2436.  
  2437. // ----------------------------------------------------------------------------
  2438. // Helper functions
  2439. // ----------------------------------------------------------------------------
  2440.  
  2441. #if wxUSE_GUI
  2442.  
  2443. // Find a window with the focus, that is also a descendant of the given window.
  2444. // This is used to determine the window to initially send commands to.
  2445. wxWindow* wxFindFocusDescendant(wxWindow* ancestor);
  2446.  
  2447. #endif // wxUSE_GUI
  2448.  
  2449. #endif
  2450.         // _WX_EVENTH__
  2451.