]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistview.h
Merge remote-tracking branch 'origin/release/20.12'
[dolphin.git] / src / kitemviews / kitemlistview.h
index ed1199877f7ad9f4f5d17ccd7cab1e259b5738b9..e6bf5ad90809fdc60b25759f6e9fe09bca305356 100644 (file)
@@ -1,35 +1,21 @@
-/***************************************************************************
- *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
- *                                                                         *
- *   Based on the Itemviews NG project from Trolltech Labs:                *
- *   http://qt.gitorious.org/qt-labs/itemviews-ng                          *
- *                                                                         *
- *   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: 2011 Peter Penz <peter.penz19@gmail.com>
+ *
+ * Based on the Itemviews NG project from Trolltech Labs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #ifndef KITEMLISTVIEW_H
 #define KITEMLISTVIEW_H
 
 #include "dolphin_export.h"
+#include "kitemviews/kitemliststyleoption.h"
+#include "kitemviews/kitemlistwidget.h"
+#include "kitemviews/kitemmodelbase.h"
+#include "kitemviews/kstandarditemlistgroupheader.h"
+#include "kitemviews/private/kitemlistviewanimation.h"
 
-#include <kitemviews/kstandarditemlistgroupheader.h>
-#include <kitemviews/kitemliststyleoption.h>
-#include <kitemviews/kitemlistwidget.h>
-#include <kitemviews/kitemmodelbase.h>
-#include <kitemviews/private/kitemlistviewanimation.h>
 #include <QGraphicsWidget>
 #include <QSet>
 
@@ -45,6 +31,8 @@ class KItemListWidget;
 class KItemListWidgetInformant;
 class KItemListWidgetCreatorBase;
 class QTimer;
+class QPropertyAnimation;
+class QVariantAnimation;
 
 /**
  * @brief Represents the view of an item-list.
@@ -67,8 +55,8 @@ class DOLPHIN_EXPORT KItemListView : public QGraphicsWidget
     Q_PROPERTY(qreal itemOffset READ itemOffset WRITE setItemOffset)
 
 public:
-    KItemListView(QGraphicsWidget* parent = 0);
-    virtual ~KItemListView();
+    explicit KItemListView(QGraphicsWidget* parent = nullptr);
+    ~KItemListView() override;
 
     /**
      * Offset of the scrollbar that represents the scroll-orientation
@@ -158,14 +146,9 @@ public:
      */
     QSizeF itemSize() const;
 
-    /**
-     * @return The size hint of all items. It is provided by the KItemListSizeHintResolver.
-     */
-    QSizeF itemSizeHint() const;
-
     const KItemListStyleOption& styleOption() const;
 
-    virtual void setGeometry(const QRectF& rect) Q_DECL_OVERRIDE;
+    void setGeometry(const QRectF& rect) override;
 
     /**
      * @return The page step which should be used by the vertical scroll bar.
@@ -183,6 +166,7 @@ public:
     int itemAt(const QPointF& pos) const;
     bool isAboveSelectionToggle(int index, const QPointF& pos) const;
     bool isAboveExpansionToggle(int index, const QPointF& pos) const;
+    bool isAboveText(int index, const QPointF& pos) const;
 
     /**
      * @return Index of the first item that is at least partly visible.
@@ -209,7 +193,7 @@ public:
 
     /**
      * If set to true, items having child-items can be expanded to show the child-items as
-     * part of the view. Per default the expanding of items is is disabled. If expanding of
+     * part of the view. Per default the expanding of items is disabled. If expanding of
      * items is enabled, the methods KItemModelBase::setExpanded(), KItemModelBase::isExpanded(),
      * KItemModelBase::isExpandable() and KItemModelBase::expandedParentsCount()
      * must be reimplemented. The view-implementation
@@ -228,7 +212,7 @@ public:
     /**
      * @return The context rectangle of the item relative to the top/left of
      *         the currently visible area (see KItemListView::offset()). The
-     *         context rectangle is defined by by the united rectangle of
+     *         context rectangle is defined by the united rectangle of
      *         the icon rectangle and the text rectangle (see KItemListWidget::iconRect()
      *         and KItemListWidget::textRect()) and is useful as reference for e.g. aligning
      *         a tooltip or a context-menu for an item. Note that a context rectangle will
@@ -284,7 +268,7 @@ public:
      */
     void editRole(int index, const QByteArray& role);
 
-    virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0) Q_DECL_OVERRIDE;
+    void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override;
 
 signals:
     void scrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous);
@@ -324,7 +308,7 @@ signals:
     void roleEditingFinished(int index, const QByteArray& role, const QVariant& value);
 
 protected:
-    virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value) Q_DECL_OVERRIDE;
+    QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
     void setItemSize(const QSizeF& size);
     void setStyleOption(const KItemListStyleOption& option);
 
@@ -381,13 +365,13 @@ protected:
     virtual void onTransactionBegin();
     virtual void onTransactionEnd();
 
-    virtual bool event(QEvent* event) Q_DECL_OVERRIDE;
-    virtual void mousePressEvent(QGraphicsSceneMouseEvent* event) Q_DECL_OVERRIDE;
-    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* event) Q_DECL_OVERRIDE;
-    virtual void dragEnterEvent(QGraphicsSceneDragDropEvent* event) Q_DECL_OVERRIDE;
-    virtual void dragMoveEvent(QGraphicsSceneDragDropEvent* event) Q_DECL_OVERRIDE;
-    virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) Q_DECL_OVERRIDE;
-    virtual void dropEvent(QGraphicsSceneDragDropEvent* event) Q_DECL_OVERRIDE;
+    bool event(QEvent* event) override;
+    void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
+    void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
+    void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override;
+    void dragMoveEvent(QGraphicsSceneDragDropEvent* event) override;
+    void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) override;
+    void dropEvent(QGraphicsSceneDragDropEvent* event) override;
 
     QList<KItemListWidget*> visibleItemListWidgets() const;
 
@@ -745,6 +729,7 @@ private:
 
     bool m_skipAutoScrollForRubberBand;
     KItemListRubberBand* m_rubberBand;
+    KItemListRubberBand* m_tapAndHoldIndicator;
 
     QPointF m_mousePos;
     int m_autoScrollIncrement;
@@ -753,6 +738,8 @@ private:
     KItemListHeader* m_header;
     KItemListHeaderWidget* m_headerWidget;
 
+    QPropertyAnimation* m_indicatorAnimation;
+
     // When dragging items into the view where the sort-role of the model
     // is empty, a visual indicator should be shown during dragging where
     // the dropping will happen. This indicator is specified by an index
@@ -761,6 +748,8 @@ private:
     // by KItemListView::showDropIndicator() and KItemListView::hideDropIndicator().
     QRectF m_dropIndicator;
 
+    QList<QVariantAnimation*> m_rubberBandAnimations;
+
     friend class KItemListContainer; // Accesses scrollBarRequired()
     friend class KItemListHeader;    // Accesses m_headerWidget
     friend class KItemListController;
@@ -802,7 +791,7 @@ private:
 class DOLPHIN_EXPORT KItemListWidgetCreatorBase : public KItemListCreatorBase
 {
 public:
-    virtual ~KItemListWidgetCreatorBase();
+    ~KItemListWidgetCreatorBase() override;
 
     virtual KItemListWidget* create(KItemListView* view) = 0;
 
@@ -823,15 +812,15 @@ class KItemListWidgetCreator : public KItemListWidgetCreatorBase
 {
 public:
     KItemListWidgetCreator();
-    virtual ~KItemListWidgetCreator();
+    ~KItemListWidgetCreator() override;
 
-    virtual KItemListWidget* create(KItemListView* view) Q_DECL_OVERRIDE;
+    KItemListWidget* create(KItemListView* view) override;
 
-    virtual void calculateItemSizeHints(QVector<qreal>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const Q_DECL_OVERRIDE;
+    void calculateItemSizeHints(QVector<qreal>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const override;
 
-    virtual qreal preferredRoleColumnWidth(const QByteArray& role,
+    qreal preferredRoleColumnWidth(const QByteArray& role,
                                            int index,
-                                           const KItemListView* view) const Q_DECL_OVERRIDE;
+                                           const KItemListView* view) const override;
 private:
     KItemListWidgetInformant* m_informant;
 };
@@ -884,7 +873,7 @@ qreal KItemListWidgetCreator<T>::preferredRoleColumnWidth(const QByteArray& role
 class DOLPHIN_EXPORT KItemListGroupHeaderCreatorBase : public KItemListCreatorBase
 {
 public:
-    virtual ~KItemListGroupHeaderCreatorBase();
+    ~KItemListGroupHeaderCreatorBase() override;
     virtual KItemListGroupHeader* create(KItemListView* view) = 0;
     virtual void recycle(KItemListGroupHeader* header);
 };
@@ -893,8 +882,8 @@ template <class T>
 class KItemListGroupHeaderCreator : public KItemListGroupHeaderCreatorBase
 {
 public:
-    virtual ~KItemListGroupHeaderCreator();
-    virtual KItemListGroupHeader* create(KItemListView* view) Q_DECL_OVERRIDE;
+    ~KItemListGroupHeaderCreator() override;
+    KItemListGroupHeader* create(KItemListView* view) override;
 };
 
 template <class T>