Enable Touch Scroll in Buffer-View
[quassel.git] / src / uisupport / bufferview.cpp
index 0f80d0d..3d45167 100644 (file)
@@ -28,6 +28,9 @@
 #include <QMenu>
 #include <QMessageBox>
 #include <QSet>
+#include <QTouchEvent>
+#include <QScrollBar>
+
 
 #include "action.h"
 #include "buffermodel.h"
@@ -84,6 +87,7 @@ void BufferView::init()
     setAcceptDrops(true);
     setDropIndicatorShown(true);
 #endif
+       setAttribute(Qt::WA_AcceptTouchEvents);
 
     setSortingEnabled(true);
     sortByColumn(0, Qt::AscendingOrder);
@@ -210,6 +214,40 @@ void BufferView::joinChannel(const QModelIndex &index)
     Client::userInput(bufferInfo, QString("/JOIN %1").arg(bufferInfo.bufferName()));
 }
 
+bool BufferView::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 BufferView::mousePressEvent(QMouseEvent * event) {
+       if (!_touchScrollInProgress)
+               QTreeView::mousePressEvent(event);
+}
+
+void BufferView::mouseMoveEvent(QMouseEvent * event) {
+       if (!_touchScrollInProgress)
+               QTreeView::mouseMoveEvent(event);
+}
 
 void BufferView::keyPressEvent(QKeyEvent *event)
 {