Accept multiple data formats via drag-and-drop in wxDataViewCtrl
Allow specifying multiple formats to be accepted when dragging data to wxDataViewCtrl in the generic and Cocoa implementations. Add wxDataViewCtrlBase::EnableDropTarget() overload taking an array of wxDataFormats to support this at the API level. Add new DoEnableDropTarget() used by both EnableDropTarget() overloads and implement it in the generic and Cocoa ports. GTK implementation still uses only a single format, as before. Also refactor the Cocoa implementation: all operations using dragged data are now handled by wxDropTarget and unnecessary DataViewPboardType as removed. Update the dataview sample to show the new functionality.
This commit is contained in:
@@ -1688,6 +1688,64 @@ void wxDataViewCtrlBase::StartEditor(const wxDataViewItem& item, unsigned int co
|
||||
EditItem(item, GetColumn(column));
|
||||
}
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
|
||||
wxDataObject* wxDataViewCtrlBase::CreateDataObject(const wxDataFormatArray& formats)
|
||||
{
|
||||
if (formats.GetCount() == 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
wxDataObjectComposite *dataObject(new wxDataObjectComposite);
|
||||
for (size_t i = 0; i < formats.GetCount(); ++i)
|
||||
{
|
||||
switch (formats.Item(i).GetType())
|
||||
{
|
||||
case wxDF_TEXT:
|
||||
case wxDF_OEMTEXT:
|
||||
case wxDF_UNICODETEXT:
|
||||
dataObject->Add(new wxTextDataObject);
|
||||
break;
|
||||
|
||||
case wxDF_BITMAP:
|
||||
dataObject->Add(new wxBitmapDataObject);
|
||||
break;
|
||||
|
||||
case wxDF_FILENAME:
|
||||
dataObject->Add(new wxFileDataObject);
|
||||
break;
|
||||
|
||||
case wxDF_HTML:
|
||||
dataObject->Add(new wxHTMLDataObject);
|
||||
break;
|
||||
|
||||
case wxDF_METAFILE:
|
||||
case wxDF_SYLK:
|
||||
case wxDF_DIF:
|
||||
case wxDF_TIFF:
|
||||
case wxDF_DIB:
|
||||
case wxDF_PALETTE:
|
||||
case wxDF_PENDATA:
|
||||
case wxDF_RIFF:
|
||||
case wxDF_WAVE:
|
||||
case wxDF_ENHMETAFILE:
|
||||
case wxDF_LOCALE:
|
||||
case wxDF_PRIVATE:
|
||||
dataObject->Add(new wxCustomDataObject(formats.Item(i)));
|
||||
break;
|
||||
|
||||
case wxDF_INVALID:
|
||||
case wxDF_MAX:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return dataObject;
|
||||
}
|
||||
|
||||
#endif // wxUSE_DRAG_AND_DROP
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// wxDataViewEvent
|
||||
// ---------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user