- // Find out if there are selected items below the current node.
- bool selectCollapsingRow = false;
- const unsigned rowAdjustment = node->GetSubTreeCount();
- unsigned maxRowToBeTested = row + rowAdjustment;
- for(unsigned i=0; i<m_selection.size(); ++i)
- {
- const unsigned testRow = m_selection[i];
- if(testRow > row && testRow <= maxRowToBeTested)
- {
- selectCollapsingRow = true;
- // get out as soon as we have found a node that is selected
- break;
- }
- }
-
- node->ToggleOpen();
-
- // If the node to be closed has selected items the user won't see those any longer.
- // We select the collapsing node in this case.
- if(selectCollapsingRow)
- {
- SelectAllRows(false);
- ChangeCurrentRow(row);
- SelectRow(row, true);
- SendSelectionChangedEvent(GetItemByRow(row));
- }
- else
- {
- // if there were no selected items below our node we still need to "fix" the
- // selection list to adjust for the changing of the row indices.
- // We actually do the opposite of what we are doing in OnExpanding().
- for(unsigned i=0; i<m_selection.size(); ++i)
- {
- const unsigned testRow = m_selection[i];
- // all rows above us are not affected, so skip them
- if(testRow <= row)
- continue;
-
- m_selection[i] -= rowAdjustment;
- }
-
- // if the "current row" is being collapsed away we change it to the current row ;-)
- if(m_currentRow > row && m_currentRow <= maxRowToBeTested)
- ChangeCurrentRow(row);
- else if(m_currentRow > row)
- ChangeCurrentRow(m_currentRow - rowAdjustment);
- }
+ // Find out if there are selected items below the current node.
+ bool selectCollapsingRow = false;
+ const unsigned rowAdjustment = node->GetSubTreeCount();
+ unsigned maxRowToBeTested = row + rowAdjustment;
+ for(unsigned i=0; i<m_selection.size(); ++i)
+ {
+ const unsigned testRow = m_selection[i];
+ if(testRow > row && testRow <= maxRowToBeTested)
+ {
+ selectCollapsingRow = true;
+ // get out as soon as we have found a node that is selected
+ break;
+ }
+ }