KItemListSmoothScroller *smoothScroller = nullptr;
QScrollBar *scrollOffsetScrollBar = nullptr;
- int singleStep = 0;
int pageStep = 0;
int maximum = 0;
if (view->scrollOrientation() == Qt::Vertical) {
}
scrollOffsetScrollBar = verticalScrollBar();
- // 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();
return;
}
scrollOffsetScrollBar = horizontalScrollBar();
- singleStep = view->itemSize().width();
pageStep = view->size().width();
maximum = qMax(0, int(view->maximumScrollOffset() - view->size().width()));
}
+ const int singleStep = view->scrollSingleStep();
const int value = view->scrollOffset();
if (smoothScroller->requestScrollBarUpdate(maximum)) {
const bool updatePolicy = (scrollOffsetScrollBar->maximum() > 0 && maximum == 0) || horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOn;
doLayout(NoAnimation);
}
+qreal KItemListView::scrollSingleStep() const
+{
+ const QFontMetrics metrics(font());
+ return metrics.height();
+}
+
qreal KItemListView::verticalPageStep() const
{
qreal headerHeight = 0;
*/
qreal verticalPageStep() const;
+ /**
+ * @return The line step which should be used for the scroll by mouse wheel.
+ */
+ virtual qreal scrollSingleStep() const;
+
/**
* @return Index of the item that is below the point \a pos.
* The position is relative to the upper right of
* SPDX-License-Identifier: GPL-2.0-or-later
*/
+#include <QApplication>
+
#include "kstandarditemlistview.h"
#include "kstandarditemlistwidget.h"
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)
/** To be overriden by sub-classes to specify when full row highlighting should be enabled. */
virtual bool itemLayoutHighlightEntireRow(ItemLayout layout) const;
virtual void onItemLayoutChanged(ItemLayout current, ItemLayout previous);
+ virtual qreal scrollSingleStep() const override;
void onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous) override;
void onSupportsItemExpandingChanged(bool supportsExpanding) override;
void polishEvent() override;