]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kstandarditemlistview.cpp
DolphinView: Conform to global scroll speed
[dolphin.git] / src / kitemviews / kstandarditemlistview.cpp
index 929ee1da80a2db5b56cb589a46b09c876a9362bf..0d57388f3a509b4b8e2b8151287f7fa691180f54 100644 (file)
@@ -1,21 +1,10 @@
-/***************************************************************************
- *   Copyright (C) 2012 by Peter Penz <peter.penz19@gmail.com>             *
- *                                                                         *
- *   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  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include <QApplication>
 
 #include "kstandarditemlistview.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);
     setVisibleRoles({"text"});
+    setAlternateBackgrounds(true);
 }
 
 KStandardItemListView::~KStandardItemListView()
@@ -47,6 +37,8 @@ void KStandardItemListView::setItemLayout(ItemLayout layout)
     const ItemLayout previous = m_itemLayout;
     m_itemLayout = layout;
 
+    // keep the leading padding option unchanged here
+    setHighlightEntireRow(itemLayoutHighlightEntireRow(layout));
     setSupportsItemExpanding(itemLayoutSupportsItemExpanding(layout));
     setScrollOrientation(layout == CompactLayout ? Qt::Horizontal : Qt::Vertical);
 
@@ -60,40 +52,49 @@ 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.
     // Even if the icons have a different size they are always aligned within
     // the area defined by KItemStyleOption.iconSize and hence result in no
     // change of the item-size.
-    foreach (const QByteArray& role, visibleRoles()) {
+    const auto roles = visibleRoles();
+    for (const QByteArray &role : roles) {
         if (changedRoles.contains(role)) {
             return true;
         }
@@ -101,48 +102,68 @@ 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);
-    Q_UNUSED(previous);
+    Q_UNUSED(current)
+    Q_UNUSED(previous)
     updateLayoutOfVisibleItems();
 }
 
 void KStandardItemListView::onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous)
 {
-    Q_UNUSED(current);
-    Q_UNUSED(previous);
+    Q_UNUSED(current)
+    Q_UNUSED(previous)
     updateLayoutOfVisibleItems();
 }
 
 void KStandardItemListView::onSupportsItemExpandingChanged(bool supportsExpanding)
 {
-    Q_UNUSED(supportsExpanding);
+    Q_UNUSED(supportsExpanding)
     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();
 
@@ -165,9 +186,11 @@ void KStandardItemListView::applyDefaultStyleOption(int iconSize,
 void KStandardItemListView::updateLayoutOfVisibleItems()
 {
     if (model()) {
-        foreach (KItemListWidget* widget, visibleItemListWidgets()) {
+        const auto widgets = visibleItemListWidgets();
+        for (KItemListWidget *widget : widgets) {
             initializeItemListWidget(widget);
         }
     }
 }
 
+#include "moc_kstandarditemlistview.cpp"