intersectedIndexes.clear();
+ int itemHeight;
+
+ if (listView->gridSize().isEmpty())
+ {
+ itemHeight = biggestItemSize.height();
+ }
+ else
+ {
+ itemHeight = listView->gridSize().height();
+ }
+
// Lets find out where we should start
int top = proxyModel->rowCount() - 1;
int bottom = 0;
index = elementDictionary[proxyModel->index(middle, 0)];
indexVisualRect = visualRect(index);
+ // We need the whole height (not only the visualRect). This will help us to update
+ // all needed indexes correctly (ereslibre)
+ indexVisualRect.setHeight(indexVisualRect.height() + (itemHeight - indexVisualRect.height()));
if (qMax(indexVisualRect.topLeft().y(),
indexVisualRect.bottomRight().y()) < qMin(rect.topLeft().y(),
- rect.bottomRight().y()))
+ rect.bottomRight().y()))
{
bottom = middle + 1;
}
int viewportWidth = listView->viewport()->width() - listView->spacing();
- int itemHeight = biggestItemSize.height();
- int itemWidth = biggestItemSize.width();
+ int itemHeight;
+ int itemWidth;
+
+ if (listView->gridSize().isEmpty())
+ {
+ itemHeight = biggestItemSize.height();
+ itemWidth = biggestItemSize.width();
+ }
+ else
+ {
+ itemHeight = listView->gridSize().height();
+ itemWidth = listView->gridSize().width();
+ }
+
int itemWidthPlusSeparation = listView->spacing() + itemWidth;
int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
if (!elementsPerRow)
if (rows - trunc(rows)) rowsInt++;
retRect.setTop(retRect.top() +
- (rowsInt * listView->spacing()) +
(rowsInt * itemHeight) +
itemCategorizer->categoryHeight(listView->viewOptions()) +
listView->spacing() * 2);
+
+ if (listView->gridSize().isEmpty())
+ {
+ retRect.setTop(retRect.top() +
+ (rowsInt * listView->spacing()));
+ }
}
- retRect.setTop(retRect.top() + row * listView->spacing() +
- row * itemHeight);
+
+ if (listView->gridSize().isEmpty())
+ {
+ retRect.setTop(retRect.top() + row * listView->spacing() +
+ (row * itemHeight));
+ }
+ else
+ {
+ retRect.setTop(retRect.top() + (row * itemHeight));
+ }
retRect.setWidth(itemWidth);
- retRect.setHeight(itemHeight);
+
+ if (listView->gridSize().isEmpty())
+ {
+ retRect.setHeight(listView->sizeHintForIndex(proxyModel->mapFromSource(index)).height());
+ }
+ else
+ {
+ retRect.setHeight(qMin(listView->sizeHintForIndex(proxyModel->mapFromSource(index)).height(),
+ listView->gridSize().height()));
+ }
return retRect;
}
int viewportWidth = listView->viewport()->width() - listView->spacing();
- int itemHeight = biggestItemSize.height();
- int itemWidth = biggestItemSize.width();
+ int itemHeight;
+ int itemWidth;
+
+ if (listView->gridSize().isEmpty())
+ {
+ itemHeight = biggestItemSize.height();
+ itemWidth = biggestItemSize.width();
+ }
+ else
+ {
+ itemHeight = listView->gridSize().height();
+ itemWidth = listView->gridSize().width();
+ }
+
int itemWidthPlusSeparation = listView->spacing() + itemWidth;
int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
if (rows - trunc(rows)) rowsInt++;
retRect.setTop(retRect.top() +
- (rowsInt * listView->spacing()) +
(rowsInt * itemHeight) +
itemCategorizer->categoryHeight(listView->viewOptions()) +
listView->spacing() * 2);
+
+ if (listView->gridSize().isEmpty())
+ {
+ retRect.setTop(retRect.top() +
+ (rowsInt * listView->spacing()));
+ }
}
retRect.setHeight(itemCategorizer->categoryHeight(listView->viewOptions()));
void KCategorizedView::Private::updateScrollbars()
{
- int lastItemBottom = cachedRectIndex(lastIndex).bottom() +
- listView->spacing() - listView->viewport()->height();
+ int lastItemBottom = cachedRectIndex(lastIndex).top() +
+ listView->spacing() + (listView->gridSize().isEmpty() ? 0 : listView->gridSize().height()) - listView->viewport()->height();
listView->verticalScrollBar()->setSingleStep(listView->viewport()->height() / 10);
listView->verticalScrollBar()->setPageStep(listView->viewport()->height());
}
// Redraw categories
- int i = 0;
QStyleOptionViewItem otherOption;
foreach (const QString &category, d->categories)
{
const QModelIndex current = selectionModel()->currentIndex();
int viewportWidth = viewport()->width() - spacing();
- int itemHeight = d->biggestItemSize.height();
- int itemWidth = d->biggestItemSize.width();
+ int itemWidth;
+
+ if (gridSize().isEmpty())
+ {
+ itemWidth = d->biggestItemSize.width();
+ }
+ else
+ {
+ itemWidth = gridSize().width();
+ }
+
int itemWidthPlusSeparation = spacing() + itemWidth;
int elementsPerRow = viewportWidth / itemWidthPlusSeparation;