}
wxDataObjectSimple *
-wxDataObjectComposite::GetObject(const wxDataFormat& format) const
+wxDataObjectComposite::GetObject(const wxDataFormat& format, wxDataObjectBase::Direction dir) const
{
wxSimpleDataObjectList::compatibility_iterator node = m_dataObjects.GetFirst();
+
while ( node )
{
wxDataObjectSimple *dataObj = node->GetData();
- if ( dataObj->GetFormat() == format )
- {
- return dataObj;
- }
-
+ if (dataObj->IsSupported(format,dir))
+ return dataObj;
node = node->GetNext();
}
-
- return (wxDataObjectSimple *)NULL;
+ return NULL;
}
void wxDataObjectComposite::Add(wxDataObjectSimple *dataObject, bool preferred)
{
+ // check if the data format of the passed object already exists in the composite data object, if this is the case
+ // do not add the data object and display a message in debug mode (otherwise this method fails silently):
+ // start checking if the data format exists for the 'GET' direction:
+ size_t indexFormats;
+ size_t noOfFormats;
+ wxDataFormat* formats;
+
+ noOfFormats = dataObject->GetFormatCount(wxDataObjectBase::Get);
+ formats = new wxDataFormat[noOfFormats];
+ for (indexFormats=0; indexFormats<noOfFormats; ++indexFormats)
+ wxCHECK_RET(this->GetObject(formats[indexFormats],wxDataObjectBase::Get) == NULL,
+ _("The data format for the GET-direction of the to be added data object already exists"));
+ delete[] formats;
+ // do the same with the 'SET' direction:
+ noOfFormats = dataObject->GetFormatCount(wxDataObjectBase::Set);
+
+ formats = new wxDataFormat[noOfFormats];
+ for (indexFormats=0; indexFormats<noOfFormats; ++indexFormats)
+ wxCHECK_RET(this->GetObject(formats[indexFormats],wxDataObjectBase::Set) == NULL,
+ _("The data format for the SET-direction of the to be added data object already exists"));
+ delete[] formats;
+
+ // if we reach this location the data object can simply be appended:
if ( preferred )
m_preferred = m_dataObjects.GetCount();
-
m_dataObjects.Append( dataObject );
}
}
void wxDataObjectComposite::GetAllFormats(wxDataFormat *formats,
- Direction WXUNUSED(dir)) const
+ Direction dir) const
{
- size_t n = 0;
+ size_t index(0);
wxSimpleDataObjectList::compatibility_iterator node;
+
for ( node = m_dataObjects.GetFirst(); node; node = node->GetNext() )
{
- // TODO if ( !outputOnlyToo ) && this one counts ...
- formats[n++] = node->GetData()->GetFormat();
+ node->GetData()->GetAllFormats(formats+index,dir);
+ index += node->GetData()->GetFormatCount(dir);
}
}
bool wxTextDataObject::SetData(const wxDataFormat& format,
size_t len, const void *buf_)
{
- const char * const buf = wx_static_cast(const char *, buf_);
+ const char * const buf = static_cast<const char *>(buf_);
if ( buf == NULL )
return false;
{
delete [] (char*)m_data;
m_size = 0;
- m_data = (void*)NULL;
+ m_data = NULL;
}
size_t wxCustomDataObject::GetDataSize() const