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:
111
include/wx/msw/ole/dataobj.h
Normal file
111
include/wx/msw/ole/dataobj.h
Normal 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
|
71
include/wx/msw/ole/dropsrc.h
Normal file
71
include/wx/msw/ole/dropsrc.h
Normal 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
|
Reference in New Issue
Block a user