]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistcontroller.h
Build with QT_NO_KEYWORDS
[dolphin.git] / src / kitemviews / kitemlistcontroller.h
index 4d5fee3450fa8e391dc881f1878e057e863290b0..24339134e717ebf696ca6d4ffd23639b0a6015fc 100644 (file)
@@ -1,51 +1,38 @@
-/***************************************************************************
- *   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 KITEMLISTCONTROLLER_H
 #define KITEMLISTCONTROLLER_H
 
-#include <libdolphin_export.h>
+#include "dolphin_export.h"
+#include "kitemset.h"
 
 #include <QObject>
-#include <QPixmap>
 #include <QPointF>
-#include <QSet>
+#include <QScroller>
 
+class QTimer;
 class KItemModelBase;
 class KItemListKeyboardSearchManager;
 class KItemListSelectionManager;
 class KItemListView;
 class KItemListWidget;
+class QGestureEvent;
 class QGraphicsSceneHoverEvent;
 class QGraphicsSceneDragDropEvent;
 class QGraphicsSceneMouseEvent;
 class QGraphicsSceneResizeEvent;
 class QGraphicsSceneWheelEvent;
-class QHideEvent;
 class QInputMethodEvent;
 class QKeyEvent;
-class QMimeData;
-class QShowEvent;
+class QTapGesture;
 class QTransform;
+class QTouchEvent;
 
 /**
  * @brief Controls the view, model and selection of an item-list.
@@ -57,10 +44,9 @@ class QTransform;
  * @see KItemModelBase
  * @see KItemListSelectionManager
  */
-class LIBDOLPHINPRIVATE_EXPORT KItemListController : public QObject
+class DOLPHIN_EXPORT KItemListController : public QObject
 {
     Q_OBJECT
-    Q_ENUMS(SelectionBehavior)
     Q_PROPERTY(KItemModelBase* model READ model WRITE setModel)
     Q_PROPERTY(KItemListView *view READ view WRITE setView)
     Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior WRITE setSelectionBehavior)
@@ -73,6 +59,7 @@ public:
         SingleSelection,
         MultiSelection
     };
+    Q_ENUM(SelectionBehavior)
 
     enum AutoActivationBehavior {
         ActivationAndExpansion,
@@ -89,8 +76,8 @@ public:
      * @param view   View of the controller. The ownership is passed to the controller.
      * @param parent Optional parent object.
      */
-    KItemListController(KItemModelBase* model, KItemListView* view, QObject* parent = 0);
-    virtual ~KItemListController();
+    KItemListController(KItemModelBase* model, KItemListView* view, QObject* parent = nullptr);
+    ~KItemListController() override;
 
     void setModel(KItemModelBase* model);
     KItemModelBase* model() const;
@@ -109,6 +96,8 @@ public:
     void setMouseDoubleClickAction(MouseDoubleClickAction action);
     MouseDoubleClickAction mouseDoubleClickAction() const;
 
+    int indexCloseToMousePressedPosition() const;
+
     /**
      * Sets the delay in milliseconds when dragging an object above an item
      * until the item gets activated automatically. A value of -1 indicates
@@ -129,32 +118,15 @@ public:
 
     /**
      * If set to true, the signals itemActivated() and itemsActivated() are emitted
-     * after a single-click of the left mouse button. If set to false (the default), 
-     * the setting from KGlobalSettings::singleClick() is used.
+     * after a single-click of the left mouse button. If set to false (the default),
+     * the setting from style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) is used.
      */
     void setSingleClickActivationEnforced(bool singleClick);
     bool singleClickActivationEnforced() const;
 
-    virtual bool showEvent(QShowEvent* event);
-    virtual bool hideEvent(QHideEvent* event);
-    virtual bool keyPressEvent(QKeyEvent* event);
-    virtual bool inputMethodEvent(QInputMethodEvent* event);
-    virtual bool mousePressEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
-    virtual bool mouseMoveEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
-    virtual bool mouseReleaseEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
-    virtual bool mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
-    virtual bool dragEnterEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
-    virtual bool dragLeaveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
-    virtual bool dragMoveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
-    virtual bool dropEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
-    virtual bool hoverEnterEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
-    virtual bool hoverMoveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
-    virtual bool hoverLeaveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
-    virtual bool wheelEvent(QGraphicsSceneWheelEvent* event, const QTransform& transform);
-    virtual bool resizeEvent(QGraphicsSceneResizeEvent* event, const QTransform& transform);
-    virtual bool processEvent(QEvent* event, const QTransform& transform);
-
-signals:
+    bool processEvent(QEvent* event, const QTransform& transform);
+
+Q_SIGNALS:
     /**
      * Is emitted if exactly one item has been activated by e.g. a mouse-click
      * or by pressing Return/Enter.
@@ -165,7 +137,7 @@ signals:
      * Is emitted if more than one item has been activated by pressing Return/Enter
      * when having a selection.
      */
-    void itemsActivated(const QSet<int>& indexes);
+    void itemsActivated(const KItemSet& indexes);
 
     void itemMiddleClicked(int index);
 
@@ -230,10 +202,25 @@ signals:
      */
     void aboveItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
 
+    /**
+     * Is emitted if the Escape key is pressed.
+     */
+    void escapePressed();
+
     void modelChanged(KItemModelBase* current, KItemModelBase* previous);
     void viewChanged(KItemListView* current, KItemListView* previous);
 
-private slots:
+    void selectedItemTextPressed(int index);
+
+    void scrollerStop();
+    void increaseZoom();
+    void decreaseZoom();
+    void swipeUp();
+
+public Q_SLOTS:
+    void slotStateChanged(QScroller::State newState);
+
+private Q_SLOTS:
     void slotViewScrollOffsetChanged(qreal current, qreal previous);
 
     /**
@@ -299,10 +286,42 @@ private:
      */
     void updateExtendedSelectionRegion();
 
+    bool keyPressEvent(QKeyEvent* event);
+    bool inputMethodEvent(QInputMethodEvent* event);
+    bool mousePressEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
+    bool mouseMoveEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
+    bool mouseReleaseEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
+    bool mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
+    bool dragEnterEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
+    bool dragLeaveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
+    bool dragMoveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
+    bool dropEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
+    bool hoverEnterEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
+    bool hoverMoveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
+    bool hoverLeaveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
+    bool wheelEvent(QGraphicsSceneWheelEvent* event, const QTransform& transform);
+    bool resizeEvent(QGraphicsSceneResizeEvent* event, const QTransform& transform);
+    bool gestureEvent(QGestureEvent* event, const QTransform& transform);
+    bool touchBeginEvent(QTouchEvent* event, const QTransform& transform);
+    void tapTriggered(QTapGesture* tap, const QTransform& transform);
+    void tapAndHoldTriggered(QGestureEvent* event, const QTransform& transform);
+    void pinchTriggered(QGestureEvent* event, const QTransform& transform);
+    void swipeTriggered(QGestureEvent* event, const QTransform& transform);
+    void twoFingerTapTriggered(QGestureEvent* event, const QTransform& transform);
+    bool onPress(const QPoint& screenPos, const QPointF& pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons);
+    bool onRelease(const QPointF& pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons, bool touch);
+    void startRubberBand();
+
 private:
     bool m_singleClickActivationEnforced;
     bool m_selectionTogglePressed;
     bool m_clearSelectionIfItemsAreNotDragged;
+    bool m_isSwipeGesture;
+    bool m_dragActionOrRightClick;
+    bool m_scrollerIsScrolling;
+    bool m_pinchGestureInProgress;
+    bool m_mousePress;
+    bool m_isTouchEvent;
     SelectionBehavior m_selectionBehavior;
     AutoActivationBehavior m_autoActivationBehavior;
     MouseDoubleClickAction m_mouseDoubleClickAction;
@@ -315,13 +334,16 @@ private:
 
     QTimer* m_autoActivationTimer;
 
+    Qt::GestureType m_swipeGesture;
+    Qt::GestureType m_twoFingerTapGesture;
+
     /**
      * When starting a rubberband selection during a Shift- or Control-key has been
      * pressed the current selection should never be deleted. To be able to restore
      * the current selection it is remembered in m_oldSelection before the
      * rubberband gets activated.
      */
-    QSet<int> m_oldSelection;
+    KItemSet m_oldSelection;
 
     /**
      * Assuming a view is given with a vertical scroll-orientation, grouped items and