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
This commit is contained in:
Vadim Zeitlin 1998-05-27 23:24:11 +00:00
parent 3bd2972366
commit 1737035fb8
2 changed files with 182 additions and 0 deletions

View File

@ -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 <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

View File

@ -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 <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