1 ///////////////////////////////////////////////////////////////////////////////
3 // Purpose: declaration of the wxDataObject class
4 // Author: Vadim Zeitlin
8 // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_OLEDATAOBJ_H
13 #define _WX_OLEDATAOBJ_H
15 // ----------------------------------------------------------------------------
16 // forward declarations
17 // ----------------------------------------------------------------------------
20 // ----------------------------------------------------------------------------
21 // wxDataObject is a "smart" and polymorphic piece of data.
23 // @@@ it's currently "read-only" from COM point of view, i.e. we don't support
24 // SetData. We don't support all advise functions neither (but it's easy to
25 // do if we really want them)
26 // ----------------------------------------------------------------------------
28 class WXDLLEXPORT wxDataObject
31 // all data formats (values are the same as in windows.h, do not change!)
54 // function to return symbolic name of clipboard format (debug messages)
55 static const char *GetFormatName(wxDataFormat format
);
61 // pure virtuals to override
62 // get the best suited format for our data
63 virtual wxDataFormat
GetPreferredFormat() const = 0;
64 // decide if we support this format (should be one of values of
65 // StdFormat enumerations or a user-defined format)
66 virtual bool IsSupportedFormat(wxDataFormat format
) const = 0;
67 // get the (total) size of data
68 virtual size_t GetDataSize() const = 0;
69 // copy raw data to provided pointer
70 virtual void GetDataHere(void *pBuf
) const = 0;
73 // retrieve IDataObject interface (for other OLE related classes)
74 IDataObject
*GetInterface() const { return m_pIDataObject
; }
76 ////// wxGTK compatibility: hopefully to become the preferred API.
77 virtual wxDataFormat
GetFormat() const { return GetPreferredFormat(); }
80 IDataObject
*m_pIDataObject
; // pointer to the COM interface
83 // ----------------------------------------------------------------------------
84 // wxTextDataObject is a specialization of wxDataObject for text data
85 // ----------------------------------------------------------------------------
86 class WXDLLEXPORT wxTextDataObject
: public wxDataObject
90 wxTextDataObject() { }
91 wxTextDataObject(const wxString
& strText
) : m_strText(strText
) { }
92 void Init(const wxString
& strText
) { m_strText
= strText
; }
94 // implement base class pure virtuals
95 virtual wxDataFormat
GetPreferredFormat() const
96 { return (wxDataFormat
) wxDataObject::Text
; }
97 virtual bool IsSupportedFormat(wxDataFormat format
) const
98 { return format
== wxDataObject::Text
|| format
== wxDataObject::Locale
; }
99 virtual size_t GetDataSize() const
100 { return m_strText
.Len() + 1; } // +1 for trailing '\0'of course
101 virtual void GetDataHere(void *pBuf
) const
102 { memcpy(pBuf
, m_strText
.c_str(), GetDataSize()); }
104 ////// wxGTK compatibility: hopefully to become the preferred API.
105 void SetText(const wxString
& strText
) { m_strText
= strText
; }
106 wxString
GetText() const { return m_strText
; }
107 virtual wxDataFormat
GetFormat() const { return wxDF_TEXT
; }
113 // ----------------------------------------------------------------------------
114 // @@@ TODO: wx{Bitmap|Metafile|...}DataObject
115 // ----------------------------------------------------------------------------
117 // ----------------------------------------------------------------------------
118 // wxBitmapDataObject is a specialization of wxDataObject for bitmap data
119 // ----------------------------------------------------------------------------
121 // TODO: implement OLE side of things. At present, it's just for clipboard
123 class WXDLLEXPORT wxBitmapDataObject
: public wxDataObject
127 wxBitmapDataObject() {};
128 wxBitmapDataObject(const wxBitmap
& bitmap
): m_bitmap(bitmap
) {}
129 void SetBitmap(const wxBitmap
& bitmap
) { m_bitmap
= bitmap
; }
130 wxBitmap
GetBitmap() const { return m_bitmap
; }
132 virtual wxDataFormat
GetFormat() const { return wxDF_BITMAP
; }
135 // implement base class pure virtuals
136 virtual wxDataFormat GetPreferredFormat() const
137 { return (wxDataFormat) wxDataObject::Text; }
138 virtual bool IsSupportedFormat(wxDataFormat format) const
139 { return format == wxDataObject::Text || format == wxDataObject::Locale; }
140 virtual size_t GetDataSize() const
141 { return m_strText.Len() + 1; } // +1 for trailing '\0'of course
142 virtual void GetDataHere(void *pBuf) const
143 { memcpy(pBuf, m_strText.c_str(), GetDataSize()); }
150 // ----------------------------------------------------------------------------
151 // wxMetaFileDataObject: see metafile.h is a specialization of wxDataObject for bitmap data
152 // ----------------------------------------------------------------------------
154 // TODO: wxFileDataObject.
156 #endif //_WX_OLEDATAOBJ_H