]> git.saurik.com Git - wxWidgets.git/commitdiff
Skeleton for generic Drag code
authorRobert Roebling <robert@roebling.de>
Tue, 20 Jan 2009 19:04:03 +0000 (19:04 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 20 Jan 2009 19:04:03 +0000 (19:04 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58247 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/dataview.h
src/generic/datavgen.cpp

index ee027d7ad79c0ff5c3897e0165fc8cc261bdd6f3..a4780c42abb67d5fc7736bac64cbfe7ed7f9fd5b 100644 (file)
@@ -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;
index 32691b07ab0ad7d0cc8381165290a5453b23b997..f170ed7a569fb1c73af7626304e0e9a0ee9729cd 100644 (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
@@ -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))