Skeleton for generic Drag code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58247 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2009-01-20 19:04:03 +00:00
parent c6212a0cb7
commit 821baf7da4
2 changed files with 56 additions and 0 deletions

View File

@@ -450,6 +450,9 @@ public:
virtual void SetFocus();
virtual bool EnableDragSource( const wxDataFormat &format );
virtual bool EnableDropTarget( const wxDataFormat &format );
protected:
virtual int GetSelections( wxArrayInt & sel ) const;
virtual void SetSelections( const wxArrayInt & sel );

View File

@@ -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
@@ -514,6 +528,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,
m_lineBeforeLastClicked,
@@ -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))