X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/9478f1473006147c643c228793822b2eeb4b0606..e57f6215659ee36877c7c36c9e3fcba0ba5d03a0:/src/kitemviews/kstandarditemlistview.cpp diff --git a/src/kitemviews/kstandarditemlistview.cpp b/src/kitemviews/kstandarditemlistview.cpp index 0ba23e654..0d57388f3 100644 --- a/src/kitemviews/kstandarditemlistview.cpp +++ b/src/kitemviews/kstandarditemlistview.cpp @@ -4,15 +4,17 @@ * SPDX-License-Identifier: GPL-2.0-or-later */ +#include + #include "kstandarditemlistview.h" #include "kstandarditemlistwidget.h" #include -KStandardItemListView::KStandardItemListView(QGraphicsWidget* parent) : - KItemListView(parent), - m_itemLayout(DetailsLayout) +KStandardItemListView::KStandardItemListView(QGraphicsWidget *parent) + : KItemListView(parent) + , m_itemLayout(DetailsLayout) { setAcceptDrops(true); setScrollOrientation(Qt::Vertical); @@ -50,34 +52,41 @@ KStandardItemListView::ItemLayout KStandardItemListView::itemLayout() const return m_itemLayout; } -KItemListWidgetCreatorBase* KStandardItemListView::defaultWidgetCreator() const +KItemListWidgetCreatorBase *KStandardItemListView::defaultWidgetCreator() const { return new KItemListWidgetCreator(); } -KItemListGroupHeaderCreatorBase* KStandardItemListView::defaultGroupHeaderCreator() const +KItemListGroupHeaderCreatorBase *KStandardItemListView::defaultGroupHeaderCreator() const { return new KItemListGroupHeaderCreator(); } -void KStandardItemListView::initializeItemListWidget(KItemListWidget* item) +void KStandardItemListView::initializeItemListWidget(KItemListWidget *item) { - KStandardItemListWidget* standardItemListWidget = qobject_cast(item); + KStandardItemListWidget *standardItemListWidget = qobject_cast(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& changedRoles) const +bool KStandardItemListView::itemSizeHintUpdateRequired(const QSet &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& c // the area defined by KItemStyleOption.iconSize and hence result in no // change of the item-size. const auto roles = visibleRoles(); - for (const QByteArray& role : roles) { + for (const QByteArray &role : roles) { if (changedRoles.contains(role)) { return true; } @@ -103,6 +112,17 @@ bool KStandardItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout) c 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) @@ -123,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(); @@ -163,9 +187,10 @@ void KStandardItemListView::updateLayoutOfVisibleItems() { if (model()) { const auto widgets = visibleItemListWidgets(); - for (KItemListWidget* widget : widgets) { + for (KItemListWidget *widget : widgets) { initializeItemListWidget(widget); } } } +#include "moc_kstandarditemlistview.cpp"