From: Robert Roebling Date: Tue, 20 Jan 2009 19:04:03 +0000 (+0000) Subject: Skeleton for generic Drag code X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/821baf7da4a57028eaa17830b6195056216b71f9 Skeleton for generic Drag code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58247 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/generic/dataview.h b/include/wx/generic/dataview.h index ee027d7ad7..a4780c42ab 100644 --- a/include/wx/generic/dataview.h +++ b/include/wx/generic/dataview.h @@ -449,6 +449,9 @@ public: virtual bool IsExpanded( const wxDataViewItem & item ) const; virtual void SetFocus(); + + virtual bool EnableDragSource( const wxDataFormat &format ); + virtual bool EnableDropTarget( const wxDataFormat &format ); protected: virtual int GetSelections( wxArrayInt & sel ) const; diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index 32691b07ab..f170ed7a56 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -484,6 +484,20 @@ public: void Expand( unsigned int row ) { OnExpanding( row ); } void Collapse( unsigned int row ) { OnCollapsing( row ); } bool IsExpanded( unsigned int row ) const; + + bool EnableDragSource( const wxDataFormat &format ) + { + m_dragFormat = format; + m_dragEnabled = format != wxDF_INVALID; + return true; + } + bool EnableDropTarget( const wxDataFormat &format ) + { + m_dropFormat = format; + m_dropEnabled = format != wxDF_INVALID; + return true; + } + private: wxDataViewTreeNode * GetTreeNodeByRow( unsigned int row ) const; //We did not need this temporarily @@ -513,6 +527,12 @@ private: int m_dragCount; wxPoint m_dragStart; + + bool m_dragEnabled; + wxDataFormat m_dragFormat; + + bool m_dropEnabled; + wxDataFormat m_dropFormat; // for double click logic unsigned int m_lineLastClicked, @@ -1177,6 +1197,9 @@ wxDataViewMainWindow::wxDataViewMainWindow( wxDataViewCtrl *parent, wxWindowID i m_lineBeforeLastClicked = (unsigned int) -1; m_lineSelectSingleOnUp = (unsigned int) -1; + m_dragEnabled = false; + m_dropEnabled = false; + m_hasFocus = false; SetBackgroundColour( *wxWHITE ); @@ -2977,7 +3000,27 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) if (event.LeftIsDown()) { + m_owner->CalcUnscrolledPosition( m_dragStart.x, m_dragStart.y, &m_dragStart.x, &m_dragStart.y ); + unsigned int drag_item_row = GetLineAt( m_dragStart.y ); + wxDataViewItem item = GetItemByRow( drag_item_row ); + // Notify cell about drag + wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() ); + event.SetEventObject( m_owner ); + event.SetItem( item ); + event.SetModel( model ); + if (!m_owner->HandleWindowEvent( event )) + return; + + if (!event.IsAllowed()) + return; + + wxDataObject *obj = event.GetDataObject(); + if (!obj) + return; + + wxPrintf( "success\n" ); + // m_dragDataObject = obj; } return; } @@ -3363,6 +3406,16 @@ bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model ) return true; } +bool wxDataViewCtrl::EnableDragSource( const wxDataFormat &format ) +{ + return m_clientArea->EnableDragSource( format ); +} + +bool wxDataViewCtrl::EnableDropTarget( const wxDataFormat &format ) +{ + return m_clientArea->EnableDropTarget( format ); +} + bool wxDataViewCtrl::AppendColumn( wxDataViewColumn *col ) { if (!wxDataViewCtrlBase::AppendColumn(col))