]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistview.cpp
New selection effects
[dolphin.git] / src / kitemviews / kitemlistview.cpp
index 369415f1ba73c4552f93397af205d03379e1f2ec..3ed4df3e7bb13f9b410574a85c0fde6dcca7cdcc 100644 (file)
@@ -106,6 +106,7 @@ KItemListView::KItemListView(QGraphicsWidget *parent)
     , m_header(nullptr)
     , m_headerWidget(nullptr)
     , m_indicatorAnimation(nullptr)
+    , m_statusBarOffset(0)
     , m_dropIndicator()
     , m_sizeHintResolver(nullptr)
 {
@@ -192,7 +193,7 @@ qreal KItemListView::scrollOffset() const
 
 qreal KItemListView::maximumScrollOffset() const
 {
-    return m_layouter->maximumScrollOffset();
+    return m_layouter->maximumScrollOffset() + m_statusBarOffset;
 }
 
 void KItemListView::setItemOffset(qreal offset)
@@ -397,6 +398,12 @@ void KItemListView::setGeometry(const QRectF &rect)
     doLayout(NoAnimation);
 }
 
+qreal KItemListView::scrollSingleStep() const
+{
+    const QFontMetrics metrics(font());
+    return metrics.height();
+}
+
 qreal KItemListView::verticalPageStep() const
 {
     qreal headerHeight = 0;
@@ -418,7 +425,7 @@ std::optional<int> KItemListView::itemAt(const QPointF &pos) const
 
         const KItemListWidget *widget = it.value();
         const QPointF mappedPos = widget->mapFromItem(this, pos);
-        if (widget->contains(mappedPos) || widget->selectionRect().contains(mappedPos)) {
+        if (widget->contains(mappedPos)) {
             return it.key();
         }
     }
@@ -535,7 +542,7 @@ QRectF KItemListView::itemContextRect(int index) const
 
     const KItemListWidget *widget = m_visibleItems.value(index);
     if (widget) {
-        contextRect = widget->iconRect() | widget->textRect();
+        contextRect = widget->selectionRectCore();
         contextRect.translate(itemRect(index).topLeft());
     }
 
@@ -554,6 +561,9 @@ void KItemListView::scrollToItem(int index, ViewItemPosition viewItemPosition)
         const qreal headerHeight = m_headerWidget->size().height();
         viewGeometry.adjust(0, headerHeight, 0, 0);
     }
+    if (m_statusBarOffset != 0) {
+        viewGeometry.adjust(0, 0, 0, -m_statusBarOffset);
+    }
     QRectF currentRect = itemRect(index);
 
     if (layoutDirection() == Qt::RightToLeft && scrollOrientation() == Qt::Horizontal) {
@@ -829,6 +839,16 @@ void KItemListView::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt
     }
 }
 
+void KItemListView::setStatusBarOffset(int offset)
+{
+    if (m_statusBarOffset != offset) {
+        m_statusBarOffset = offset;
+        if (m_layouter) {
+            m_layouter->setStatusBarOffset(offset);
+        }
+    }
+}
+
 QVariant KItemListView::itemChange(GraphicsItemChange change, const QVariant &value)
 {
     if (change == QGraphicsItem::ItemSceneHasChanged && scene()) {