Make wxDataObjectComposite::GetObject() public.

Allow retrieving individual wxDataObjects from wxDataObjectComposite and add
an example showing how can this be done to the documentation.

Closes #11692.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63381 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2010-02-04 01:02:43 +00:00
parent 2d1e63c0a5
commit 1d4b9c37cb
2 changed files with 99 additions and 31 deletions

View File

@ -274,11 +274,17 @@ public:
void Add(wxDataObjectSimple *dataObject, bool preferred = false);
// Report the format passed to the SetData method. This should be the
// format of the data object within the composite that recieved data from
// format of the data object within the composite that received data from
// the clipboard or the DnD operation. You can use this method to find
// out what kind of data object was recieved.
// out what kind of data object was received.
wxDataFormat GetReceivedFormat() const;
// Returns the pointer to the object which supports this format or NULL.
// The returned pointer is owned by wxDataObjectComposite and must
// therefore not be destroyed by the caller.
wxDataObjectSimple *GetObject(const wxDataFormat& format,
wxDataObjectBase::Direction dir = Get) const;
// implement base class pure virtuals
// ----------------------------------
virtual wxDataFormat GetPreferredFormat(wxDataObjectBase::Direction dir = Get) const;
@ -295,10 +301,6 @@ public:
virtual size_t GetBufferOffset( const wxDataFormat& format );
#endif
protected:
// returns the pointer to the object which supports this format or NULL
wxDataObjectSimple *GetObject(const wxDataFormat& format, wxDataObjectBase::Direction dir=Get) const;
private:
// the list of all (simple) data objects whose formats we support
wxSimpleDataObjectList m_dataObjects;

View File

@ -134,7 +134,7 @@ public:
set. In the general case, an object may support different formats on
'input' and 'output', i.e. it may be able to render itself in a given
format but not be created from data on this format or vice versa.
wxDataObject defines the wxDataObject::Direction enumeration type which
wxDataObject defines the wxDataObject::Direction enumeration type which
distinguishes between them.
See wxDataFormat documentation for more about formats.
@ -158,7 +158,7 @@ public:
-# Use one of the built-in classes.
- You may use wxTextDataObject, wxBitmapDataObject wxFileDataObject,
wxURLDataObject in the simplest cases when you only need to support
wxURLDataObject in the simplest cases when you only need to support
one format and your data is either text, bitmap or list of files.
-# Use wxDataObjectSimple
- Deriving from wxDataObjectSimple is the simplest solution for custom
@ -228,13 +228,13 @@ public:
{
/** Format is supported by GetDataHere() */
Get = 0x01,
/** Format is supported by SetData() */
Set = 0x02,
/**
Format is supported by both GetDataHere() and SetData()
(unused currently)
/**
Format is supported by both GetDataHere() and SetData()
(unused currently)
*/
Both = 0x03
};
@ -250,8 +250,8 @@ public:
virtual ~wxDataObject();
/**
Copies all formats supported in the given direction @a dir to the array
pointed to by @a formats.
Copies all formats supported in the given direction @a dir to the array
pointed to by @a formats.
There must be enough space for GetFormatCount(dir) formats in it.
@beginWxPerlOnly
@ -414,6 +414,59 @@ public:
wxDataObject directly instead of wxDataObjectComposite for efficiency
reasons.
This example shows how a composite data object capable of storing either
bitmaps or file names (presumably of bitmap files) can be initialized and
used:
@code
MyDropTarget::MyDropTarget()
{
wxDataObjectComposite* dataobj = new wxDataObjectComposite();
dataobj->Add(new wxBitmapDataObject(), true);
dataobj->Add(new wxFileDataObject());
SetDataObject(dataobj);
}
wxDragResult MyDropTarget::OnData(wxCoord x, wxCoord y,
wxDragResult defaultDragResult)
{
wxDragResult dragResult = wxDropTarget::OnData(x, y, defaultDragResult);
if ( dragResult == defaultDragResult )
{
wxDataObjectComposite *
dataobjComp = static_cast<wxDataObjectComposite *>(GetDataObject());
wxDataFormat format = dataObjects->GetReceivedFormat();
wxDataObject *dataobj = dataobjComp->GetObject(format);
switch ( format.GetType() )
{
case wxDF_BITMAP:
{
wxBitmapDataObject *
dataobjBitmap = static_cast<wxBitmapDataObject *>(dataobj);
... use dataobj->GetBitmap() ...
}
break;
case wxDF_FILENAME:
{
wxFileDataObject *
dataobjFile = static_cast<wxFileDataObject *>(dataobj);
... use dataobj->GetFilenames() ...
}
break;
default:
wxFAIL_MSG( "unexpected data object format" );
}
}
return dragResult;
}
@endcode
@library{wxcore}
@category{dnd}
@ -436,11 +489,24 @@ public:
/**
Report the format passed to the SetData() method. This should be the
format of the data object within the composite that recieved data from
format of the data object within the composite that received data from
the clipboard or the DnD operation. You can use this method to find
out what kind of data object was recieved.
out what kind of data object was received.
*/
wxDataFormat GetReceivedFormat() const;
/**
Returns the pointer to the object which supports the passed format for
the specified direction.
@NULL is returned if the specified @a format is not supported for this
direction @a dir. The returned pointer is owned by wxDataObjectComposite
itself and shouldn't be deleted by caller.
@since 2.9.1
*/
wxDataObjectSimple *GetObject(const wxDataFormat& format,
wxDataObjectBase::Direction dir = Get) const;
};
@ -448,9 +514,9 @@ public:
/**
@class wxDataObjectSimple
This is the simplest possible implementation of the wxDataObject class.
The data object of (a class derived from) this class only supports
<strong>one format</strong>, so the number of virtual functions to
This is the simplest possible implementation of the wxDataObject class.
The data object of (a class derived from) this class only supports
<strong>one format</strong>, so the number of virtual functions to
be implemented is reduced.
Notice that this is still an abstract base class and cannot be used
@ -486,8 +552,8 @@ public:
wxDataObjectSimple(const wxDataFormat& format = wxFormatInvalid);
/**
Copy the data to the buffer, return @true on success.
Must be implemented in the derived class if the object supports rendering
Copy the data to the buffer, return @true on success.
Must be implemented in the derived class if the object supports rendering
its data.
@beginWxPythonOnly
@ -504,14 +570,14 @@ public:
virtual size_t GetDataSize() const;
/**
Returns the (one and only one) format supported by this object.
Returns the (one and only one) format supported by this object.
It is assumed that the format is supported in both directions.
*/
const wxDataFormat& GetFormat() const;
/**
Copy the data from the buffer, return @true on success.
Must be implemented in the derived class if the object supports setting
Copy the data from the buffer, return @true on success.
Must be implemented in the derived class if the object supports setting
its data.
@beginWxPythonOnly
@ -622,7 +688,7 @@ public:
/**
@class wxTextDataObject
wxTextDataObject is a specialization of wxDataObjectSimple for text data.
wxTextDataObject is a specialization of wxDataObjectSimple for text data.
It can be used without change to paste data into the wxClipboard or a
wxDropSource. A user may wish to derive a new class from this class for
providing text on-demand in order to minimize memory consumption when
@ -672,12 +738,12 @@ public:
length plus 1 for a trailing zero, but this is not strictly required.
*/
virtual size_t GetTextLength() const;
/**
Returns 2 under wxMac and wxGTK, where text data coming from the
clipboard may be provided as ANSI (@c wxDF_TEXT) or as Unicode text
(@c wxDF_UNICODETEXT, but only when @c wxUSE_UNICODE==1).
Returns 1 under other platforms (e.g. wxMSW) or when building in ANSI mode
(@c wxUSE_UNICODE==0).
*/
@ -685,7 +751,7 @@ public:
/**
Returns the preferred format supported by this object.
This is @c wxDF_TEXT or @c wxDF_UNICODETEXT depending on the platform
and from the build mode (i.e. from @c wxUSE_UNICODE).
*/
@ -693,8 +759,8 @@ public:
/**
Returns all the formats supported by wxTextDataObject.
Under wxMac and wxGTK they are @c wxDF_TEXT and @c wxDF_UNICODETEXT,
Under wxMac and wxGTK they are @c wxDF_TEXT and @c wxDF_UNICODETEXT,
under other ports returns only one of the two, depending on the build mode.
*/
virtual void GetAllFormats(wxDataFormat* formats,