]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistcontroller.h
kitemlistview: Port KItemListView::itemAt to std::optional
[dolphin.git] / src / kitemviews / kitemlistcontroller.h
index a84d1b8c8be7304bedf9b51cf2191f833226c5a5..5fe195e9f490b7411b592f2cebd01f9c79332c9c 100644 (file)
@@ -9,11 +9,14 @@
 #ifndef KITEMLISTCONTROLLER_H
 #define KITEMLISTCONTROLLER_H
 
+#include <optional>
+
 #include "dolphin_export.h"
 #include "kitemset.h"
 
 #include <QObject>
 #include <QPointF>
+#include <QScroller>
 
 class QTimer;
 class KItemModelBase;
@@ -21,6 +24,7 @@ class KItemListKeyboardSearchManager;
 class KItemListSelectionManager;
 class KItemListView;
 class KItemListWidget;
+class QGestureEvent;
 class QGraphicsSceneHoverEvent;
 class QGraphicsSceneDragDropEvent;
 class QGraphicsSceneMouseEvent;
@@ -28,7 +32,9 @@ class QGraphicsSceneResizeEvent;
 class QGraphicsSceneWheelEvent;
 class QInputMethodEvent;
 class QKeyEvent;
+class QTapGesture;
 class QTransform;
+class QTouchEvent;
 
 /**
  * @brief Controls the view, model and selection of an item-list.
@@ -122,7 +128,7 @@ public:
 
     bool processEvent(QEvent* event, const QTransform& transform);
 
-signals:
+Q_SIGNALS:
     /**
      * Is emitted if exactly one item has been activated by e.g. a mouse-click
      * or by pressing Return/Enter.
@@ -133,7 +139,7 @@ signals:
      * Is emitted if more than one item has been activated by pressing Return/Enter
      * when having a selection.
      */
-    void itemsActivated(const KItemSetindexes);
+    void itemsActivated(const KItemSet &indexes);
 
     void itemMiddleClicked(int index);
 
@@ -208,7 +214,15 @@ signals:
 
     void selectedItemTextPressed(int index);
 
-private slots:
+    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);
 
     /**
@@ -289,11 +303,27 @@ private:
     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;
@@ -301,11 +331,14 @@ private:
     KItemListView* m_view;
     KItemListSelectionManager* m_selectionManager;
     KItemListKeyboardSearchManager* m_keyboardManager;
-    int m_pressedIndex;
+    std::optional<int> m_pressedIndex;
     QPointF m_pressedMousePos;
 
     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