[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kfile
From:       Kevin Ottens <ervin () kde ! org>
Date:       2007-04-08 15:40:16
Message-ID: 1176046816.919684.28463.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 651601 by ervin:

Autoresize the "places" item sizes as discussed with Ellen.

We want to fit as many items as possible on screen, while keeping them
as big as possible.

CCMAIL:ellen@kde.org



 M  +43 -1     kfileplacesview.cpp  
 M  +2 -0      kfileplacesview.h  


--- trunk/KDE/kdelibs/kfile/kfileplacesview.cpp #651600:651601
@@ -41,6 +41,8 @@
 
     KUrl currentUrl;
 
+    void adaptItemSize();
+
     void _k_placeClicked(const QModelIndex &index);
 };
 
@@ -48,7 +50,7 @@
     : QListView(parent), d(new Private(this))
 {
     setSelectionRectVisible(false);
-    setSelectionMode(QAbstractItemView::SingleSelection);
+    setSelectionMode(SingleSelection);
 
     setDragEnabled(true);
     setAcceptDrops(true);
@@ -143,12 +145,52 @@
     setUrl(d->currentUrl);
 }
 
+void KFilePlacesView::resizeEvent(QResizeEvent *event)
+{
+    d->adaptItemSize();
+    QListView::resizeEvent(event);
+}
+
 void KFilePlacesView::rowsInserted(const QModelIndex &parent, int start, int end)
 {
     QListView::rowsInserted(parent, start, end);
+    d->adaptItemSize();
     setUrl(d->currentUrl);
 }
 
+void KFilePlacesView::Private::adaptItemSize()
+{
+    KFilePlacesModel *placesModel = qobject_cast<KFilePlacesModel*>(q->model());
+
+    if (placesModel==0) return;
+
+    const int rowCount = placesModel->rowCount();
+
+    if (rowCount==0) return; // We've nothing to display anyway
+
+    const int minSize = 16;
+    const int maxSize = 64;
+
+    const int maxWidth = q->width()/4;
+    const int maxHeight = (q->height()/rowCount)-1;
+
+    int size = qMin(maxHeight, maxWidth);
+
+    if (size<minSize) {
+        size = minSize;
+    } else if (size>maxSize) {
+        size = maxSize;
+    } else {
+        // Make it a multiple of 16
+        size>>= 4;
+        size<<= 4;
+    }
+
+    if (size!=q->iconSize().height()) {
+        q->setIconSize(QSize(size, size));
+    }
+}
+
 void KFilePlacesView::Private::_k_placeClicked(const QModelIndex &index)
 {
     KFilePlacesModel *placesModel = qobject_cast<KFilePlacesModel*>(q->model());
--- trunk/KDE/kdelibs/kfile/kfileplacesview.h #651600:651601
@@ -26,6 +26,7 @@
 #include <kurl.h>
 
 class QAbstractItemModel;
+class QResizeEvent;
 class QContextMenuEvent;
 
 /**
@@ -43,6 +44,7 @@
 
 protected:
     void contextMenuEvent(QContextMenuEvent *event);
+    void resizeEvent(QResizeEvent *event);
 
 protected Q_SLOTS:
     void rowsInserted(const QModelIndex &parent, int start, int end);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic