]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/event.h
* prgodlgg.h: Update() use wxString instead of 'char *'
[wxWidgets.git] / include / wx / event.h
index c74f328aae0ecb96f655dc7beccaa506c9c9df05..bdcc916e041974108f7095fc8a27aeef2141a469 100644 (file)
@@ -19,6 +19,9 @@
 #include "wx/defs.h"
 #include "wx/object.h"
 #include "wx/gdicmn.h"
+#if wxUSE_THREADS
+#include "wx/thread.h"
+#endif
 
 /*
  * Event types
@@ -91,7 +94,7 @@ const wxEventType wxEVT_KEY_DOWN =                          wxEVT_FIRST + 215;
 const wxEventType wxEVT_KEY_UP =                            wxEVT_FIRST + 216;
 
  /*
-  * Scrollbar event identifiers
+  * wxScrollbar and wxSlider event identifiers
   */
 const wxEventType wxEVT_SCROLL_TOP =                        wxEVT_FIRST + 300;
 const wxEventType wxEVT_SCROLL_BOTTOM =                     wxEVT_FIRST + 301;
@@ -101,6 +104,20 @@ const wxEventType wxEVT_SCROLL_PAGEUP =                     wxEVT_FIRST + 304;
 const wxEventType wxEVT_SCROLL_PAGEDOWN =                   wxEVT_FIRST + 305;
 const wxEventType wxEVT_SCROLL_THUMBTRACK =                 wxEVT_FIRST + 306;
 
+ /*
+  * Scroll events from wxWindow
+  */
+const wxEventType wxEVT_SCROLLWIN_TOP =                     wxEVT_FIRST + 320;
+const wxEventType wxEVT_SCROLLWIN_BOTTOM =                  wxEVT_FIRST + 321;
+const wxEventType wxEVT_SCROLLWIN_LINEUP =                  wxEVT_FIRST + 322;
+const wxEventType wxEVT_SCROLLWIN_LINEDOWN =                wxEVT_FIRST + 323;
+const wxEventType wxEVT_SCROLLWIN_PAGEUP =                  wxEVT_FIRST + 324;
+const wxEventType wxEVT_SCROLLWIN_PAGEDOWN =                wxEVT_FIRST + 325;
+const wxEventType wxEVT_SCROLLWIN_THUMBTRACK =              wxEVT_FIRST + 326;
+
+ /*
+  * System events
+  */
 const wxEventType wxEVT_SIZE =                              wxEVT_FIRST + 400;
 const wxEventType wxEVT_MOVE =                              wxEVT_FIRST + 401;
 const wxEventType wxEVT_CLOSE_WINDOW =                      wxEVT_FIRST + 402;
@@ -287,6 +304,8 @@ public:
     // exists only for optimization purposes
     bool IsCommandEvent() const { return m_isCommandEvent; }
 
+    void CopyObject(wxObject& object_dest) const;
+
 public:
     bool              m_skipped;
     wxObject*         m_eventObject;
@@ -346,8 +365,8 @@ public:
     int GetSelection() const { return m_commandInt; }
 
     // Set/Get listbox/choice selection string
-    void SetString(char* s) { m_commandString = s; }
-    char *GetString() const { return m_commandString; }
+    void SetString(const wxString& s) { m_commandString = s; }
+    wxString GetString() const { return m_commandString; }
 
     // Get checkbox value
     bool Checked() const { return (m_commandInt != 0); }
@@ -361,8 +380,10 @@ public:
     void SetInt(int i) { m_commandInt = i; }
     long GetInt() const { return m_commandInt ; }
 
+    void CopyObject(wxObject& obj) const;
+
 public:
-    char*             m_commandString; // String event argument
+    wxString          m_commandString; // String event argument
     int               m_commandInt;
     long              m_extraLong;     // Additional information (e.g. select/deselect)
     void*             m_clientData;    // Arbitrary client data
@@ -389,7 +410,8 @@ private:
     DECLARE_DYNAMIC_CLASS(wxNotifyEvent)
 };
 
-// Scroll event class
+// Scroll event class, derived form wxCommandEvent. wxScrollEvents are
+// sent by wxSlider and wxScrollbar.
 /*
  wxEVT_SCROLL_TOP
  wxEVT_SCROLL_BOTTOM
@@ -420,6 +442,41 @@ public:
     void SetPosition(int pos) { m_commandInt = pos; }
 };
 
+// ScrollWin event class, derived fom wxEvent. wxScrollWinEvents
+// are sent by wxWindow.
+/*
+ wxEVT_SCROLLWIN_TOP
+ wxEVT_SCROLLWIN_BOTTOM
+ wxEVT_SCROLLWIN_LINEUP
+ wxEVT_SCROLLWIN_LINEDOWN
+ wxEVT_SCROLLWIN_PAGEUP
+ wxEVT_SCROLLWIN_PAGEDOWN
+ wxEVT_SCROLLWIN_THUMBTRACK
+*/
+
+class WXDLLEXPORT wxScrollWinEvent : public wxEvent
+{
+    DECLARE_DYNAMIC_CLASS(wxScrollWinEvent)
+
+public:
+    wxScrollWinEvent(wxEventType commandType = wxEVT_NULL,
+                     int pos = 0, int orient = 0);
+    ~wxScrollWinEvent() {}
+
+    /*
+     * Accessors
+     */
+
+    int GetOrientation() const { return (int) m_extraLong ; }
+    int GetPosition() const { return m_commandInt ; }
+    void SetOrientation(int orient) { m_extraLong = (long) orient; }
+    void SetPosition(int pos) { m_commandInt = pos; }
+
+public:
+    int               m_commandInt;    // Additional information
+    long              m_extraLong;     
+};
+
 // Mouse event class
 
 /*
@@ -517,6 +574,7 @@ public:
     bool Leaving() const { return (m_eventType == wxEVT_LEAVE_WINDOW); }
 
     // Find the position of the event
+    void GetPosition(long *xpos, long *ypos) const { *xpos = m_x; *ypos = m_y; }
     void Position(long *xpos, long *ypos) const { *xpos = m_x; *ypos = m_y; }
 
     // Find the position of the event
@@ -539,6 +597,8 @@ public:
     // Get Y position
     long GetY() const { return m_y; }
 
+    void CopyObject(wxObject& obj) const;
+
 public:
     long          m_x;
     long          m_y;
@@ -575,18 +635,20 @@ public:
     bool ShiftDown() const { return m_shiftDown; }
     long KeyCode() const { return m_keyCode; }
 
-#if WXWIN_COMPATIBILITY
     // Find the position of the event
-    void Position(float *xpos, float *ypos) const
-        { *xpos = (float)m_x; *ypos = (float)m_y; }
+    void GetPosition(long *xpos, long *ypos) const
+        { *xpos = m_x; *ypos = m_y; }
+
+    wxPoint GetPosition() const
+        { return wxPoint(m_x, m_y); }
 
     // Get X position
-    float GetX() const { return (float)m_x; }
+    long GetX() const { return m_x; }
 
     // Get Y position
-    float GetY() const { return (float)m_y; }
+    long GetY() const { return m_y; }
 
-#endif // WXWIN_COMPATIBILITY
+    void CopyObject(wxObject& obj) const;
 
 public:
     long          m_x;
@@ -596,6 +658,7 @@ public:
     bool          m_shiftDown;
     bool          m_altDown;
     bool          m_metaDown;
+    bool          m_scanCode;
 };
 
 // Size event class
@@ -616,6 +679,8 @@ public:
         { m_eventType = wxEVT_SIZE; m_id = id; }
 
     wxSize GetSize() const { return m_size; }
+
+    void CopyObject(wxObject& obj) const;
 };
 
 // Move event class
@@ -637,6 +702,8 @@ public:
         { m_eventType = wxEVT_MOVE; m_id = id; }
 
     wxPoint GetPosition() const { return m_pos; }
+
+    void CopyObject(wxObject& obj) const;
 };
 
 // Paint event class
@@ -670,6 +737,8 @@ public:
     wxEraseEvent(int Id = 0, wxDC *dc = (wxDC *) NULL)
         { m_eventType = wxEVT_ERASE_BACKGROUND; m_id = Id; m_dc = dc; }
     wxDC *GetDC() const { return m_dc; }
+
+    void CopyObject(wxObject& obj) const;
 };
 
 // Focus event class
@@ -702,6 +771,8 @@ public:
         { m_eventType = type; m_active = active; m_id = Id; }
     bool GetActive() const { return m_active; }
 
+    void CopyObject(wxObject& obj) const;
+
 private:
     bool m_active;
 };
@@ -734,13 +805,14 @@ class WXDLLEXPORT wxMenuEvent : public wxEvent
     DECLARE_DYNAMIC_CLASS(wxMenuEvent)
 
 public:
-  wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0)
-    { m_eventType = type; m_menuId = id; }
+    wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0)
+      { m_eventType = type; m_menuId = id; }
 
-  int GetMenuId() const { return m_menuId; }
+    int GetMenuId() const { return m_menuId; }
 
+    void CopyObject(wxObject& obj) const;
 private:
-  int m_menuId;
+    int m_menuId;
 };
 
 // Window close or session close event class
@@ -774,7 +846,7 @@ public:
     {
         // GetVeto() will return FALSE anyhow...
         wxCHECK_RET( m_canVeto,
-                     "call to Veto() ignored (can't veto this event)" );
+                     _T("call to Veto() ignored (can't veto this event)") );
 
         m_veto = veto;
     }
@@ -791,6 +863,8 @@ public:
     bool GetForce() const { return m_force; }
 #endif
 
+    void CopyObject(wxObject& obj) const;
+
 protected:
     bool m_loggingOff;
     bool m_veto, m_canVeto;
@@ -816,6 +890,8 @@ public:
     void SetShow(bool show) { m_show = show; }
     bool GetShow() const { return m_show; }
 
+    void CopyObject(wxObject& obj) const;
+
 protected:
     bool m_show;
 };
@@ -925,6 +1001,8 @@ public:
     bool ButtonIsDown(int but =  wxJOY_BUTTON_ANY) const
     { return (((but == wxJOY_BUTTON_ANY) && (m_buttonState != 0)) ||
             ((m_buttonState & but) == but)); }
+
+    void CopyObject(wxObject& obj) const;
 };
 
 // Drop files event class
@@ -949,6 +1027,8 @@ public:
     wxPoint GetPosition() const { return m_pos; }
     int GetNumberOfFiles() const { return m_noFiles; }
     wxString *GetFiles() const { return m_files; }
+
+    void CopyObject(wxObject& obj) const;
 };
 
 // Idle event
@@ -967,6 +1047,8 @@ public:
     void RequestMore(bool needMore = TRUE) { m_requestMore = needMore; }
     bool MoreRequested() const { return m_requestMore; }
 
+    void CopyObject(wxObject& obj) const;
+
 protected:
     bool m_requestMore;
 };
@@ -1007,6 +1089,8 @@ public:
     void Enable(bool enable) { m_enabled = enable; m_setEnabled = TRUE; }
     void SetText(const wxString& text) { m_text = text; m_setText = TRUE; }
 
+    void CopyObject(wxObject& obj) const;
+
 protected:
     bool          m_checked;
     bool          m_enabled;
@@ -1048,6 +1132,8 @@ public:
     void SetChangedWindow(wxWindow* win) { m_changedWindow = win; }
     wxWindow* GetChangedWindow() const { return m_changedWindow; }
 
+    void CopyObject(wxObject& obj) const;
+
 protected:
     wxWindow*     m_changedWindow;
 };
@@ -1069,6 +1155,8 @@ public:
     void SetPaletteRealized(bool realized) { m_paletteRealized = realized; }
     bool GetPaletteRealized() const { return m_paletteRealized; }
 
+    void CopyObject(wxObject& obj) const;
+
 protected:
     bool m_paletteRealized;
 };
@@ -1169,6 +1257,10 @@ public:
     virtual bool OnClose();
 #endif
 
+#if wxUSE_THREADS
+    bool ProcessThreadEvent(wxEvent& event);
+    void ProcessPendingEvents();
+#endif
     virtual bool ProcessEvent(wxEvent& event);
     virtual bool SearchEventTable(wxEventTable& table, wxEvent& event);
 
@@ -1186,6 +1278,10 @@ public:
 
     bool SearchDynamicEventTable( wxEvent& event );
 
+#if wxUSE_THREADS
+    void ClearEventLocker() { delete m_eventsLocker; m_eventsLocker = NULL; };
+#endif
+
 private:
     static const wxEventTableEntry         sm_eventTableEntries[];
 
@@ -1195,14 +1291,18 @@ protected:
     virtual const wxEventTable *GetEventTable() const;
 
 protected:
-    wxEvtHandler*     m_nextHandler;
-    wxEvtHandler*     m_previousHandler;
-    bool              m_enabled;           // Is event handler enabled?
-    wxList*           m_dynamicEvents;
+    wxEvtHandler*       m_nextHandler;
+    wxEvtHandler*       m_previousHandler;
+    bool                m_enabled;           // Is event handler enabled?
+    wxList*             m_dynamicEvents;
+    wxList*                m_pendingEvents;
+#if wxUSE_THREADS
+    wxCriticalSection*  m_eventsLocker;
+#endif
 
     // optimization: instead of using costly IsKindOf() to decide whether we're
     // a window (which is true in 99% of cases), use this flag
-    bool              m_isWindow;
+    bool                m_isWindow;
 };
 
 typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&);
@@ -1415,5 +1515,13 @@ const wxEventTableEntry theClass::sm_eventTableEntries[] = { \
 #define EVT_UPDATE_UI(id, func) \
  { wxEVT_UPDATE_UI, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxUpdateUIEventFunction) & func, (wxObject *) NULL },\
 
+/*
+ * Helper functions
+ */
+
+// 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);
+
 #endif
         // _WX_EVENTH__