]> git.saurik.com Git - wxWidgets.git/commitdiff
Moved client data stuff directly into wxEvtHandler, #if'd out
authorRobin Dunn <robin@alldunn.com>
Fri, 12 Oct 2001 03:18:35 +0000 (03:18 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 12 Oct 2001 03:18:35 +0000 (03:18 +0000)
wxClientDataContainer for now.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11945 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/clntdata.h
include/wx/event.h
src/common/clntdata.cpp
src/common/event.cpp

index 02e90d267c55fc9cf809ead58ef4a4055a508f3d..8f2d44ded5537c34a8f7ec872e1f5e02005bf0e8 100644 (file)
@@ -50,7 +50,7 @@ private:
 
 
 
-
+#if 0
 // This class is a mixin that provides storage and management of "client
 // data."  The client data stored can either be a pointer to a wxClientData
 // object in which case it is managed by the container (i.e.  it will delete
@@ -73,7 +73,7 @@ protected:
     // The user data: either an object which will be deleted by the container
     // when it's deleted or some raw pointer which we do nothing with - only
     // one type of data can be used with the given window (i.e. you cannot set
-    // the void data and then associate the window with wxClientData or vice
+    // the void data and then associate the container with wxClientData or vice
     // versa)
     union
     {
@@ -92,7 +92,7 @@ protected:
     wxClientDataType m_clientDataType;
 
 };
-
+#endif
 // ----------------------------------------------------------------------------
 #endif
 
index 9427bc81f97a68b2f7bec991e52261e4a56320e8..760e675e55c3293762496465464498a22105c8f0 100644 (file)
@@ -1653,7 +1653,7 @@ struct WXDLLEXPORT wxEventTable
 // wxEvtHandler: the base class for all objects handling wxWindows events
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxEvtHandler : public wxObject, public wxClientDataContainer
+class WXDLLEXPORT wxEvtHandler : public wxObject
 {
 public:
     wxEvtHandler();
@@ -1703,6 +1703,15 @@ public:
                   wxObject *userData = (wxObject *) NULL )
         { return Disconnect(id, -1, eventType, func, userData); }
 
+
+    // User data can be associated with each wxEvtHandler
+    void SetClientObject( wxClientData *data ) { DoSetClientObject(data); }
+    wxClientData *GetClientObject() const { return DoGetClientObject(); }
+
+    void SetClientData( void *data ) { DoSetClientData(data); }
+    void *GetClientData() const { return DoGetClientData(); }
+
+
     // implementation from now on
     virtual bool SearchEventTable(wxEventTable& table, wxEvent& event);
     bool SearchDynamicEventTable( wxEvent& event );
@@ -1763,6 +1772,29 @@ protected:
     // Is event handler enabled?
     bool                m_enabled;
 
+
+    // The user data: either an object which will be deleted by the container
+    // when it's deleted or some raw pointer which we do nothing with - only
+    // one type of data can be used with the given window (i.e. you cannot set
+    // the void data and then associate the container with wxClientData or vice
+    // versa)
+    union
+    {
+        wxClientData *m_clientObject;
+        void         *m_clientData;
+    };
+
+    // what kind of data do we have?
+    wxClientDataType m_clientDataType;
+
+    // client data accessors
+    virtual void DoSetClientObject( wxClientData *data );
+    virtual wxClientData *DoGetClientObject() const;
+
+    virtual void DoSetClientData( void *data );
+    virtual void *DoGetClientData() const;
+
+
 private:
     DECLARE_DYNAMIC_CLASS(wxEvtHandler)
 };
index 782f51846544b61974ca1486277127c4ccd45779..d7a984d672a0da6b6ba901173ca195c82ffccb8a 100644 (file)
@@ -24,7 +24,7 @@
 
 
 // ----------------------------------------------------------------------------
-
+#if 0
 
 wxClientDataContainer::wxClientDataContainer()
 {
@@ -81,7 +81,7 @@ void *wxClientDataContainer::DoGetClientData() const
     return m_clientData;
 }
 
-
+#endif
 // ----------------------------------------------------------------------------
 
 
index 02c63cc4fa448445bb324774dc40c5a98be95418..f75175f1654c9bce1f549674f388d7ae8b269e94 100644 (file)
@@ -761,6 +761,9 @@ wxEvtHandler::wxEvtHandler()
     m_eventsLocker = new wxCriticalSection;
 #  endif
 #endif
+    // no client data (yet)
+    m_clientData = NULL;
+    m_clientDataType = wxClientData_None;
 }
 
 wxEvtHandler::~wxEvtHandler()
@@ -798,6 +801,10 @@ wxEvtHandler::~wxEvtHandler()
     delete m_eventsLocker;
 #  endif
 #endif
+
+    // we only delete object data, not untyped
+    if ( m_clientDataType == wxClientData_Object )
+        delete m_clientObject;
 }
 
 #if wxUSE_THREADS
@@ -1171,6 +1178,48 @@ bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event )
     return FALSE;
 };
 
+void wxEvtHandler::DoSetClientObject( wxClientData *data )
+{
+    wxASSERT_MSG( m_clientDataType != wxClientData_Void,
+                  wxT("can't have both object and void client data") );
+
+    if ( m_clientObject )
+        delete m_clientObject;
+
+    m_clientObject = data;
+    m_clientDataType = wxClientData_Object;
+}
+
+wxClientData *wxEvtHandler::DoGetClientObject() const
+{
+    // it's not an error to call GetClientObject() on a window which doesn't
+    // have client data at all - NULL will be returned
+    wxASSERT_MSG( m_clientDataType != wxClientData_Void,
+                  wxT("this window doesn't have object client data") );
+
+    return m_clientObject;
+}
+
+void wxEvtHandler::DoSetClientData( void *data )
+{
+    wxASSERT_MSG( m_clientDataType != wxClientData_Object,
+                  wxT("can't have both object and void client data") );
+
+    m_clientData = data;
+    m_clientDataType = wxClientData_Void;
+}
+
+void *wxEvtHandler::DoGetClientData() const
+{
+    // it's not an error to call GetClientData() on a window which doesn't have
+    // client data at all - NULL will be returned
+    wxASSERT_MSG( m_clientDataType != wxClientData_Object,
+                  wxT("this window doesn't have void client data") );
+
+    return m_clientData;
+}
+
+
 #if WXWIN_COMPATIBILITY
 bool wxEvtHandler::OnClose()
 {