diff options
Diffstat (limited to 'src/kcategorizedview.cpp')
| -rw-r--r-- | src/kcategorizedview.cpp | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/src/kcategorizedview.cpp b/src/kcategorizedview.cpp index 133fe5d39..1f9e6fda4 100644 --- a/src/kcategorizedview.cpp +++ b/src/kcategorizedview.cpp @@ -78,6 +78,7 @@ private: KCategorizedView::Private::Private(KCategorizedView *listView) : listView(listView) , itemCategorizer(0) + , biggestItemSize(QSize(0, 0)) , mouseButtonPressed(false) , isDragging(false) , dragLeftViewport(false) @@ -150,14 +151,8 @@ QRect KCategorizedView::Private::visualRectInViewport(const QModelIndex &index) int viewportWidth = listView->viewport()->width() - listView->spacing(); - // We really need all items to be of same size. Otherwise we cannot do this - // (ereslibre) - // QSize itemSize = - // listView->sizeHintForIndex(proxyModel->mapFromSource(index)); - // int itemHeight = itemSize.height(); - // int itemWidth = itemSize.width();*/ - int itemHeight = 107; - int itemWidth = 130; + int itemHeight = biggestItemSize.height(); + int itemWidth = biggestItemSize.width(); int itemWidthPlusSeparation = listView->spacing() + itemWidth; int elementsPerRow = viewportWidth / itemWidthPlusSeparation; if (!elementsPerRow) @@ -211,13 +206,8 @@ QRect KCategorizedView::Private::visualCategoryRectInViewport(const QString &cat int viewportWidth = listView->viewport()->width() - listView->spacing(); - // We really need all items to be of same size. Otherwise we cannot do this - // (ereslibre) - // QSize itemSize = listView->sizeHintForIndex(index); - // int itemHeight = itemSize.height(); - // int itemWidth = itemSize.width(); - int itemHeight = 107; - int itemWidth = 130; + int itemHeight = biggestItemSize.height(); + int itemWidth = biggestItemSize.width(); int itemWidthPlusSeparation = listView->spacing() + itemWidth; int elementsPerRow = viewportWidth / itemWidthPlusSeparation; @@ -947,13 +937,8 @@ QModelIndex KCategorizedView::moveCursor(CursorAction cursorAction, const QModelIndex current = selectionModel()->currentIndex(); int viewportWidth = viewport()->width() - spacing(); - // We really need all items to be of same size. Otherwise we cannot do this - // (ereslibre) - // QSize itemSize = listView->sizeHintForIndex(index); - // int itemHeight = itemSize.height(); - // int itemWidth = itemSize.width(); - int itemHeight = 107; - int itemWidth = 130; + int itemHeight = d->biggestItemSize.height(); + int itemWidth = d->biggestItemSize.width(); int itemWidthPlusSeparation = spacing() + itemWidth; int elementsPerRow = viewportWidth / itemWidthPlusSeparation; @@ -1119,6 +1104,11 @@ void KCategorizedView::rowsInsertedArtifficial(const QModelIndex &parent, // Add all elements mapped to the source model for (int k = 0; k < d->proxyModel->rowCount(); k++) { + d->biggestItemSize = QSize(qMax(sizeHintForIndex(d->proxyModel->index(k, 0)).width(), + d->biggestItemSize.width()), + qMax(sizeHintForIndex(d->proxyModel->index(k, 0)).height(), + d->biggestItemSize.height())); + d->sourceModelIndexList << d->proxyModel->mapToSource(d->proxyModel->index(k, 0)); } |
