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, nothing to do wxASSERT_MSG( colIndices.size() == count, "logic error" ); }
/* static */ void wxHeaderCtrlBase::MoveColumnInOrderArray(wxArrayInt& order, unsigned int idx, unsigned int pos) { const unsigned count = order.size(); wxArrayInt orderNew; orderNew.reserve(count); for ( unsigned n = 0; ; n++ ) { // NB: order of checks is important for this to work when the new // column position is the same as the old one // insert the column at its new position if ( orderNew.size() == pos ) orderNew.push_back(idx); if ( n == count ) break; // delete the column from its old position const unsigned idxOld = order[n]; if ( idxOld == idx ) continue; orderNew.push_back(idxOld); } order.swap(orderNew); }