]> git.saurik.com Git - wxWidgets.git/commitdiff
Implement rest of MSW's wxDataViewCtrl's native column reordering
authorRobert Roebling <robert@roebling.de>
Fri, 28 Dec 2007 23:07:30 +0000 (23:07 +0000)
committerRobert Roebling <robert@roebling.de>
Fri, 28 Dec 2007 23:07:30 +0000 (23:07 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50940 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index 7bf0e396d8e5366d1a3fe6dc39e902660a6d15fe..51faf5f7c2de4d49212efb8dd90b90bb3f6ca1e8 100644 (file)
@@ -469,6 +469,9 @@ public:     // utility functions not part of the API
         return GetClientSize().GetWidth() / GetColumnCount();
     }
 
         return GetClientSize().GetWidth() / GetColumnCount();
     }
 
+    // called by header window after reorder
+    void ColumnMoved( wxDataViewColumn* col, unsigned int new_pos );
+
     // updates the header window after a change in a column setting
     void OnColumnChange();
 
     // updates the header window after a change in a column setting
     void OnColumnChange();
 
index 6fafd57a25454103c318ea1d40069ba0f918d0df..602b4cb5513670649f480e1a7fb685ced5e47380 100644 (file)
@@ -137,6 +137,8 @@ public:
     // called when any column setting is changed and/or changed
     // the column count
     virtual void UpdateDisplay();
     // called when any column setting is changed and/or changed
     // the column count
     virtual void UpdateDisplay();
+    
+    virtual void OnInternalIdle();
 
     // called Refresh afterwards
     virtual void ScrollWindow(int dx, int dy, const wxRect *rect = NULL);
 
     // called Refresh afterwards
     virtual void ScrollWindow(int dx, int dy, const wxRect *rect = NULL);
@@ -155,8 +157,9 @@ protected:
     wxDataViewColumn *GetColumnFromHeader(NMHEADER *nmHDR)
         { return GetColumn(GetColumnIdxFromHeader(nmHDR)); }
         
     wxDataViewColumn *GetColumnFromHeader(NMHEADER *nmHDR)
         { return GetColumn(GetColumnIdxFromHeader(nmHDR)); }
         
-    int m_scrollOffsetX;
-    int m_buttonHeight;
+    int   m_scrollOffsetX;
+    int   m_buttonHeight;
+    bool  m_delayedUpdate;
 
 private:
     DECLARE_DYNAMIC_CLASS(wxDataViewHeaderWindowMSW)
 
 private:
     DECLARE_DYNAMIC_CLASS(wxDataViewHeaderWindowMSW)
@@ -1281,6 +1284,7 @@ bool wxDataViewHeaderWindowMSW::Create( wxDataViewCtrl *parent, wxWindowID id,
     m_owner = parent;
 
     m_scrollOffsetX = 0;
     m_owner = parent;
 
     m_scrollOffsetX = 0;
+    m_delayedUpdate = false;
     m_buttonHeight = wxRendererNative::Get().GetHeaderButtonHeight( this );
 
     int x = pos.x == wxDefaultCoord ? 0 : pos.x,
     m_buttonHeight = wxRendererNative::Get().GetHeaderButtonHeight( this );
 
     int x = pos.x == wxDefaultCoord ? 0 : pos.x,
@@ -1333,7 +1337,16 @@ wxDataViewHeaderWindowMSW::~wxDataViewHeaderWindow()
 
 wxSize wxDataViewHeaderWindowMSW::DoGetBestSize() const
 {
 
 wxSize wxDataViewHeaderWindowMSW::DoGetBestSize() const
 {
-    return wxSize(80, m_buttonHeight );
+    return wxSize( 80, m_buttonHeight+2 );
+}
+
+void wxDataViewHeaderWindowMSW::OnInternalIdle()
+{
+    if (m_delayedUpdate)
+    {
+        m_delayedUpdate = false;
+        UpdateDisplay();
+    }
 }
 
 void wxDataViewHeaderWindowMSW::UpdateDisplay()
 }
 
 void wxDataViewHeaderWindowMSW::UpdateDisplay()
@@ -1456,7 +1469,10 @@ bool wxDataViewHeaderWindowMSW::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARA
 
         case HDN_ENDDRAG:       // user has finished reordering a column
             {
 
         case HDN_ENDDRAG:       // user has finished reordering a column
             {
-               // TODO: How to query the new position here?
+               wxDataViewColumn *col = GetColumn(nmHDR->iItem);
+               unsigned int new_pos = nmHDR->pitem->iOrder;
+               m_owner->ColumnMoved( col, new_pos );
+               m_delayedUpdate = true;
             }
             break;
             
             }
             break;
             
@@ -3965,6 +3981,15 @@ wxDataViewColumn* wxDataViewCtrl::GetColumn( unsigned int pos ) const
     return NULL;
 }
 
     return NULL;
 }
 
+void wxDataViewCtrl::ColumnMoved( wxDataViewColumn* col, unsigned int new_pos )
+{
+    if (new_pos > m_cols.GetCount()) return;
+    m_cols.DeleteObject( col );
+    m_cols.Insert( new_pos, col );
+    
+    m_clientArea->UpdateDisplay();
+}
+
 bool wxDataViewCtrl::DeleteColumn( wxDataViewColumn *column )
 {
     wxDataViewColumnList::compatibility_iterator  ret = m_cols.Find( column );
 bool wxDataViewCtrl::DeleteColumn( wxDataViewColumn *column )
 {
     wxDataViewColumnList::compatibility_iterator  ret = m_cols.Find( column );