]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Take in count item sizes. As we want all elements of the same size we check for the...
authorRafael Fernández López <ereslibre@kde.org>
Fri, 13 Jul 2007 13:49:21 +0000 (13:49 +0000)
committerRafael Fernández López <ereslibre@kde.org>
Fri, 13 Jul 2007 13:49:21 +0000 (13:49 +0000)
and to the user eye as well.

svn path=/trunk/KDE/kdebase/apps/; revision=687387

src/kcategorizedview.cpp
src/kcategorizedview_p.h

index 133fe5d39cbaeadd61aef199a9e425b8ce77045d..1f9e6fda47600f15006ce0bb44bcd9f23c6f3065 100644 (file)
@@ -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));
     }
index 8ce50441bca7cd5c6d318119021e45e35fffadac..45d89aa2105f7eb7c509dc257803ccc81907b25d 100644 (file)
@@ -123,6 +123,7 @@ public:
     // Basic data
     KCategorizedView *listView;
     KItemCategorizer *itemCategorizer;
+    QSize biggestItemSize;
 
     // Behavior data
     bool mouseButtonPressed;