]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/event.h
remove unneeded includes from mac/carbon/private.h
[wxWidgets.git] / include / wx / event.h
index de4c15edeb2803c3da292c91bf1b9aabbdc56ec0..acdf448c41fc515e19f1e0aa917ee8567f17e496 100644 (file)
 #ifndef _WX_EVENT_H__
 #define _WX_EVENT_H__
 
 #ifndef _WX_EVENT_H__
 #define _WX_EVENT_H__
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) && !defined(__EMX__)
-// Some older compilers (such as EMX) cannot handle
-// #pragma interface/implementation correctly, iff
-// #pragma implementation is used in _two_ translation
-// units (as created by e.g. event.cpp compiled for
-// libwx_base and event.cpp compiled for libwx_gui_core).
-// So we must not use those pragmas for those compilers in
-// such files.
-    #pragma interface "event.h"
-#endif
-
 #include "wx/defs.h"
 #include "wx/object.h"
 #include "wx/clntdata.h"
 #include "wx/defs.h"
 #include "wx/object.h"
 #include "wx/clntdata.h"
@@ -78,9 +67,12 @@ typedef int wxEventType;
 //     change the switch()es to if()s
 //
 // if these are real problems for you, define WXWIN_COMPATIBILITY_EVENT_TYPES
 //     change the switch()es to if()s
 //
 // if these are real problems for you, define WXWIN_COMPATIBILITY_EVENT_TYPES
-// to get 100% old behaviour, however you won't be able to use the libraries
-// using the new dynamic event type allocation in such case, so avoid it if
-// possible.
+// as 1 to get 100% old behaviour, however you won't be able to use the
+// libraries using the new dynamic event type allocation in such case, so avoid
+// it if possible.
+#ifndef WXWIN_COMPATIBILITY_EVENT_TYPES
+    #define WXWIN_COMPATIBILITY_EVENT_TYPES 0
+#endif
 
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
 
 
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
 
@@ -219,7 +211,7 @@ BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN, 305)
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK, 306)
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE, 307)
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN, 305)
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK, 306)
     DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE, 307)
-    DECLARE_EVENT_TYPE(wxEVT_SCROLL_ENDSCROLL, 308)
+    DECLARE_EVENT_TYPE(wxEVT_SCROLL_CHANGED, 308)
 
         // Scroll events from wxWindow
     DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP, 320)
 
         // Scroll events from wxWindow
     DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP, 320)
@@ -275,6 +267,11 @@ BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EVENT_TYPE(wxEVT_MOVING, 442)
     DECLARE_EVENT_TYPE(wxEVT_HIBERNATE, 443)
 
     DECLARE_EVENT_TYPE(wxEVT_MOVING, 442)
     DECLARE_EVENT_TYPE(wxEVT_HIBERNATE, 443)
 
+        // Clipboard events
+    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_COPY, 444)
+    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_CUT, 445)
+    DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_PASTE, 446)
+
         // Generic command events
         // Note: a click is a higher-level event than button down/up
     DECLARE_EVENT_TYPE(wxEVT_COMMAND_LEFT_CLICK, 500)
         // Generic command events
         // Note: a click is a higher-level event than button down/up
     DECLARE_EVENT_TYPE(wxEVT_COMMAND_LEFT_CLICK, 500)
@@ -512,11 +509,6 @@ private:
 };
 #endif
 
 };
 #endif
 
-#ifdef __VISUALC__
-    // 'this' : used in base member initializer list (for m_commandString)
-    #pragma warning(disable:4355)
-#endif
-
 class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent
 {
 public:
 class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent
 {
 public:
@@ -559,7 +551,7 @@ public:
     long GetExtraLong() const { return m_extraLong; }
 
     void SetInt(int i) { m_commandInt = i; }
     long GetExtraLong() const { return m_extraLong; }
 
     void SetInt(int i) { m_commandInt = i; }
-    long GetInt() const { return m_commandInt; }
+    int GetInt() const { return m_commandInt; }
 
     virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxCommandEvent(*this); }
 
@@ -579,10 +571,6 @@ private:
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent)
 };
 
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent)
 };
 
-#ifdef __VISUALC__
-    #pragma warning(default:4355)
-#endif
-
 #if WXWIN_COMPATIBILITY_2_4
 inline void wxCommandEventStringHelper::operator=(const wxString &str)
 {
 #if WXWIN_COMPATIBILITY_2_4
 inline void wxCommandEventStringHelper::operator=(const wxString &str)
 {
@@ -642,7 +630,7 @@ private:
  wxEVT_SCROLL_PAGEDOWN
  wxEVT_SCROLL_THUMBTRACK
  wxEVT_SCROLL_THUMBRELEASE
  wxEVT_SCROLL_PAGEDOWN
  wxEVT_SCROLL_THUMBTRACK
  wxEVT_SCROLL_THUMBRELEASE
- wxEVT_SCROLL_ENDSCROLL
+ wxEVT_SCROLL_CHANGED
 */
 
 class WXDLLIMPEXP_CORE wxScrollEvent : public wxCommandEvent
 */
 
 class WXDLLIMPEXP_CORE wxScrollEvent : public wxCommandEvent
@@ -952,11 +940,22 @@ public:
     wxKeyEvent(wxEventType keyType = wxEVT_NULL);
     wxKeyEvent(const wxKeyEvent& evt);
 
     wxKeyEvent(wxEventType keyType = wxEVT_NULL);
     wxKeyEvent(const wxKeyEvent& evt);
 
+    // can be used check if the key event has exactly the given modifiers:
+    // "GetModifiers() = wxMOD_CONTROL" is easier to write than "ControlDown()
+    // && !MetaDown() && !AltDown() && !ShiftDown()"
+    int GetModifiers() const
+    {
+        return (m_controlDown ? wxMOD_CONTROL : 0) |
+               (m_shiftDown ? wxMOD_SHIFT : 0) |
+               (m_metaDown ? wxMOD_META : 0) |
+               (m_altDown ? wxMOD_ALT : 0);
+    }
+
     // Find state of shift/control keys
     bool ControlDown() const { return m_controlDown; }
     // Find state of shift/control keys
     bool ControlDown() const { return m_controlDown; }
+    bool ShiftDown() const { return m_shiftDown; }
     bool MetaDown() const { return m_metaDown; }
     bool AltDown() const { return m_altDown; }
     bool MetaDown() const { return m_metaDown; }
     bool AltDown() const { return m_altDown; }
-    bool ShiftDown() const { return m_shiftDown; }
 
     // "Cmd" is a pseudo key which is Control for PC and Unix platforms but
     // Apple ("Command") key under Macs: it makes often sense to use it instead
 
     // "Cmd" is a pseudo key which is Control for PC and Unix platforms but
     // Apple ("Command") key under Macs: it makes often sense to use it instead
@@ -1013,8 +1012,10 @@ public:
     // Get Y position
     wxCoord GetY() const { return m_y; }
 
     // Get Y position
     wxCoord GetY() const { return m_y; }
 
+#if WXWIN_COMPATIBILITY_2_6
     // deprecated, Use GetKeyCode instead.
     wxDEPRECATED( long KeyCode() const );
     // deprecated, Use GetKeyCode instead.
     wxDEPRECATED( long KeyCode() const );
+#endif // WXWIN_COMPATIBILITY_2_6
 
     virtual wxEvent *Clone() const { return new wxKeyEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxKeyEvent(*this); }
 
@@ -1046,10 +1047,13 @@ public:
 
     long          m_keyCode;
 
 
     long          m_keyCode;
 
+    // TODO: replace those with a single m_modifiers bitmask of wxMOD_XXX?
     bool          m_controlDown;
     bool          m_shiftDown;
     bool          m_altDown;
     bool          m_metaDown;
     bool          m_controlDown;
     bool          m_shiftDown;
     bool          m_altDown;
     bool          m_metaDown;
+
+    // FIXME: what is this for? relation to m_rawXXX?
     bool          m_scanCode;
 
 #if wxUSE_UNICODE
     bool          m_scanCode;
 
 #if wxUSE_UNICODE
@@ -1091,7 +1095,7 @@ public:
 
     wxSize GetSize() const { return m_size; }
     wxRect GetRect() const { return m_rect; }
 
     wxSize GetSize() const { return m_size; }
     wxRect GetRect() const { return m_rect; }
-    void SetRect(wxRect rect) { m_rect = rect; }
+    void SetRect(const wxRect& rect) { m_rect = rect; }
 
     virtual wxEvent *Clone() const { return new wxSizeEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxSizeEvent(*this); }
 
@@ -1131,7 +1135,7 @@ public:
     wxPoint GetPosition() const { return m_pos; }
     void SetPosition(const wxPoint& pos) { m_pos = pos; }
     wxRect GetRect() const { return m_rect; }
     wxPoint GetPosition() const { return m_pos; }
     void SetPosition(const wxPoint& pos) { m_pos = pos; }
     wxRect GetRect() const { return m_rect; }
-    void SetRect(wxRect rect) { m_rect = rect; }
+    void SetRect(const wxRect& rect) { m_rect = rect; }
 
     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
 
 
     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
 
@@ -1670,7 +1674,9 @@ public:
     {
         m_checked =
         m_enabled =
     {
         m_checked =
         m_enabled =
+        m_shown =
         m_setEnabled =
         m_setEnabled =
+        m_setShown =
         m_setText =
         m_setChecked = false;
     }
         m_setText =
         m_setChecked = false;
     }
@@ -1678,7 +1684,9 @@ public:
         : wxCommandEvent(event),
           m_checked(event.m_checked),
           m_enabled(event.m_enabled),
         : wxCommandEvent(event),
           m_checked(event.m_checked),
           m_enabled(event.m_enabled),
+          m_shown(event.m_shown),
           m_setEnabled(event.m_setEnabled),
           m_setEnabled(event.m_setEnabled),
+          m_setShown(event.m_setShown),
           m_setText(event.m_setText),
           m_setChecked(event.m_setChecked),
           m_text(event.m_text)
           m_setText(event.m_setText),
           m_setChecked(event.m_setChecked),
           m_text(event.m_text)
@@ -1686,13 +1694,16 @@ public:
 
     bool GetChecked() const { return m_checked; }
     bool GetEnabled() const { return m_enabled; }
 
     bool GetChecked() const { return m_checked; }
     bool GetEnabled() const { return m_enabled; }
+    bool GetShown() const { return m_shown; }
     wxString GetText() const { return m_text; }
     bool GetSetText() const { return m_setText; }
     bool GetSetChecked() const { return m_setChecked; }
     bool GetSetEnabled() const { return m_setEnabled; }
     wxString GetText() const { return m_text; }
     bool GetSetText() const { return m_setText; }
     bool GetSetChecked() const { return m_setChecked; }
     bool GetSetEnabled() const { return m_setEnabled; }
+    bool GetSetShown() const { return m_setShown; }
 
     void Check(bool check) { m_checked = check; m_setChecked = true; }
     void Enable(bool enable) { m_enabled = enable; m_setEnabled = true; }
 
     void Check(bool check) { m_checked = check; m_setChecked = true; }
     void Enable(bool enable) { m_enabled = enable; m_setEnabled = true; }
+    void Show(bool show) { m_shown = show; m_setShown = true; }
     void SetText(const wxString& text) { m_text = text; m_setText = true; }
 
     // Sets the interval between updates in milliseconds.
     void SetText(const wxString& text) { m_text = text; m_setText = true; }
 
     // Sets the interval between updates in milliseconds.
@@ -1722,7 +1733,9 @@ public:
 protected:
     bool          m_checked;
     bool          m_enabled;
 protected:
     bool          m_checked;
     bool          m_enabled;
+    bool          m_shown;
     bool          m_setEnabled;
     bool          m_setEnabled;
+    bool          m_setShown;
     bool          m_setText;
     bool          m_setChecked;
     wxString      m_text;
     bool          m_setText;
     bool          m_setChecked;
     wxString      m_text;
@@ -2006,6 +2019,34 @@ private:
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHelpEvent)
 };
 
     DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHelpEvent)
 };
 
+// A Clipboard Text event is sent when a window intercepts text copy/cut/paste
+// message, i.e. the user has cut/copied/pasted data from/into a text control
+// via ctrl-C/X/V, ctrl/shift-del/insert, a popup menu command, etc.
+// NOTE : under windows these events are *NOT* generated automatically
+// for a Rich Edit text control.
+/*
+wxEVT_COMMAND_TEXT_COPY
+wxEVT_COMMAND_TEXT_CUT
+wxEVT_COMMAND_TEXT_PASTE
+*/
+
+class WXDLLIMPEXP_CORE wxClipboardTextEvent : public wxCommandEvent
+{
+public:
+    wxClipboardTextEvent(wxEventType type = wxEVT_NULL,
+                     wxWindowID winid = 0)
+        : wxCommandEvent(type, winid)
+    { }
+    wxClipboardTextEvent(const wxClipboardTextEvent & event)
+        : wxCommandEvent(event)
+    { }
+
+    virtual wxEvent *Clone() const { return new wxClipboardTextEvent(*this); }
+
+private:
+    DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxClipboardTextEvent)
+};
+
 // A Context event is sent when the user right clicks on a window or
 // presses Shift-F10
 // NOTE : Under windows this is a repackaged WM_CONTETXMENU message
 // A Context event is sent when the user right clicks on a window or
 // presses Shift-F10
 // NOTE : Under windows this is a repackaged WM_CONTETXMENU message
@@ -2194,8 +2235,6 @@ private:
     wxEventTableEntry& operator=(const wxEventTableEntry&);
 };
 
     wxEventTableEntry& operator=(const wxEventTableEntry&);
 };
 
-class WXDLLIMPEXP_BASE wxEvtHandler;
-
 // an entry used in dynamic event table managed by wxEvtHandler::Connect()
 struct WXDLLIMPEXP_BASE wxDynamicEventTableEntry : public wxEventTableEntryBase
 {
 // an entry used in dynamic event table managed by wxEvtHandler::Connect()
 struct WXDLLIMPEXP_BASE wxDynamicEventTableEntry : public wxEventTableEntryBase
 {
@@ -2236,7 +2275,6 @@ struct WXDLLIMPEXP_BASE wxEventTable
 // ----------------------------------------------------------------------------
 
 WX_DEFINE_ARRAY_PTR(const wxEventTableEntry*, wxEventTableEntryPointerArray);
 // ----------------------------------------------------------------------------
 
 WX_DEFINE_ARRAY_PTR(const wxEventTableEntry*, wxEventTableEntryPointerArray);
-class WXDLLIMPEXP_BASE wxEvtHandler;
 
 class WXDLLIMPEXP_BASE wxEventHashTable
 {
 
 class WXDLLIMPEXP_BASE wxEventHashTable
 {
@@ -2410,7 +2448,7 @@ protected:
     // NB: This method is intentionally *not* inside wxUSE_VALIDATORS!
     //     It is part of wxBase which doesn't use validators and the code
     //     is compiled out when building wxBase w/o GUI classes, which affects
     // NB: This method is intentionally *not* inside wxUSE_VALIDATORS!
     //     It is part of wxBase which doesn't use validators and the code
     //     is compiled out when building wxBase w/o GUI classes, which affects
-    //     binary compatiblity and wxBase library can't be used by GUI
+    //     binary compatibility and wxBase library can't be used by GUI
     //     ports.
     virtual bool TryValidator(wxEvent& WXUNUSED(event)) { return false; }
 
     //     ports.
     virtual bool TryValidator(wxEvent& WXUNUSED(event)) { return false; }
 
@@ -2526,6 +2564,7 @@ typedef void (wxEvtHandler::*wxNotifyEventFunction)(wxNotifyEvent&);
 typedef void (wxEvtHandler::*wxHelpEventFunction)(wxHelpEvent&);
 typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&);
 typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureChangedEvent&);
 typedef void (wxEvtHandler::*wxHelpEventFunction)(wxHelpEvent&);
 typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&);
 typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureChangedEvent&);
+typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&);
 
 // these typedefs don't have the same name structure as the others, keep for
 // backwards compatibility only
 
 // these typedefs don't have the same name structure as the others, keep for
 // backwards compatibility only
@@ -2606,6 +2645,8 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
     (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxContextMenuEventFunction, &func)
 #define wxMouseCaptureChangedEventHandler(func) \
     (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseCaptureChangedEventFunction, &func)
     (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxContextMenuEventFunction, &func)
 #define wxMouseCaptureChangedEventHandler(func) \
     (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseCaptureChangedEventFunction, &func)
+#define wxClipboardTextEventHandler(func) \
+    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxClipboardTextEventFunction, &func)
 
 #endif // wxUSE_GUI
 
 
 #endif // wxUSE_GUI
 
@@ -2635,6 +2676,111 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
         { return theClass::sm_eventHashTable; } \
     const wxEventTableEntry theClass::sm_eventTableEntries[] = { \
 
         { return theClass::sm_eventHashTable; } \
     const wxEventTableEntry theClass::sm_eventTableEntries[] = { \
 
+#define BEGIN_EVENT_TABLE_TEMPLATE1(theClass, baseClass, T1) \
+    template<typename T1> \
+    const wxEventTable theClass<T1>::sm_eventTable = \
+        { &baseClass::sm_eventTable, &theClass<T1>::sm_eventTableEntries[0] }; \
+    template<typename T1> \
+    const wxEventTable *theClass<T1>::GetEventTable() const \
+        { return &theClass<T1>::sm_eventTable; } \
+    template<typename T1> \
+    wxEventHashTable theClass<T1>::sm_eventHashTable(theClass<T1>::sm_eventTable); \
+    template<typename T1> \
+    wxEventHashTable &theClass<T1>::GetEventHashTable() const \
+        { return theClass<T1>::sm_eventHashTable; } \
+    template<typename T1> \
+    const wxEventTableEntry theClass<T1>::sm_eventTableEntries[] = { \
+
+#define BEGIN_EVENT_TABLE_TEMPLATE2(theClass, baseClass, T1, T2) \
+    template<typename T1, typename T2> \
+    const wxEventTable theClass<T1, T2>::sm_eventTable = \
+        { &baseClass::sm_eventTable, &theClass<T1, T2>::sm_eventTableEntries[0] }; \
+    template<typename T1, typename T2> \
+    const wxEventTable *theClass<T1, T2>::GetEventTable() const \
+        { return &theClass<T1, T2>::sm_eventTable; } \
+    template<typename T1, typename T2> \
+    wxEventHashTable theClass<T1, T2>::sm_eventHashTable(theClass<T1, T2>::sm_eventTable); \
+    template<typename T1, typename T2> \
+    wxEventHashTable &theClass<T1, T2>::GetEventHashTable() const \
+        { return theClass<T1, T2>::sm_eventHashTable; } \
+    template<typename T1, typename T2> \
+    const wxEventTableEntry theClass<T1, T2>::sm_eventTableEntries[] = { \
+
+#define BEGIN_EVENT_TABLE_TEMPLATE3(theClass, baseClass, T1, T2, T3) \
+    template<typename T1, typename T2, typename T3> \
+    const wxEventTable theClass<T1, T2, T3>::sm_eventTable = \
+        { &baseClass::sm_eventTable, &theClass<T1, T2, T3>::sm_eventTableEntries[0] }; \
+    template<typename T1, typename T2, typename T3> \
+    const wxEventTable *theClass<T1, T2, T3>::GetEventTable() const \
+        { return &theClass<T1, T2, T3>::sm_eventTable; } \
+    template<typename T1, typename T2, typename T3> \
+    wxEventHashTable theClass<T1, T2, T3>::sm_eventHashTable(theClass<T1, T2, T3>::sm_eventTable); \
+    template<typename T1, typename T2, typename T3> \
+    wxEventHashTable &theClass<T1, T2, T3>::GetEventHashTable() const \
+        { return theClass<T1, T2, T3>::sm_eventHashTable; } \
+    template<typename T1, typename T2, typename T3> \
+    const wxEventTableEntry theClass<T1, T2, T3>::sm_eventTableEntries[] = { \
+
+#define BEGIN_EVENT_TABLE_TEMPLATE4(theClass, baseClass, T1, T2, T3, T4) \
+    template<typename T1, typename T2, typename T3, typename T4> \
+    const wxEventTable theClass<T1, T2, T3, T4>::sm_eventTable = \
+        { &baseClass::sm_eventTable, &theClass<T1, T2, T3, T4>::sm_eventTableEntries[0] }; \
+    template<typename T1, typename T2, typename T3, typename T4> \
+    const wxEventTable *theClass<T1, T2, T3, T4>::GetEventTable() const \
+        { return &theClass<T1, T2, T3, T4>::sm_eventTable; } \
+    template<typename T1, typename T2, typename T3, typename T4> \
+    wxEventHashTable theClass<T1, T2, T3, T4>::sm_eventHashTable(theClass<T1, T2, T3, T4>::sm_eventTable); \
+    template<typename T1, typename T2, typename T3, typename T4> \
+    wxEventHashTable &theClass<T1, T2, T3, T4>::GetEventHashTable() const \
+        { return theClass<T1, T2, T3, T4>::sm_eventHashTable; } \
+    template<typename T1, typename T2, typename T3, typename T4> \
+    const wxEventTableEntry theClass<T1, T2, T3, T4>::sm_eventTableEntries[] = { \
+
+#define BEGIN_EVENT_TABLE_TEMPLATE5(theClass, baseClass, T1, T2, T3, T4, T5) \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5> \
+    const wxEventTable theClass<T1, T2, T3, T4, T5>::sm_eventTable = \
+        { &baseClass::sm_eventTable, &theClass<T1, T2, T3, T4, T5>::sm_eventTableEntries[0] }; \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5> \
+    const wxEventTable *theClass<T1, T2, T3, T4, T5>::GetEventTable() const \
+        { return &theClass<T1, T2, T3, T4, T5>::sm_eventTable; } \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5> \
+    wxEventHashTable theClass<T1, T2, T3, T4, T5>::sm_eventHashTable(theClass<T1, T2, T3, T4, T5>::sm_eventTable); \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5> \
+    wxEventHashTable &theClass<T1, T2, T3, T4, T5>::GetEventHashTable() const \
+        { return theClass<T1, T2, T3, T4, T5>::sm_eventHashTable; } \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5> \
+    const wxEventTableEntry theClass<T1, T2, T3, T4, T5>::sm_eventTableEntries[] = { \
+
+#define BEGIN_EVENT_TABLE_TEMPLATE7(theClass, baseClass, T1, T2, T3, T4, T5, T6, T7) \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> \
+    const wxEventTable theClass<T1, T2, T3, T4, T5, T6, T7>::sm_eventTable = \
+        { &baseClass::sm_eventTable, &theClass<T1, T2, T3, T4, T5, T6, T7>::sm_eventTableEntries[0] }; \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> \
+    const wxEventTable *theClass<T1, T2, T3, T4, T5, T6, T7>::GetEventTable() const \
+        { return &theClass<T1, T2, T3, T4, T5, T6, T7>::sm_eventTable; } \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> \
+    wxEventHashTable theClass<T1, T2, T3, T4, T5, T6, T7>::sm_eventHashTable(theClass<T1, T2, T3, T4, T5, T6, T7>::sm_eventTable); \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> \
+    wxEventHashTable &theClass<T1, T2, T3, T4, T5, T6, T7>::GetEventHashTable() const \
+        { return theClass<T1, T2, T3, T4, T5, T6, T7>::sm_eventHashTable; } \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> \
+    const wxEventTableEntry theClass<T1, T2, T3, T4, T5, T6, T7>::sm_eventTableEntries[] = { \
+
+#define BEGIN_EVENT_TABLE_TEMPLATE8(theClass, baseClass, T1, T2, T3, T4, T5, T6, T7, T8) \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> \
+    const wxEventTable theClass<T1, T2, T3, T4, T5, T6, T7, T8>::sm_eventTable = \
+        { &baseClass::sm_eventTable, &theClass<T1, T2, T3, T4, T5, T6, T7, T8>::sm_eventTableEntries[0] }; \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> \
+    const wxEventTable *theClass<T1, T2, T3, T4, T5, T6, T7, T8>::GetEventTable() const \
+        { return &theClass<T1, T2, T3, T4, T5, T6, T7, T8>::sm_eventTable; } \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> \
+    wxEventHashTable theClass<T1, T2, T3, T4, T5, T6, T7, T8>::sm_eventHashTable(theClass<T1, T2, T3, T4, T5, T6, T7, T8>::sm_eventTable); \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> \
+    wxEventHashTable &theClass<T1, T2, T3, T4, T5, T6, T7, T8>::GetEventHashTable() const \
+        { return theClass<T1, T2, T3, T4, T5, T6, T7, T8>::sm_eventHashTable; } \
+    template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> \
+    const wxEventTableEntry theClass<T1, T2, T3, T4, T5, T6, T7, T8>::sm_eventTableEntries[] = { \
+
 #define END_EVENT_TABLE() DECLARE_EVENT_TABLE_ENTRY( wxEVT_NULL, 0, 0, 0, 0 ) };
 
 /*
 #define END_EVENT_TABLE() DECLARE_EVENT_TABLE_ENTRY( wxEVT_NULL, 0, 0, 0, 0 ) };
 
 /*
@@ -2778,7 +2924,7 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 #define EVT_SCROLL_PAGEDOWN(func) wx__DECLARE_EVT0(wxEVT_SCROLL_PAGEDOWN, wxScrollEventHandler(func))
 #define EVT_SCROLL_THUMBTRACK(func) wx__DECLARE_EVT0(wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler(func))
 #define EVT_SCROLL_THUMBRELEASE(func) wx__DECLARE_EVT0(wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler(func))
 #define EVT_SCROLL_PAGEDOWN(func) wx__DECLARE_EVT0(wxEVT_SCROLL_PAGEDOWN, wxScrollEventHandler(func))
 #define EVT_SCROLL_THUMBTRACK(func) wx__DECLARE_EVT0(wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler(func))
 #define EVT_SCROLL_THUMBRELEASE(func) wx__DECLARE_EVT0(wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler(func))
-#define EVT_SCROLL_ENDSCROLL(func) wx__DECLARE_EVT0(wxEVT_SCROLL_ENDSCROLL, wxScrollEventHandler(func))
+#define EVT_SCROLL_CHANGED(func) wx__DECLARE_EVT0(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(func))
 
 #define EVT_SCROLL(func) \
     EVT_SCROLL_TOP(func) \
 
 #define EVT_SCROLL(func) \
     EVT_SCROLL_TOP(func) \
@@ -2788,7 +2934,8 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
     EVT_SCROLL_PAGEUP(func) \
     EVT_SCROLL_PAGEDOWN(func) \
     EVT_SCROLL_THUMBTRACK(func) \
     EVT_SCROLL_PAGEUP(func) \
     EVT_SCROLL_PAGEDOWN(func) \
     EVT_SCROLL_THUMBTRACK(func) \
-    EVT_SCROLL_THUMBRELEASE(func)
+    EVT_SCROLL_THUMBRELEASE(func) \
+    EVT_SCROLL_CHANGED(func)
 
 // Scrolling from wxSlider and wxScrollBar, with an id
 #define EVT_COMMAND_SCROLL_TOP(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_TOP, winid, wxScrollEventHandler(func))
 
 // Scrolling from wxSlider and wxScrollBar, with an id
 #define EVT_COMMAND_SCROLL_TOP(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_TOP, winid, wxScrollEventHandler(func))
@@ -2799,7 +2946,7 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 #define EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_PAGEDOWN, winid, wxScrollEventHandler(func))
 #define EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBTRACK, winid, wxScrollEventHandler(func))
 #define EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBRELEASE, winid, wxScrollEventHandler(func))
 #define EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_PAGEDOWN, winid, wxScrollEventHandler(func))
 #define EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBTRACK, winid, wxScrollEventHandler(func))
 #define EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBRELEASE, winid, wxScrollEventHandler(func))
-#define EVT_COMMAND_SCROLL_ENDSCROLL(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_ENDSCROLL, winid, wxScrollEventHandler(func))
+#define EVT_COMMAND_SCROLL_CHANGED(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_CHANGED, winid, wxScrollEventHandler(func))
 
 #define EVT_COMMAND_SCROLL(winid, func) \
     EVT_COMMAND_SCROLL_TOP(winid, func) \
 
 #define EVT_COMMAND_SCROLL(winid, func) \
     EVT_COMMAND_SCROLL_TOP(winid, func) \
@@ -2809,7 +2956,15 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
     EVT_COMMAND_SCROLL_PAGEUP(winid, func) \
     EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) \
     EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) \
     EVT_COMMAND_SCROLL_PAGEUP(winid, func) \
     EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) \
     EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) \
-    EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func)
+    EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func) \
+    EVT_COMMAND_SCROLL_CHANGED(winid, func)
+
+#if WXWIN_COMPATIBILITY_2_6
+    // compatibility macros for the old name, deprecated in 2.8
+    #define wxEVT_SCROLL_ENDSCROLL wxEVT_SCROLL_CHANGED
+    #define EVT_COMMAND_SCROLL_ENDSCROLL EVT_COMMAND_SCROLL_CHANGED
+    #define EVT_SCROLL_ENDSCROLL EVT_SCROLL_CHANGED
+#endif // WXWIN_COMPATIBILITY_2_6
 
 // Convenience macros for commonly-used commands
 #define EVT_CHECKBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_CHECKBOX_CLICKED, winid, wxCommandEventHandler(func))
 
 // Convenience macros for commonly-used commands
 #define EVT_CHECKBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_CHECKBOX_CLICKED, winid, wxCommandEventHandler(func))
@@ -2883,6 +3038,11 @@ typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureC
 #define EVT_CONTEXT_MENU(func) wx__DECLARE_EVT0(wxEVT_CONTEXT_MENU, wxContextMenuEventHandler(func))
 #define EVT_COMMAND_CONTEXT_MENU(winid, func) wx__DECLARE_EVT1(wxEVT_CONTEXT_MENU, winid, wxContextMenuEventHandler(func))
 
 #define EVT_CONTEXT_MENU(func) wx__DECLARE_EVT0(wxEVT_CONTEXT_MENU, wxContextMenuEventHandler(func))
 #define EVT_COMMAND_CONTEXT_MENU(winid, func) wx__DECLARE_EVT1(wxEVT_CONTEXT_MENU, winid, wxContextMenuEventHandler(func))
 
+// Clipboard text Events
+#define EVT_TEXT_CUT(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_CUT, winid, wxClipboardTextEventHandler(func))
+#define EVT_TEXT_COPY(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_COPY, winid, wxClipboardTextEventHandler(func))
+#define EVT_TEXT_PASTE(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_PASTE, winid, wxClipboardTextEventHandler(func))
+
 // ----------------------------------------------------------------------------
 // Global data
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // Global data
 // ----------------------------------------------------------------------------
@@ -2902,9 +3062,8 @@ extern WXDLLIMPEXP_BASE wxList *wxPendingEvents;
 
 // Find a window with the focus, that is also a descendant of the given window.
 // This is used to determine the window to initially send commands to.
 
 // Find a window with the focus, that is also a descendant of the given window.
 // This is used to determine the window to initially send commands to.
-wxWindow* wxFindFocusDescendant(wxWindow* ancestor);
+WXDLLIMPEXP_CORE wxWindow* wxFindFocusDescendant(wxWindow* ancestor);
 
 #endif // wxUSE_GUI
 
 #endif // _WX_EVENT_H__
 
 #endif // wxUSE_GUI
 
 #endif // _WX_EVENT_H__
-