Enable Touch Scroll in Nick-View
authorromibi <romibi@bluewin.ch>
Fri, 10 Jun 2016 23:48:11 +0000 (01:48 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Wed, 15 Jun 2016 19:53:16 +0000 (21:53 +0200)
src/uisupport/nickview.cpp
src/uisupport/nickview.h

index b1a5a4d..ea29d3f 100644 (file)
@@ -25,6 +25,8 @@
 #include <QScrollBar>
 #include <QDebug>
 #include <QMenu>
+#include <QTouchEvent>
+#include <QScrollBar>
 
 #include "buffermodel.h"
 #include "client.h"
@@ -72,6 +74,7 @@ void NickView::init()
 
     connect(selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), SIGNAL(selectionUpdated()));
     connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), SIGNAL(selectionUpdated()));
+       setAttribute(Qt::WA_AcceptTouchEvents);
 }
 
 
@@ -150,3 +153,39 @@ void NickView::startQuery(const QModelIndex &index)
 
     Client::bufferModel()->switchToOrStartQuery(networkId, ircUser->nick());
 }
+
+bool NickView::event(QEvent *event) {
+       if (event->type() == QEvent::TouchBegin && _lastTouchStart < QDateTime::currentMSecsSinceEpoch() - 1000) { //(slow) double tab = normal behaviour = select multiple. 1000 ok?
+               _touchScrollInProgress = true;
+               _lastTouchStart = QDateTime::currentMSecsSinceEpoch();
+               setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
+               return true;
+       }
+
+       if (event->type() == QEvent::TouchUpdate && _touchScrollInProgress) {
+               QTouchEvent::TouchPoint p = ((QTouchEvent*)event)->touchPoints().at(0);
+               verticalScrollBar()->setValue(verticalScrollBar()->value() - (p.pos().y() - p.lastPos().y()));
+               return true;
+       }
+
+#if QT_VERSION >= 0x050000
+       if (event->type() == QEvent::TouchEnd || event->type() == QEvent::TouchCancel) {
+#else
+    if (event->type() == QEvent::TouchEnd) {
+#endif
+               _touchScrollInProgress = false;
+               return true;
+       }
+
+       return QTreeView::event(event);
+}
+
+void NickView::mousePressEvent(QMouseEvent * event) {
+       if (!_touchScrollInProgress)
+               QTreeView::mousePressEvent(event);
+}
+
+void NickView::mouseMoveEvent(QMouseEvent * event) {
+       if (!_touchScrollInProgress)
+               QTreeView::mouseMoveEvent(event);
+}
index bb1c948..8638039 100644 (file)
@@ -37,6 +37,9 @@ protected:
 
     //! This reimplementation ensures that the current index is first in list
     virtual QModelIndexList selectedIndexes() const;
+       virtual bool event(QEvent *event);
+       virtual void mouseMoveEvent(QMouseEvent *event);
+       virtual void mousePressEvent(QMouseEvent *event);
 
     void unanimatedExpandAll();
 
@@ -52,6 +55,8 @@ signals:
 
 private:
     friend class NickListWidget; // needs selectedIndexes()
+       qint64 _lastTouchStart = 0;
+       bool _touchScrollInProgress = false;
 };