int lastItemBottom = cachedRectIndex(lastIndex).top() +
listView->spacing() + (listView->gridSize().isEmpty() ? 0 : listView->gridSize().height()) - listView->viewport()->height();
+ listView->horizontalScrollBar()->setRange(0, 0);
+
listView->verticalScrollBar()->setSingleStep(listView->viewport()->height() / 10);
listView->verticalScrollBar()->setPageStep(listView->viewport()->height());
listView->verticalScrollBar()->setRange(0, lastItemBottom);
(modelSortRole != proxyModel->sortRole()) ||
(modelSortColumn != proxyModel->sortColumn()) ||
(modelSortOrder != proxyModel->sortOrder()) ||
+ (modelLastRowCount != proxyModel->rowCount()) ||
(modelCategorized != proxyModel->isCategorizedModel()))))
{
// Force the view to update all elements
modelSortRole = proxyModel->sortRole();
modelSortColumn = proxyModel->sortColumn();
modelSortOrder = proxyModel->sortOrder();
+ modelLastRowCount = proxyModel->rowCount();
modelCategorized = proxyModel->isCategorizedModel();
}
}
d->modelSortRole = d->proxyModel->sortRole();
d->modelSortColumn = d->proxyModel->sortColumn();
d->modelSortOrder = d->proxyModel->sortOrder();
+ d->modelLastRowCount = d->proxyModel->rowCount();
d->modelCategorized = d->proxyModel->isCategorizedModel();
QObject::connect(d->proxyModel,
// Redraw categories
QStyleOptionViewItem otherOption;
+ bool intersectedInThePast = false;
foreach (const QString &category, d->categories)
{
otherOption = option;
if (otherOption.rect.intersects(area))
{
+ intersectedInThePast = true;
+
QModelIndex indexToDraw = d->proxyModel->index(d->categoriesIndexes[category][0].row(), d->proxyModel->sortColumn());
d->drawNewCategory(indexToDraw,
d->proxyModel->sortRole(), otherOption, &painter);
}
+ else if (intersectedInThePast)
+ {
+ break; // the visible area has been finished, we don't need to keep asking, the rest won't intersect
+ // this is doable because we know that categories are correctly ordered on the list
+ }
}
if (d->mouseButtonPressed && !d->isDragging)