]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/event.h
Compile fix for wxFileName.
[wxWidgets.git] / include / wx / event.h
index 67958bb136c5e0e38483f924fe9ee282295927e8..2a2f03b2e3a6204119f7cd83b4def8fcfba0e073 100644 (file)
@@ -224,26 +224,27 @@ BEGIN_DECLARE_EVENT_TYPES()
     DECLARE_EVENT_TYPE(wxEVT_ERASE_BACKGROUND, 417)
     DECLARE_EVENT_TYPE(wxEVT_NC_PAINT, 418)
     DECLARE_EVENT_TYPE(wxEVT_PAINT_ICON, 419)
-    DECLARE_EVENT_TYPE(wxEVT_MENU_CHAR, 420)
-    DECLARE_EVENT_TYPE(wxEVT_MENU_INIT, 421)
+    DECLARE_EVENT_TYPE(wxEVT_MENU_OPEN, 420)
+    DECLARE_EVENT_TYPE(wxEVT_MENU_CLOSE, 421)
     DECLARE_EVENT_TYPE(wxEVT_MENU_HIGHLIGHT, 422)
-    DECLARE_EVENT_TYPE(wxEVT_POPUP_MENU_INIT, 423)
+    // DECLARE_EVENT_TYPE(wxEVT_POPUP_MENU_INIT, 423) -- free slot
     DECLARE_EVENT_TYPE(wxEVT_CONTEXT_MENU, 424)
     DECLARE_EVENT_TYPE(wxEVT_SYS_COLOUR_CHANGED, 425)
-    DECLARE_EVENT_TYPE(wxEVT_SETTING_CHANGED, 426)
-    DECLARE_EVENT_TYPE(wxEVT_QUERY_NEW_PALETTE, 427)
-    DECLARE_EVENT_TYPE(wxEVT_PALETTE_CHANGED, 428)
-    DECLARE_EVENT_TYPE(wxEVT_JOY_BUTTON_DOWN, 429)
-    DECLARE_EVENT_TYPE(wxEVT_JOY_BUTTON_UP, 430)
-    DECLARE_EVENT_TYPE(wxEVT_JOY_MOVE, 431)
-    DECLARE_EVENT_TYPE(wxEVT_JOY_ZMOVE, 432)
-    DECLARE_EVENT_TYPE(wxEVT_DROP_FILES, 433)
-    DECLARE_EVENT_TYPE(wxEVT_DRAW_ITEM, 434)
-    DECLARE_EVENT_TYPE(wxEVT_MEASURE_ITEM, 435)
-    DECLARE_EVENT_TYPE(wxEVT_COMPARE_ITEM, 436)
-    DECLARE_EVENT_TYPE(wxEVT_INIT_DIALOG, 437)
-    DECLARE_EVENT_TYPE(wxEVT_IDLE, 438)
-    DECLARE_EVENT_TYPE(wxEVT_UPDATE_UI, 439)
+    DECLARE_EVENT_TYPE(wxEVT_DISPLAY_CHANGED, 426)
+    DECLARE_EVENT_TYPE(wxEVT_SETTING_CHANGED, 427)
+    DECLARE_EVENT_TYPE(wxEVT_QUERY_NEW_PALETTE, 428)
+    DECLARE_EVENT_TYPE(wxEVT_PALETTE_CHANGED, 429)
+    DECLARE_EVENT_TYPE(wxEVT_JOY_BUTTON_DOWN, 430)
+    DECLARE_EVENT_TYPE(wxEVT_JOY_BUTTON_UP, 431)
+    DECLARE_EVENT_TYPE(wxEVT_JOY_MOVE, 432)
+    DECLARE_EVENT_TYPE(wxEVT_JOY_ZMOVE, 433)
+    DECLARE_EVENT_TYPE(wxEVT_DROP_FILES, 434)
+    DECLARE_EVENT_TYPE(wxEVT_DRAW_ITEM, 435)
+    DECLARE_EVENT_TYPE(wxEVT_MEASURE_ITEM, 436)
+    DECLARE_EVENT_TYPE(wxEVT_COMPARE_ITEM, 437)
+    DECLARE_EVENT_TYPE(wxEVT_INIT_DIALOG, 438)
+    DECLARE_EVENT_TYPE(wxEVT_IDLE, 439)
+    DECLARE_EVENT_TYPE(wxEVT_UPDATE_UI, 440)
 
         // Generic command events
         // Note: a click is a higher-level event than button down/up
@@ -359,8 +360,10 @@ public:
     // exists only for optimization purposes.
     bool IsCommandEvent() const { return m_isCommandEvent; }
 
-    // specialized clone function since it is done a lot
-    virtual wxEvent *Clone() const { return new wxEvent(*this); }
+    // this function is used to create a copy of the event polymorphically and
+    // all derived classes must implement it because otherwise wxPostEvent()
+    // for them wouldn't work (it needs to do a copy of the event)
+    virtual wxEvent *Clone() const = 0;
 
 public:
     wxObject*         m_eventObject;
@@ -440,7 +443,7 @@ public:
     long              m_extraLong;     // Additional information (e.g. select/deselect)
     void*             m_clientData;    // Arbitrary client data
     wxClientData*     m_clientObject;  // Arbitrary client object
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxCommandEvent)
 };
@@ -494,9 +497,9 @@ public:
     int GetPosition() const { return m_commandInt ; }
     void SetOrientation(int orient) { m_extraLong = (long) orient; }
     void SetPosition(int pos) { m_commandInt = pos; }
-    
+
     virtual wxEvent *Clone() const { return new wxScrollEvent(*this); }
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxScrollEvent)
 };
@@ -743,11 +746,11 @@ public:
     bool HasCursor() const { return m_cursor.Ok(); }
 
     virtual wxEvent *Clone() const { return new wxSetCursorEvent(*this); }
-    
+
 private:
     wxCoord  m_x, m_y;
     wxCursor m_cursor;
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxSetCursorEvent)
 };
@@ -808,7 +811,25 @@ public:
     long KeyCode() const { return m_keyCode; }
 
     virtual wxEvent *Clone() const { return new wxKeyEvent(*this); }
-    
+
+    // we do need to copy wxKeyEvent sometimes (in wxTreeCtrl code, for
+    // example)
+    wxKeyEvent& operator=(const wxKeyEvent& evt)
+    {
+        m_x = evt.m_x;
+        m_y = evt.m_y;
+
+        m_keyCode = evt.m_keyCode;
+
+        m_controlDown = evt.m_controlDown;
+        m_shiftDown = evt.m_shiftDown;
+        m_altDown = evt.m_altDown;
+        m_metaDown = evt.m_metaDown;
+        m_scanCode = evt.m_scanCode;
+
+        return *this;
+    }
+
 public:
     wxCoord       m_x, m_y;
 
@@ -819,7 +840,7 @@ public:
     bool          m_altDown;
     bool          m_metaDown;
     bool          m_scanCode;
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxKeyEvent)
 };
@@ -844,7 +865,7 @@ public:
 public:
     wxSize m_size;
 
-private:    
+private:
     DECLARE_DYNAMIC_CLASS(wxSizeEvent)
 };
 
@@ -865,9 +886,9 @@ public:
     wxPoint GetPosition() const { return m_pos; }
 
     virtual wxEvent *Clone() const { return new wxMoveEvent(*this); }
-    
+
     wxPoint m_pos;
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxMoveEvent)
 };
@@ -906,7 +927,7 @@ public:
 #endif // debug
 
     virtual wxEvent *Clone() const { return new wxPaintEvent(*this); }
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxPaintEvent)
 };
@@ -915,7 +936,7 @@ class WXDLLEXPORT wxNcPaintEvent : public wxEvent
 {
 public:
     wxNcPaintEvent(int id = 0) : wxEvent(id) { SetEventType(wxEVT_NC_PAINT); }
-    
+
     virtual wxEvent *Clone() const { return new wxNcPaintEvent(*this); }
 
 private:
@@ -932,11 +953,11 @@ class WXDLLEXPORT wxEraseEvent : public wxEvent
 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; }
 
     virtual wxEvent *Clone() const { return new wxEraseEvent(*this); }
-    
+
     wxDC *m_dc;
 
 private:
@@ -962,7 +983,7 @@ public:
     void SetWindow(wxWindow *win) { m_win = win; }
 
     virtual wxEvent *Clone() const { return new wxFocusEvent(*this); }
-    
+
 private:
     wxWindow *m_win;
 
@@ -980,7 +1001,7 @@ public:
     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
 
     virtual wxEvent *Clone() const { return new wxChildFocusEvent(*this); }
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxChildFocusEvent)
 };
@@ -996,7 +1017,7 @@ class WXDLLEXPORT wxActivateEvent : public wxEvent
 public:
     wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = TRUE, int Id = 0)
         { m_eventType = type; m_active = active; m_id = Id; }
-        
+
     bool GetActive() const { return m_active; }
 
     virtual wxEvent *Clone() const { return new wxActivateEvent(*this); }
@@ -1020,33 +1041,36 @@ public:
         { m_eventType = wxEVT_INIT_DIALOG; m_id = Id; }
 
     virtual wxEvent *Clone() const { return new wxInitDialogEvent(*this); }
-    
-private:        
+
+private:
     DECLARE_DYNAMIC_CLASS(wxInitDialogEvent)
 };
 
 // Miscellaneous menu event class
 /*
- wxEVT_MENU_CHAR,
- wxEVT_MENU_INIT,
+ wxEVT_MENU_OPEN,
+ wxEVT_MENU_CLOSE,
  wxEVT_MENU_HIGHLIGHT,
- wxEVT_POPUP_MENU_INIT,
 */
 
 class WXDLLEXPORT wxMenuEvent : public wxEvent
 {
 public:
     wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0)
-      { m_eventType = type; m_menuId = id; m_id = id; }
+        : wxEvent(id, type)
+        { m_menuId = id; }
 
+    // only for wxEVT_MENU_HIGHLIGHT
     int GetMenuId() const { return m_menuId; }
 
+    // only for wxEVT_MENU_OPEN/CLOSE
+    bool IsPopup() const { return m_menuId == -1; }
+
     virtual wxEvent *Clone() const { return new wxMenuEvent(*this); }
-    
+
 private:
     int m_menuId;
-    
-private:
+
     DECLARE_DYNAMIC_CLASS(wxMenuEvent)
 };
 
@@ -1147,7 +1171,7 @@ public:
     bool Iconized() const { return m_iconized; }
 
     virtual wxEvent *Clone() const { return new wxIconizeEvent(*this); }
-    
+
 protected:
     bool m_iconized;
 
@@ -1165,7 +1189,7 @@ public:
         { m_eventType = wxEVT_MAXIMIZE; m_id = id; }
 
     virtual wxEvent *Clone() const { return new wxMaximizeEvent(*this); }
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxMaximizeEvent)
 };
@@ -1249,7 +1273,7 @@ public:
             ((m_buttonState & but) == but)); }
 
     virtual wxEvent *Clone() const { return new wxJoystickEvent(*this); }
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxJoystickEvent)
 };
@@ -1264,19 +1288,36 @@ class WXDLLEXPORT wxDropFilesEvent : public wxEvent
 public:
     int       m_noFiles;
     wxPoint   m_pos;
-    wxString* m_files;        // Memory (de)allocated by code calling ProcessEvent
+    wxString* m_files;
 
     wxDropFilesEvent(wxEventType type = wxEVT_NULL,
                      int noFiles = 0,
                      wxString *files = (wxString *) NULL)
         { m_eventType = type; m_noFiles = noFiles; m_files = files; }
 
+    // we need a copy ctor to avoid deleting m_files pointer twice
+    wxDropFilesEvent(const wxDropFilesEvent& other)
+        : m_pos(other.m_pos)
+    {
+        m_noFiles = other.m_noFiles;
+        m_files = new wxString[m_noFiles];
+        for ( int n = 0; n < m_noFiles; n++ )
+        {
+            m_files[n] = other.m_files[n];
+        }
+    }
+
+    virtual ~wxDropFilesEvent()
+    {
+        delete [] m_files;
+    }
+
     wxPoint GetPosition() const { return m_pos; }
     int GetNumberOfFiles() const { return m_noFiles; }
     wxString *GetFiles() const { return m_files; }
 
-    virtual wxEvent *Clone() const { wxFAIL_MSG("error"); return NULL; }
-    
+    virtual wxEvent *Clone() const { return new wxDropFilesEvent(*this); }
+
 private:
     DECLARE_DYNAMIC_CLASS(wxDropFilesEvent)
 };
@@ -1321,7 +1362,7 @@ protected:
     bool          m_setText;
     bool          m_setChecked;
     wxString      m_text;
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxUpdateUIEvent)
 };
@@ -1336,13 +1377,28 @@ class WXDLLEXPORT wxSysColourChangedEvent : public wxEvent
 public:
     wxSysColourChangedEvent()
         { m_eventType = wxEVT_SYS_COLOUR_CHANGED; }
-        
+
     virtual wxEvent *Clone() const { return new wxSysColourChangedEvent(*this); }
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxSysColourChangedEvent)
 };
 
+/*
+ wxEVT_DISPLAY_CHANGED
+ */
+class WXDLLEXPORT wxDisplayChangedEvent : public wxEvent
+{
+private:
+    DECLARE_DYNAMIC_CLASS(wxDisplayChangedEvent)
+
+public:
+    wxDisplayChangedEvent()
+        { m_eventType = wxEVT_DISPLAY_CHANGED; }
+
+    virtual wxEvent *Clone() const { return new wxDisplayChangedEvent(*this); }
+};
+
 /*
  wxEVT_PALETTE_CHANGED
  */
@@ -1387,7 +1443,7 @@ public:
 
 protected:
     bool m_paletteRealized;
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxQueryNewPaletteEvent)
 };
@@ -1467,9 +1523,9 @@ public:
     wxWindowCreateEvent(wxWindow *win = NULL);
 
     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
-    
+
     virtual wxEvent *Clone() const { return new wxWindowCreateEvent(*this); }
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxWindowCreateEvent)
 };
@@ -1480,7 +1536,7 @@ public:
     wxWindowDestroyEvent(wxWindow *win = NULL);
 
     wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
-    
+
     virtual wxEvent *Clone() const { return new wxWindowDestroyEvent(*this); }
 
 private:
@@ -1518,7 +1574,7 @@ public:
     void SetTarget(const wxString& target) { m_target = target; }
 
     virtual wxEvent *Clone() const { return new wxHelpEvent(*this); }
-    
+
 protected:
     wxPoint   m_pos;
     wxString  m_target;
@@ -1553,7 +1609,7 @@ public:
     void SetPosition(const wxPoint& pos) { m_pos = pos; }
 
     virtual wxEvent *Clone() const { return new wxContextMenuEvent(*this); }
-    
+
 protected:
     wxPoint   m_pos;
 
@@ -1579,7 +1635,7 @@ public:
 
 protected:
     bool m_requestMore;
-    
+
 private:
     DECLARE_DYNAMIC_CLASS(wxIdleEvent)
 };
@@ -1838,8 +1894,8 @@ protected:
     virtual void DoSetClientData( void *data );
     virtual void *DoGetClientData() const;
 
-
 private:
+    DECLARE_NO_COPY_CLASS(wxEvtHandler)
     DECLARE_DYNAMIC_CLASS(wxEvtHandler)
 };
 
@@ -1862,6 +1918,7 @@ typedef void (wxEvtHandler::*wxJoystickEventFunction)(wxJoystickEvent&);
 typedef void (wxEvtHandler::*wxDropFilesEventFunction)(wxDropFilesEvent&);
 typedef void (wxEvtHandler::*wxInitDialogEventFunction)(wxInitDialogEvent&);
 typedef void (wxEvtHandler::*wxSysColourChangedFunction)(wxSysColourChangedEvent&);
+typedef void (wxEvtHandler::*wxDisplayChangedFunction)(wxDisplayChangedEvent&);
 typedef void (wxEvtHandler::*wxUpdateUIEventFunction)(wxUpdateUIEvent&);
 typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&);
 typedef void (wxEvtHandler::*wxCloseEventFunction)(wxCloseEvent&);
@@ -1919,6 +1976,8 @@ typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&);
 #define EVT_KEY_DOWN(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_DOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ),
 #define EVT_KEY_UP(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_KEY_UP, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, (wxObject *) NULL ),
 #define EVT_CHAR_HOOK(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_CHAR_HOOK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCharEventFunction) & func, NULL ),
+#define EVT_MENU_OPEN(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_OPEN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
+#define EVT_MENU_CLOSE(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_CLOSE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
 #define EVT_MENU_HIGHLIGHT(id, func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
 #define EVT_MENU_HIGHLIGHT_ALL(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_MENU_HIGHLIGHT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMenuEventFunction) & func, (wxObject *) NULL ),
 #define EVT_SET_FOCUS(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SET_FOCUS, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxFocusEventFunction) & func, (wxObject *) NULL ),
@@ -1931,6 +1990,7 @@ typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&);
 #define EVT_DROP_FILES(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_DROP_FILES, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxDropFilesEventFunction) & func, (wxObject *) NULL ),
 #define EVT_INIT_DIALOG(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_INIT_DIALOG, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxInitDialogEventFunction) & func, (wxObject *) NULL ),
 #define EVT_SYS_COLOUR_CHANGED(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_SYS_COLOUR_CHANGED, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxSysColourChangedFunction) & func, (wxObject *) NULL ),
+#define EVT_DISPLAY_CHANGED(func)  DECLARE_EVENT_TABLE_ENTRY( wxEVT_DISPLAY_CHANGED, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxDisplayChangedFunction) & func, (wxObject *) NULL ),
 #define EVT_SHOW(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_SHOW, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxShowEventFunction) & func, (wxObject *) NULL ),
 #define EVT_MAXIMIZE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MAXIMIZE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxMaximizeEventFunction) & func, (wxObject *) NULL ),
 #define EVT_ICONIZE(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_ICONIZE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxIconizeEventFunction) & func, (wxObject *) NULL ),