Merge branch 'dvc-multi-format-dnd'
Accept multiple data formats via drag-and-drop in wxDataViewCtrl. See #2478, #2616.
This commit is contained in:
@@ -922,7 +922,6 @@ public:
|
||||
};
|
||||
|
||||
bool EnableDragSource( const wxDataFormat &format );
|
||||
bool EnableDropTarget( const wxDataFormat &format );
|
||||
|
||||
void RefreshDropHint();
|
||||
void RemoveDropHint();
|
||||
@@ -1032,8 +1031,6 @@ private:
|
||||
bool m_dragEnabled;
|
||||
wxDataFormat m_dragFormat;
|
||||
|
||||
bool m_dropEnabled;
|
||||
wxDataFormat m_dropFormat;
|
||||
DropItemInfo m_dropItemInfo;
|
||||
#endif // wxUSE_DRAG_AND_DROP
|
||||
|
||||
@@ -1704,12 +1701,15 @@ public:
|
||||
class wxDataViewDropTarget: public wxDropTarget
|
||||
{
|
||||
public:
|
||||
wxDataViewDropTarget( wxDataObject *obj, wxDataViewMainWindow *win ) :
|
||||
wxDropTarget( obj )
|
||||
wxDataViewDropTarget( wxDataObjectComposite *obj, wxDataViewMainWindow *win ) :
|
||||
wxDropTarget( obj ),
|
||||
m_obj(obj)
|
||||
{
|
||||
m_win = win;
|
||||
}
|
||||
|
||||
wxDataObjectComposite* GetCompositeDataObject() const { return m_obj; }
|
||||
|
||||
virtual wxDragResult OnDragOver( wxCoord x, wxCoord y, wxDragResult def ) wxOVERRIDE
|
||||
{
|
||||
wxDataFormat format = GetMatchingPair();
|
||||
@@ -1739,6 +1739,9 @@ public:
|
||||
virtual void OnLeave() wxOVERRIDE
|
||||
{ m_win->OnLeave(); }
|
||||
|
||||
private:
|
||||
wxDataObjectComposite* const m_obj;
|
||||
|
||||
wxDataViewMainWindow *m_win;
|
||||
};
|
||||
|
||||
@@ -2076,7 +2079,6 @@ wxDataViewMainWindow::wxDataViewMainWindow( wxDataViewCtrl *parent, wxWindowID i
|
||||
m_dragStart = wxPoint(0,0);
|
||||
|
||||
m_dragEnabled = false;
|
||||
m_dropEnabled = false;
|
||||
m_dropItemInfo = DropItemInfo();
|
||||
#endif // wxUSE_DRAG_AND_DROP
|
||||
|
||||
@@ -2132,17 +2134,6 @@ bool wxDataViewMainWindow::EnableDragSource( const wxDataFormat &format )
|
||||
return true;
|
||||
}
|
||||
|
||||
bool wxDataViewMainWindow::EnableDropTarget( const wxDataFormat &format )
|
||||
{
|
||||
m_dropFormat = format;
|
||||
m_dropEnabled = format != wxDF_INVALID;
|
||||
|
||||
if (m_dropEnabled)
|
||||
SetDropTarget( new wxDataViewDropTarget( new wxCustomDataObject( format ), this ) );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxDataViewMainWindow::RefreshDropHint()
|
||||
{
|
||||
const unsigned row = m_dropItemInfo.m_row;
|
||||
@@ -2389,18 +2380,18 @@ bool wxDataViewMainWindow::OnDrop( wxDataFormat format, wxCoord x, wxCoord y )
|
||||
return true;
|
||||
}
|
||||
|
||||
wxDragResult wxDataViewMainWindow::OnData( wxDataFormat format, wxCoord x, wxCoord y,
|
||||
wxDragResult def )
|
||||
wxDragResult wxDataViewMainWindow::OnData(wxDataFormat format, wxCoord x, wxCoord y,
|
||||
wxDragResult def)
|
||||
{
|
||||
DropItemInfo dropItemInfo = GetDropItemInfo(x, y);
|
||||
|
||||
wxCustomDataObject *obj = (wxCustomDataObject *) GetDropTarget()->GetDataObject();
|
||||
wxDataViewDropTarget* const
|
||||
target = static_cast<wxDataViewDropTarget*>(GetDropTarget());
|
||||
wxDataObjectComposite* const obj = target->GetCompositeDataObject();
|
||||
|
||||
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP, m_owner, dropItemInfo.m_item);
|
||||
event.SetProposedDropIndex(dropItemInfo.m_proposedDropIndex);
|
||||
event.SetDataFormat( format );
|
||||
event.SetDataSize( obj->GetSize() );
|
||||
event.SetDataBuffer( obj->GetData() );
|
||||
event.InitData(obj, format);
|
||||
event.SetDropEffect( def );
|
||||
if ( !m_owner->HandleWindowEvent( event ) || !event.IsAllowed() )
|
||||
return wxDragNone;
|
||||
@@ -5823,9 +5814,17 @@ bool wxDataViewCtrl::EnableDragSource( const wxDataFormat &format )
|
||||
return m_clientArea->EnableDragSource( format );
|
||||
}
|
||||
|
||||
bool wxDataViewCtrl::EnableDropTarget( const wxDataFormat &format )
|
||||
bool wxDataViewCtrl::DoEnableDropTarget( const wxVector<wxDataFormat> &formats )
|
||||
{
|
||||
return m_clientArea->EnableDropTarget( format );
|
||||
wxDataViewDropTarget* dt = NULL;
|
||||
if (wxDataObjectComposite* dataObject = CreateDataObject(formats))
|
||||
{
|
||||
dt = new wxDataViewDropTarget(dataObject, m_clientArea);
|
||||
}
|
||||
|
||||
m_clientArea->SetDropTarget(dt);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // wxUSE_DRAG_AND_DROP
|
||||
|
||||
Reference in New Issue
Block a user