X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/462982faa361c79daab43ce526ae64646b1ea63c..8e3addb7e73122a4c89ef347b03f714ff75a253a:/src/kitemviews/kstandarditemlistview.cpp diff --git a/src/kitemviews/kstandarditemlistview.cpp b/src/kitemviews/kstandarditemlistview.cpp index bc766a5dc..0d57388f3 100644 --- a/src/kitemviews/kstandarditemlistview.cpp +++ b/src/kitemviews/kstandarditemlistview.cpp @@ -4,19 +4,22 @@ * 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); setVisibleRoles({"text"}); + setAlternateBackgrounds(true); } KStandardItemListView::~KStandardItemListView() @@ -34,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); @@ -47,40 +52,49 @@ 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. // 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; } @@ -88,11 +102,27 @@ bool KStandardItemListView::itemSizeHintUpdateRequired(const QSet& 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) @@ -113,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(); @@ -152,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"