if (selRect.isNull()) {
clearSelection();
+ m_band.ignoreOldInfo = true;
return;
}
if (!m_band.ignoreOldInfo) {
// Do some quick checks to see if we can rule out the need to
// update the selection.
- bool coveringSameRows = true;
Q_ASSERT(uniformRowHeights());
QModelIndex dummyIndex = model()->index(0, 0);
if (!dummyIndex.isValid()) {
// No items in the model presumably.
return;
}
- const int rowHeight = QTreeView::rowHeight(dummyIndex);
// If the elastic band does not cover the same rows as before, we'll
// need to re-check, and also invalidate the old item distances.
- if (selRect.top() / rowHeight != m_band.oldSelectionRect.top() / rowHeight) {
- coveringSameRows = false;
- } else if (selRect.bottom() / rowHeight != m_band.oldSelectionRect.bottom() / rowHeight) {
- coveringSameRows = false;
- }
-
+ const int rowHeight = QTreeView::rowHeight(dummyIndex);
+ const bool coveringSameRows =
+ (selRect.top() / rowHeight == m_band.oldSelectionRect.top() / rowHeight) &&
+ (selRect.bottom() / rowHeight == m_band.oldSelectionRect.bottom() / rowHeight);
if (coveringSameRows) {
// Covering the same rows, but have we moved far enough horizontally
// that we might have (de)selected some other items?
((selRect.right() < oldSelRect.right()) &&
(selRect.left() >= m_band.insideNearestRightEdge)) ||
((selRect.right() > oldSelRect.right()) &&
- (selRect.right() >= m_band.outsideNearestRightEdge));
+ (selRect.right() >= m_band.outsideNearestRightEdge));
if (!itemSelectionChanged) {
return;
}
// Do the selection from scratch. Force a update of the horizontal distances info.
- m_band.insideNearestLeftEdge = nameColumnX + nameColumnWidth + 1;;
+ m_band.insideNearestLeftEdge = nameColumnX + nameColumnWidth + 1;
m_band.insideNearestRightEdge = nameColumnX - 1;
m_band.outsideNearestLeftEdge = nameColumnX - 1;
m_band.outsideNearestRightEdge = nameColumnX + nameColumnWidth + 1;
const int cl = currIndexRect.left();
const int sl = selRect.left();
const int sr = selRect.right();
- // "The right edge of the name is outside of the rect but nearer than m_outsideNearestLeft", etc
+ // "The right edge of the name is outside of the rect but nearer than m_outsideNearestLeft", etc
if ((cr < sl && cr > m_band.outsideNearestLeftEdge)) {
m_band.outsideNearestLeftEdge = cr;
}
if ((cr >= sl && cr <= sr && cr < m_band.insideNearestLeftEdge)) {
m_band.insideNearestLeftEdge = cr;
}
-
+
bool currentlySelected = selectionModel()->isSelected(currIndex);
bool intersectsSelectedRect = currIndexRect.intersects(selRect);
bool needToToggleItem = (currentlySelected && !intersectsSelectedRect) || (!currentlySelected && intersectsSelectedRect);
lastIndex = currIndex;
currIndex = nextIndex;
} while (!allItemsInBoundDone);
-
+
selectionModel()->select(itemsToToggle, QItemSelectionModel::Toggle);
m_band.oldSelectionRect = selRect;