]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kstandarditemlistview.cpp
DolphinView: Conform to global scroll speed
[dolphin.git] / src / kitemviews / kstandarditemlistview.cpp
index 4b7c2d9a42ac84224fd23d55e47aa448fa8faae9..0d57388f3a509b4b8e2b8151287f7fa691180f54 100644 (file)
@@ -4,15 +4,17 @@
  * SPDX-License-Identifier: GPL-2.0-or-later
  */
 
+#include <QApplication>
+
 #include "kstandarditemlistview.h"
 
 #include "kstandarditemlistwidget.h"
 
 #include <KIconLoader>
 
-KStandardItemListView::KStandardItemListView(QGraphicsWidget* parent) :
-    KItemListView(parent),
-    m_itemLayout(DetailsLayout)
+KStandardItemListView::KStandardItemListView(QGraphicsWidget *parent)
+    : KItemListView(parent)
+    m_itemLayout(DetailsLayout)
 {
     setAcceptDrops(true);
     setScrollOrientation(Qt::Vertical);
@@ -36,7 +38,7 @@ void KStandardItemListView::setItemLayout(ItemLayout layout)
     m_itemLayout = layout;
 
     // keep the leading padding option unchanged here
-    setHighlightEntireRow(layout == DetailsLayout);
+    setHighlightEntireRow(itemLayoutHighlightEntireRow(layout));
     setSupportsItemExpanding(itemLayoutSupportsItemExpanding(layout));
     setScrollOrientation(layout == CompactLayout ? Qt::Horizontal : Qt::Vertical);
 
@@ -50,34 +52,41 @@ KStandardItemListView::ItemLayout KStandardItemListView::itemLayout() const
     return m_itemLayout;
 }
 
-KItemListWidgetCreatorBaseKStandardItemListView::defaultWidgetCreator() const
+KItemListWidgetCreatorBase *KStandardItemListView::defaultWidgetCreator() const
 {
     return new KItemListWidgetCreator<KStandardItemListWidget>();
 }
 
-KItemListGroupHeaderCreatorBaseKStandardItemListView::defaultGroupHeaderCreator() const
+KItemListGroupHeaderCreatorBase *KStandardItemListView::defaultGroupHeaderCreator() const
 {
     return new KItemListGroupHeaderCreator<KStandardItemListGroupHeader>();
 }
 
-void KStandardItemListView::initializeItemListWidget(KItemListWidgetitem)
+void KStandardItemListView::initializeItemListWidget(KItemListWidget *item)
 {
-    KStandardItemListWidget* standardItemListWidget = qobject_cast<KStandardItemListWidget*>(item);
+    KStandardItemListWidget *standardItemListWidget = qobject_cast<KStandardItemListWidget *>(item);
     Q_ASSERT(standardItemListWidget);
 
     switch (itemLayout()) {
-    case IconsLayout:   standardItemListWidget->setLayout(KStandardItemListWidget::IconsLayout); break;
-    case CompactLayout: standardItemListWidget->setLayout(KStandardItemListWidget::CompactLayout); break;
-    case DetailsLayout: standardItemListWidget->setLayout(KStandardItemListWidget::DetailsLayout); break;
-    default:            Q_ASSERT(false); break;
+    case IconsLayout:
+        standardItemListWidget->setLayout(KStandardItemListWidget::IconsLayout);
+        break;
+    case CompactLayout:
+        standardItemListWidget->setLayout(KStandardItemListWidget::CompactLayout);
+        break;
+    case DetailsLayout:
+        standardItemListWidget->setLayout(KStandardItemListWidget::DetailsLayout);
+        break;
+    default:
+        Q_ASSERT(false);
+        break;
     }
 
     standardItemListWidget->setHighlightEntireRow(highlightEntireRow());
     standardItemListWidget->setSupportsItemExpanding(supportsItemExpanding());
 }
 
-
-bool KStandardItemListView::itemSizeHintUpdateRequired(const QSet<QByteArray>& changedRoles) const
+bool KStandardItemListView::itemSizeHintUpdateRequired(const QSet<QByteArray> &changedRoles) const
 {
     // The only thing that can modify the item's size hint is the amount of space
     // needed to display the text for the visible roles.
@@ -85,7 +94,7 @@ bool KStandardItemListView::itemSizeHintUpdateRequired(const QSet<QByteArray>& c
     // the area defined by KItemStyleOption.iconSize and hence result in no
     // change of the item-size.
     const auto roles = visibleRoles();
-    for (const QByteArrayrole : roles) {
+    for (const QByteArray &role : roles) {
         if (changedRoles.contains(role)) {
             return true;
         }
@@ -93,11 +102,27 @@ bool KStandardItemListView::itemSizeHintUpdateRequired(const QSet<QByteArray>& c
     return false;
 }
 
+bool KStandardItemListView::itemLayoutHighlightEntireRow(ItemLayout layout) const
+{
+    return layout == DetailsLayout;
+}
+
 bool KStandardItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout) const
 {
     return layout == DetailsLayout;
 }
 
+qreal KStandardItemListView::scrollSingleStep() const
+{
+    if (itemLayout() == DetailsLayout) {
+        // We want each scroll in details view mode to move by some number of complete rows.
+        const int rowsPerFullScroll = qCeil((KItemListView::scrollSingleStep() * QApplication::wheelScrollLines()) / itemSize().height());
+        return (rowsPerFullScroll * itemSize().height()) / QApplication::wheelScrollLines();
+    }
+
+    return KItemListView::scrollSingleStep();
+}
+
 void KStandardItemListView::onItemLayoutChanged(ItemLayout current, ItemLayout previous)
 {
     Q_UNUSED(current)
@@ -118,23 +143,27 @@ void KStandardItemListView::onSupportsItemExpandingChanged(bool supportsExpandin
     updateLayoutOfVisibleItems();
 }
 
-
 void KStandardItemListView::polishEvent()
 {
     switch (m_itemLayout) {
-    case IconsLayout:   applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_LargeIconSize), 2, 4, 8); break;
-    case CompactLayout: applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_SmallIconSize),  2, 8, 0); break;
-    case DetailsLayout: applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_SmallIconSize),  2, 0, 0); break;
-    default:            Q_ASSERT(false); break;
+    case IconsLayout:
+        applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_LargeIconSize), 2, 4, 8);
+        break;
+    case CompactLayout:
+        applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_SmallIconSize), 2, 8, 0);
+        break;
+    case DetailsLayout:
+        applyDefaultStyleOption(style()->pixelMetric(QStyle::PM_SmallIconSize), 2, 0, 0);
+        break;
+    default:
+        Q_ASSERT(false);
+        break;
     }
 
     QGraphicsWidget::polishEvent();
 }
 
-void KStandardItemListView::applyDefaultStyleOption(int iconSize,
-                                                    int padding,
-                                                    int horizontalMargin,
-                                                    int verticalMargin)
+void KStandardItemListView::applyDefaultStyleOption(int iconSize, int padding, int horizontalMargin, int verticalMargin)
 {
     KItemListStyleOption option = styleOption();
 
@@ -158,9 +187,10 @@ void KStandardItemListView::updateLayoutOfVisibleItems()
 {
     if (model()) {
         const auto widgets = visibleItemListWidgets();
-        for (KItemListWidgetwidget : widgets) {
+        for (KItemListWidget *widget : widgets) {
             initializeItemListWidget(widget);
         }
     }
 }
 
+#include "moc_kstandarditemlistview.cpp"