]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistcontainer.cpp
Port away from deprecated QFontMetrics::width()
[dolphin.git] / src / kitemviews / kitemlistcontainer.cpp
index 765b366d1aa219e9f8dbadaec1ed5bc749022113..6279b15a994baf8f0f7579f57aa47a981ccf584d 100644 (file)
@@ -1,8 +1,7 @@
 /***************************************************************************
  *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
  *                                                                         *
- *   Based on the Itemviews NG project from Trolltech Labs:                *
- *   http://qt.gitorious.org/qt-labs/itemviews-ng                          *
+ *   Based on the Itemviews NG project from Trolltech Labs                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
 
 #include "kitemlistcontroller.h"
 #include "kitemlistview.h"
-#include "kitemmodelbase.h"
-
 #include "private/kitemlistsmoothscroller.h"
 
 #include <QApplication>
+#include <QFontMetrics>
 #include <QGraphicsScene>
 #include <QGraphicsView>
-#include <QPropertyAnimation>
 #include <QScrollBar>
-#include <QStyle>
 #include <QStyleOption>
 
-#include <KDebug>
-
 /**
  * Replaces the default viewport of KItemListContainer by a
  * non-scrollable viewport. The scrolling is done in an optimized
  */
 class KItemListContainerViewport : public QGraphicsView
 {
+    Q_OBJECT
+
 public:
     KItemListContainerViewport(QGraphicsScene* scene, QWidget* parent);
 protected:
-    virtual void wheelEvent(QWheelEvent* event);
+    void wheelEvent(QWheelEvent* event) override;
 };
 
 KItemListContainerViewport::KItemListContainerViewport(QGraphicsScene* scene, QWidget* parent) :
@@ -70,8 +66,8 @@ void KItemListContainerViewport::wheelEvent(QWheelEvent* event)
 KItemListContainer::KItemListContainer(KItemListController* controller, QWidget* parent) :
     QAbstractScrollArea(parent),
     m_controller(controller),
-    m_horizontalSmoothScroller(0),
-    m_verticalSmoothScroller(0)
+    m_horizontalSmoothScroller(nullptr),
+    m_verticalSmoothScroller(nullptr)
 {
     Q_ASSERT(controller);
     controller->setParent(this);
@@ -83,10 +79,10 @@ KItemListContainer::KItemListContainer(KItemListController* controller, QWidget*
     m_verticalSmoothScroller = new KItemListSmoothScroller(verticalScrollBar(), this);
 
     if (controller->model()) {
-        slotModelChanged(controller->model(), 0);
+        slotModelChanged(controller->model(), nullptr);
     }
     if (controller->view()) {
-        slotViewChanged(controller->view(), 0);
+        slotViewChanged(controller->view(), nullptr);
     }
 
     connect(controller, &KItemListController::modelChanged,
@@ -100,7 +96,7 @@ KItemListContainer::~KItemListContainer()
     // Don't rely on the QObject-order to delete the controller, otherwise
     // the QGraphicsScene might get deleted before the view.
     delete m_controller;
-    m_controller = 0;
+    m_controller = nullptr;
 }
 
 KItemListController* KItemListContainer::controller() const
@@ -185,25 +181,19 @@ void KItemListContainer::wheelEvent(QWheelEvent* event)
     KItemListSmoothScroller* smoothScroller = scrollHorizontally ?
                                               m_horizontalSmoothScroller : m_verticalSmoothScroller;
 
-    const int numDegrees = event->delta() / 8;
-    const int numSteps = numDegrees / 15;
-
-    const QScrollBar* scrollBar = smoothScroller->scrollBar();
-    smoothScroller->scrollTo(scrollBar->value() - numSteps * scrollBar->pageStep() / 4);
-
-    event->accept();
+    smoothScroller->handleWheelEvent(event);
 }
 
 void KItemListContainer::slotScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous)
 {
-    Q_UNUSED(previous);
+    Q_UNUSED(previous)
     updateSmoothScrollers(current);
 }
 
 void KItemListContainer::slotModelChanged(KItemModelBase* current, KItemModelBase* previous)
 {
-    Q_UNUSED(current);
-    Q_UNUSED(previous);
+    Q_UNUSED(current)
+    Q_UNUSED(previous)
 }
 
 void KItemListContainer::slotViewChanged(KItemListView* current, KItemListView* previous)
@@ -222,8 +212,8 @@ void KItemListContainer::slotViewChanged(KItemListView* current, KItemListView*
         disconnect(previous, &KItemListView::maximumItemOffsetChanged,
                    this, &KItemListContainer::updateItemOffsetScrollBar);
         disconnect(previous, &KItemListView::scrollTo, this, &KItemListContainer::scrollTo);
-        m_horizontalSmoothScroller->setTargetObject(0);
-        m_verticalSmoothScroller->setTargetObject(0);
+        m_horizontalSmoothScroller->setTargetObject(nullptr);
+        m_verticalSmoothScroller->setTargetObject(nullptr);
     }
     if (current) {
         scene->addItem(current);
@@ -263,15 +253,22 @@ void KItemListContainer::updateScrollOffsetScrollBar()
         return;
     }
 
-    KItemListSmoothScroller* smoothScroller = 0;
-    QScrollBar* scrollOffsetScrollBar = 0;
+    KItemListSmoothScroller* smoothScroller = nullptr;
+    QScrollBar* scrollOffsetScrollBar = nullptr;
     int singleStep = 0;
     int pageStep = 0;
     int maximum = 0;
     if (view->scrollOrientation() == Qt::Vertical) {
         smoothScroller = m_verticalSmoothScroller;
         scrollOffsetScrollBar = verticalScrollBar();
-        singleStep = view->itemSize().height();
+
+        // Don't scroll super fast when using a wheel mouse:
+        // We want to consider one "line" to be the text label which has a
+        // roughly fixed height rather than using the height of the icon which
+        // may be very tall
+        const QFontMetrics metrics(font());
+        singleStep = metrics.height() * QApplication::wheelScrollLines();
+
         // We cannot use view->size().height() because this height might
         // include the header widget, which is not part of the scrolled area.
         pageStep = view->verticalPageStep();
@@ -314,8 +311,8 @@ void KItemListContainer::updateItemOffsetScrollBar()
         return;
     }
 
-    KItemListSmoothScroller* smoothScroller = 0;
-    QScrollBar* itemOffsetScrollBar = 0;
+    KItemListSmoothScroller* smoothScroller = nullptr;
+    QScrollBar* itemOffsetScrollBar = nullptr;
     int singleStep = 0;
     int pageStep = 0;
     if (view->scrollOrientation() == Qt::Vertical) {
@@ -413,3 +410,4 @@ void KItemListContainer::updateScrollOffsetScrollBarPolicy()
     }
 }
 
+#include "kitemlistcontainer.moc"