internal void ReorderColumn (ColumnHeader col, int index, bool fireEvent)
{
if (fireEvent) {
ColumnReorderedEventHandler eh = (ColumnReorderedEventHandler) (Events [ColumnReorderedEvent]);
if (eh != null){
ColumnReorderedEventArgs args = new ColumnReorderedEventArgs (col.Index, index, col);
eh (this, args);
if (args.Cancel) {
header_control.Invalidate ();
item_control.Invalidate ();
return;
}
}
}
int column_count = Columns.Count;
if (reordered_column_indices == null) {
reordered_column_indices = new int [column_count];
for (int i = 0; i < column_count; i++)
reordered_column_indices [i] = i;
}
if (reordered_column_indices [index] == col.Index)
return;
int[] curr = reordered_column_indices;
int [] result = new int [column_count];
int curr_idx = 0;
for (int i = 0; i < column_count; i++) {
if (curr_idx < column_count && curr [curr_idx] == col.Index)
curr_idx++;
if (i == index)
result [i] = col.Index;
else
result [i] = curr [curr_idx++];
}
ReorderColumns (result, true);
}