--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: ole/dataobj.h
+// Purpose: declaration of the wxDataObject class
+// Author: Vadim Zeitlin
+// Modified by:
+// Created: 10.05.98
+// RCS-ID: $Id$
+// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
+// Licence: wxWindows license
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OLEDATAOBJ_H
+#define _OLEDATAOBJ_H
+
+// ----------------------------------------------------------------------------
+// forward declarations
+// ----------------------------------------------------------------------------
+struct IDataObject;
+
+// ----------------------------------------------------------------------------
+// wxDataObject is a "smart" and polymorphic piece of data.
+//
+// @@@ it's currently "read-only" from COM point of view, i.e. we don't support
+// SetData. We don't support all advise functions neither (but it's easy to
+// do if we really want them)
+// ----------------------------------------------------------------------------
+
+class wxDataObject
+{
+public:
+ // all data formats (values are the same as in windows.h, do not change!)
+ enum StdFormat
+ {
+ Invalid,
+ Text,
+ Bitmap,
+ MetafilePict,
+ Sylk,
+ Dif,
+ Tiff,
+ OemText,
+ Dib,
+ Palette,
+ Pendata,
+ Riff,
+ Wave,
+ UnicodeText,
+ EnhMetafile,
+ Hdrop,
+ Locale,
+ Max
+ };
+
+ #ifdef __DEBUG__
+ // function to return symbolic name of clipboard format (debug messages)
+ static const char *GetFormatName(wxDataFormat format);
+ #endif
+
+ // ctor & dtor
+ wxDataObject();
+ ~wxDataObject();
+
+ // pure virtuals to override
+ // get the best suited format for our data
+ virtual wxDataFormat GetPreferredFormat() const = 0;
+ // decide if we support this format (should be one of values of
+ // StdFormat enumerations or a user-defined format)
+ virtual bool IsSupportedFormat(wxDataFormat format) const = 0;
+ // get the (total) size of data
+ virtual uint GetDataSize() const = 0;
+ // copy raw data to provided pointer
+ virtual void GetDataHere(void *pBuf) const = 0;
+
+ // accessors
+ // retrieve IDataObject interface (for other OLE related classes)
+ IDataObject *GetInterface() const { return m_pIDataObject; }
+
+private:
+ IDataObject *m_pIDataObject; // pointer to the COM interface
+};
+
+// ----------------------------------------------------------------------------
+// wxTextDataObject is a specialization of wxDataObject for text data
+// ----------------------------------------------------------------------------
+class wxTextDataObject : public wxDataObject
+{
+public:
+ // ctors
+ wxTextDataObject();
+ wxTextDataObject(const wxString& strText) : m_strText(strText) { }
+ void Init(const wxString& strText) { m_strText = strText; }
+
+ // implement base class pure virtuals
+ virtual wxDataFormat GetPreferredFormat() const
+ { return wxDataObject::Text; }
+ virtual bool IsSupportedFormat(wxDataFormat format) const
+ { return format == wxDataObject::Text || format == wxDataObject::Locale; }
+ virtual uint GetDataSize() const
+ { return m_strText.Len() + 1; } // +1 for trailing '\0'of course
+ virtual void GetDataHere(void *pBuf) const
+ { memcpy(pBuf, m_strText.c_str(), GetDataSize()); }
+
+private:
+ wxString m_strText;
+};
+
+// ----------------------------------------------------------------------------
+// @@@ TODO: wx{Bitmap|Metafile|...}DataObject
+// ----------------------------------------------------------------------------
+
+#endif //_OLEDATAOBJ_H
\ No newline at end of file
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: ole/dropsrc.h
+// Purpose: declaration of the wxDropSource class
+// Author: Vadim Zeitlin
+// Modified by:
+// Created: 06.03.98
+// RCS-ID: $Id$
+// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
+// Licence: wxWindows license
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OLEDROPSRC_H
+#define _OLEDROPSRC_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#if !USE_DRAG_AND_DROP
+ #error "You should #define USE_DRAG_AND_DROP to 1 to compile this file!"
+#endif //WX_DRAG_DROP
+
+// ----------------------------------------------------------------------------
+// forward declarations
+// ----------------------------------------------------------------------------
+class wxIDropSource;
+class wxDataObject;
+
+// ----------------------------------------------------------------------------
+// wxDropSource is used to start the drag-&-drop operation on associated
+// wxDataObject object. It's responsible for giving UI feedback while dragging.
+// ----------------------------------------------------------------------------
+class wxDropSource
+{
+public:
+ enum DragResult
+ {
+ Error, // error prevented the d&d operation from completing
+ None, // drag target didn't accept the data
+ Copy, // the data was successfully copied
+ Move, // the data was successfully moved
+ Cancel // the operation was cancelled by user (not an error)
+ };
+
+ // ctors: if you use default ctor you must call SetData() later!
+ wxDropSource();
+ wxDropSource(wxDataObject& data);
+
+ void SetData(wxDataObject& data);
+
+ virtual ~wxDropSource();
+
+ // do it (call this in response to a mouse button press, for example)
+ // params: if bAllowMove is false, data can be only copied
+ DragResult DoDragDrop(bool bAllowMove = false);
+
+ // overridable: you may give some custom UI feedback during d&d operation
+ // in this function (it's called on each mouse move, so it shouldn't be too
+ // slow). Just return false if you want default feedback.
+ virtual bool GiveFeedback(DragResult effect, bool bScrolling);
+
+protected:
+ void Init();
+
+ wxDataObject *m_pData; // pointer to associated data object
+
+private:
+ wxIDropSource *m_pIDropSource; // the pointer to COM interface
+};
+
+#endif //_OLEDROPSRC_H
\ No newline at end of file