]> git.saurik.com Git - wxWidgets.git/commitdiff
no changes, just refactoring: extracted the code to update the column indices array...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 14 Dec 2008 21:56:38 +0000 (21:56 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 14 Dec 2008 21:56:38 +0000 (21:56 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57340 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/headerctrl.h
src/common/headerctrlcmn.cpp
src/generic/headerctrlg.cpp

index 1557f0fb64694034c5fa0ebdad05ff9b618278d7..10ae50118cb894b80da6a58f5b47c121587e3607 100644 (file)
@@ -140,6 +140,11 @@ protected:
     // columns in the control changes
     virtual void OnColumnCountChanging(unsigned int WXUNUSED(count)) { }
 
+
+    // helper function for the derived classes: update the array of column
+    // indices after the number of columns changed
+    void DoResizeColumnIndices(wxArrayInt& colIndices, unsigned int count);
+
 private:
     // methods implementing our public API and defined in platform-specific
     // implementations
index d1adf1fce1635ad83ea73cfa9f416c13c0b48b0c..67b81cf962fcee302d3f9bbd62f6e37140e64190 100644 (file)
@@ -66,6 +66,9 @@ void wxHeaderCtrlBase::ScrollWindow(int dx,
 
 void wxHeaderCtrlBase::SetColumnCount(unsigned int count)
 {
+    if ( count == GetColumnCount() )
+        return;
+
     OnColumnCountChanging(count);
 
     DoSetCount(count);
@@ -189,6 +192,40 @@ void wxHeaderCtrlBase::MoveColumnInOrderArray(wxArrayInt& order,
     order.swap(orderNew);
 }
 
+void
+wxHeaderCtrlBase::DoResizeColumnIndices(wxArrayInt& colIndices, unsigned int count)
+{
+    // update the column indices array if necessary
+    const unsigned countOld = colIndices.size();
+    if ( count > countOld )
+    {
+        // all new columns have default positions equal to their indices
+        for ( unsigned n = countOld; n < count; n++ )
+            colIndices.push_back(n);
+    }
+    else if ( count < countOld )
+    {
+        // filter out all the positions which are invalid now while keeping the
+        // order of the remaining ones
+        wxArrayInt colIndicesNew;
+        colIndicesNew.reserve(count);
+        for ( unsigned n = 0; n < countOld; n++ )
+        {
+            const unsigned idx = colIndices[n];
+            if ( idx < count )
+                colIndicesNew.push_back(idx);
+        }
+
+        colIndices.swap(colIndicesNew);
+    }
+    else // count didn't really change, we shouldn't even be called
+    {
+        wxFAIL_MSG( "useless call to DoResizeColumnIndices()" );
+    }
+
+    wxASSERT_MSG( colIndices.size() == count, "logic error" );
+}
+
 // ============================================================================
 // wxHeaderCtrlSimple implementation
 // ============================================================================
index 961c42b5d4e020af13aca5047d407992832097cc..5d040b69d9a2b0798b969f2d3e2979cf2532513b 100644 (file)
@@ -92,33 +92,8 @@ wxHeaderCtrl::~wxHeaderCtrl()
 
 void wxHeaderCtrl::DoSetCount(unsigned int count)
 {
-    // update the column indices array if necessary
-    if ( count > m_numColumns )
-    {
-        // all new columns have default positions equal to their indices
-        for ( unsigned n = m_numColumns; n < count; n++ )
-            m_colIndices.push_back(n);
-    }
-    else if ( count < m_numColumns )
-    {
-        // filter out all the positions which are invalid now while keeping the
-        // order of the remaining ones
-        wxArrayInt colIndices;
-        for ( unsigned n = 0; n < m_numColumns; n++ )
-        {
-            const unsigned idx = m_colIndices[n];
-            if ( idx < count )
-                colIndices.push_back(idx);
-        }
-
-        wxASSERT_MSG( colIndices.size() == count, "logic error" );
-
-        m_colIndices = colIndices;
-    }
-    else // count didn't really change
-    {
-        return;
-    }
+    // update the column indices order array before changing m_numColumns
+    DoResizeColumnIndices(m_colIndices, count);
 
     m_numColumns = count;