+///////////////////////////////////////////////////////////////////////////////
+// Name: dataobj.h
+// Purpose: common data object classes
+// Author: Robert Roebling, Vadim Zeitlin
+// Modified by:
+// Created: 26.05.99
+// RCS-ID: $Id$
+// Copyright: (c) wxWindows Team
+// Licence: wxWindows license
+///////////////////////////////////////////////////////////////////////////////
+
#ifndef _WX_DATAOBJ_H_BASE_
#define _WX_DATAOBJ_H_BASE_
#if defined(__WXMSW__)
-#include "wx/msw/ole/dataobj.h"
+// ----------------------------------------------------------------------------
+// wxDataFormat identifies the single format of data
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxDataFormat
+{
+public:
+ // the clipboard formats under Win32 are UINTs
+ typedef unsigned int NativeFormat;
+
+ wxDataFormat(NativeFormat format = wxDF_INVALID) { m_format = format; }
+ wxDataFormat& operator=(NativeFormat format)
+ { m_format = format; return *this; }
+
+ // defautl copy ctor/assignment operators ok
+
+ // comparison (must have both versions)
+ bool operator==(wxDataFormatId format) const
+ { return m_format == (NativeFormat)format; }
+ bool operator!=(wxDataFormatId format) const
+ { return m_format != (NativeFormat)format; }
+ bool operator==(const wxDataFormat& format) const
+ { return m_format == format.m_format; }
+ bool operator!=(const wxDataFormat& format) const
+ { return m_format != format.m_format; }
+
+ // explicit and implicit conversions to NativeFormat which is one of
+ // standard data types (implicit conversion is useful for preserving the
+ // compatibility with old code)
+ NativeFormat GetFormatId() const { return m_format; }
+ operator NativeFormat() const { return m_format; }
+
+ // this only works with standard ids
+ void SetId(wxDataFormatId format) { m_format = format; }
+
+ // string ids are used for custom types - this SetId() must be used for
+ // application-specific formats
+ wxString GetId() const;
+ void SetId(const wxChar *format);
+
+private:
+ // returns TRUE if the format is one of those defined in wxDataFormatId
+ bool IsStandard() const { return m_format > 0 && m_format < wxDF_MAX; }
+
+ NativeFormat m_format;
+};
+
+ #include "wx/msw/ole/dataobj.h"
#elif defined(__WXMOTIF__)
-#include "wx/motif/dataobj.h"
+ #include "wx/motif/dataobj.h"
#elif defined(__WXGTK__)
-#include "wx/gtk/dataobj.h"
+ #include "wx/gtk/dataobj.h"
#elif defined(__WXQT__)
-#include "wx/qt/dnd.h"
+ #include "wx/qt/dnd.h"
#elif defined(__WXMAC__)
-#include "wx/mac/dnd.h"
+ #include "wx/mac/dnd.h"
#elif defined(__WXSTUBS__)
-#include "wx/stubs/dnd.h"
+ #include "wx/stubs/dnd.h"
+#endif
+
+// ---------------------------------------------------------------------------
+// wxPrivateDataObject is a specialization of wxDataObject for app specific
+// data (of some given kind, derive directly from wxDataObject if you wish to
+// efficiently support multiple formats)
+// ---------------------------------------------------------------------------
+
+class WXDLLEXPORT wxPrivateDataObject : public wxDataObject
+{
+#ifdef __WXGTK__
+ DECLARE_DYNAMIC_CLASS( wxPrivateDataObject )
#endif
+public:
+ wxPrivateDataObject();
+ virtual ~wxPrivateDataObject() { Free(); }
+
+ // get the format object - it is used to decide whether we support the
+ // given output format or not
+ wxDataFormat& GetFormat() { return m_format; }
+
+ // set data. will make copy of the data
+ void SetData( const void *data, size_t size );
+
+ // returns pointer to data
+ void *GetData() const { return m_data; }
+
+ // get the size of the data
+ virtual size_t GetSize() const;
+
+ // copy data to the given buffer
+ virtual void WriteData( void *dest ) const;
+
+ // these functions are provided for wxGTK compatibility, their usage is
+ // deprecated - use GetFormat().SetId() instead
+ void SetId( const wxString& id ) { m_format.SetId(id); }
+ wxString GetId() const { return m_format.GetId(); }
+
+ // implement the base class pure virtuals
+ virtual wxDataFormat GetPreferredFormat() const
+ { return m_format; }
+ virtual bool IsSupportedFormat(wxDataFormat format) const
+ { return m_format == format; }
+ virtual size_t GetDataSize() const
+ { return m_size; }
+ virtual void GetDataHere(void *dest) const
+ { WriteData(dest); }
+
+ // the function which really copies the data - called by WriteData() above
+ // and uses GetSize() to get the size of the data
+ void WriteData( const void *data, void *dest ) const;
+
+private:
+ // free the data
+ inline void Free();
+
+ // the data
+ size_t m_size;
+ void *m_data;
+
+ // the data format
+ wxDataFormat m_format;
+};
+
+
#endif
// _WX_DATAOBJ_H_BASE_