///////////////////////////////////////////////////////////////////////////// // Name: wx/clntdata.h // Purpose: A mixin class for holding a wxClientData or void pointer // Author: Robin Dunn // Modified by: // Created: 9-Oct-2001 // RCS-ID: $Id$ // Copyright: (c) wxWindows team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_CLNTDATAH__ #define _WX_CLNTDATAH__ #ifdef __GNUG__ #pragma interface "clntdata.h" #endif #include "wx/defs.h" #include "wx/string.h" // ---------------------------------------------------------------------------- // what kind of client data do we have? enum wxClientDataType { wxClientData_None, // we don't know yet because we don't have it at all wxClientData_Object, // our client data is typed and we own it wxClientData_Void // client data is untyped and we don't own it }; class WXDLLEXPORT wxClientData { public: wxClientData() { } virtual ~wxClientData() { } }; class WXDLLEXPORT wxStringClientData : public wxClientData { public: wxStringClientData() { } wxStringClientData( const wxString &data ) : m_data(data) { } void SetData( const wxString &data ) { m_data = data; } const wxString& GetData() const { return m_data; } private: wxString m_data; }; // 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 // the data when it's destroyed) or an untyped pointer which won't be deleted // by the container - but not both of them // // NOTE: This functionality is currently duplicated in wxEvtHandler in order // to avoid having more than one vtable in that class heirachy. class WXDLLEXPORT wxClientDataContainer { public: wxClientDataContainer(); virtual ~wxClientDataContainer(); void SetClientObject( wxClientData *data ) { DoSetClientObject(data); } wxClientData *GetClientObject() const { return DoGetClientObject(); } void SetClientData( void *data ) { DoSetClientData(data); } void *GetClientData() const { return DoGetClientData(); } 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 container with wxClientData or vice // versa) union { wxClientData *m_clientObject; void *m_clientData; }; // client data accessors virtual void DoSetClientObject( wxClientData *data ); virtual wxClientData *DoGetClientObject() const; virtual void DoSetClientData( void *data ); virtual void *DoGetClientData() const; // what kind of data do we have? wxClientDataType m_clientDataType; }; // ---------------------------------------------------------------------------- #endif