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:
parent
3bd2972366
commit
1737035fb8
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
|
Loading…
Reference in New Issue
Block a user