From 1737035fb878c6fd62c69057a027280d60be1d5a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 27 May 1998 23:24:11 +0000 Subject: [PATCH] wxDataObject and wxDropSource classes for (more) d&d support git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/ole/dataobj.h | 111 +++++++++++++++++++++++++++++++++++ include/wx/msw/ole/dropsrc.h | 71 ++++++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 include/wx/msw/ole/dataobj.h create mode 100644 include/wx/msw/ole/dropsrc.h diff --git a/include/wx/msw/ole/dataobj.h b/include/wx/msw/ole/dataobj.h new file mode 100644 index 0000000000..cdad68606c --- /dev/null +++ b/include/wx/msw/ole/dataobj.h @@ -0,0 +1,111 @@ +/////////////////////////////////////////////////////////////////////////////// +// 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 +// 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 diff --git a/include/wx/msw/ole/dropsrc.h b/include/wx/msw/ole/dropsrc.h new file mode 100644 index 0000000000..1f932f0a6a --- /dev/null +++ b/include/wx/msw/ole/dropsrc.h @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////// +// 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 +// 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 -- 2.45.2