The event override for NickView and BufferView was Copy&Paste.
To reduce duplicate code i moved that to a new class (TreeViewTouch) now
between QTreeView and the mentioned Classes.
styledlabel.cpp
tabcompleter.cpp
toolbaractionprovider.cpp
+ treeviewtouch.cpp
uisettings.cpp
uistyle.cpp
#include <QMenu>
#include <QMessageBox>
#include <QSet>
-#include <QTouchEvent>
-#include <QScrollBar>
-
#include "action.h"
#include "buffermodel.h"
* The TreeView showing the Buffers
*****************************************/
// Please be carefull when reimplementing methods which are used to inform the view about changes to the data
-// to be on the safe side: call QTreeView's method aswell
+// to be on the safe side: call QTreeView's method aswell (or TreeViewTouch's)
BufferView::BufferView(QWidget *parent)
- : QTreeView(parent)
+ : TreeViewTouch(parent)
{
connect(this, SIGNAL(collapsed(const QModelIndex &)), SLOT(storeExpandedState(const QModelIndex &)));
connect(this, SIGNAL(expanded(const QModelIndex &)), SLOT(storeExpandedState(const QModelIndex &)));
setAcceptDrops(true);
setDropIndicatorShown(true);
#endif
- setAttribute(Qt::WA_AcceptTouchEvents);
setSortingEnabled(true);
sortByColumn(0, Qt::AscendingOrder);
{
delete selectionModel();
- QTreeView::setModel(model);
+ TreeViewTouch::setModel(model);
init();
// remove old Actions
QList<QAction *> oldactions = header()->actions();
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)
{
if (event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete) {
event->accept();
removeSelectedBuffers();
}
- QTreeView::keyPressEvent(event);
+ TreeViewTouch::keyPressEvent(event);
}
const int margin = 2;
if (cursorPos.y() - indexRect.top() < margin
|| indexRect.bottom() - cursorPos.y() < margin)
- return QTreeView::dropEvent(event);
+ return TreeViewTouch::dropEvent(event);
QList<QPair<NetworkId, BufferId> > bufferList = Client::networkModel()->mimeDataToBufferList(event->mimeData());
if (bufferList.count() != 1)
- return QTreeView::dropEvent(event);
+ return TreeViewTouch::dropEvent(event);
BufferId bufferId2 = bufferList[0].second;
if (index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType)
- return QTreeView::dropEvent(event);
+ return TreeViewTouch::dropEvent(event);
if (index.data(NetworkModel::BufferTypeRole) != BufferInfo::QueryBuffer)
- return QTreeView::dropEvent(event);
+ return TreeViewTouch::dropEvent(event);
BufferId bufferId1 = index.data(NetworkModel::BufferIdRole).value<BufferId>();
if (bufferId1 == bufferId2)
- return QTreeView::dropEvent(event);
+ return TreeViewTouch::dropEvent(event);
int res = QMessageBox::question(0, tr("Merge buffers permanently?"),
tr("Do you want to merge the buffer \"%1\" permanently into buffer \"%2\"?\n This cannot be reversed!").arg(Client::networkModel()->bufferName(bufferId2)).arg(Client::networkModel()->bufferName(bufferId1)),
void BufferView::rowsInserted(const QModelIndex &parent, int start, int end)
{
- QTreeView::rowsInserted(parent, start, end);
+ TreeViewTouch::rowsInserted(parent, start, end);
// ensure that newly inserted network nodes are expanded per default
if (parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType)
#if QT_VERSION < 0x050000
void BufferView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
- QTreeView::dataChanged(topLeft, bottomRight);
+ TreeViewTouch::dataChanged(topLeft, bottomRight);
#else
void BufferView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
{
- QTreeView::dataChanged(topLeft, bottomRight, roles);
+ TreeViewTouch::dataChanged(topLeft, bottomRight, roles);
#endif
// determine how many items have been changed and if any of them is a networkitem
void BufferView::wheelEvent(QWheelEvent *event)
{
if (ItemViewSettings().mouseWheelChangesBuffer() == (bool)(event->modifiers() & Qt::AltModifier))
- return QTreeView::wheelEvent(event);
+ return TreeViewTouch::wheelEvent(event);
int rowDelta = (event->delta() > 0) ? -1 : 1;
changeBuffer((Direction)rowDelta);
QSize BufferView::sizeHint() const
{
- return QTreeView::sizeHint();
+ return TreeViewTouch::sizeHint();
if (!model())
- return QTreeView::sizeHint();
+ return TreeViewTouch::sizeHint();
if (model()->rowCount() == 0)
return QSize(120, 50);
#include "bufferviewconfig.h"
#include "networkmodel.h"
#include "types.h"
+#include "treeviewtouch.h"
/*****************************************
* The TreeView showing the Buffers
*****************************************/
-class BufferView : public QTreeView
+class BufferView : public TreeViewTouch
{
Q_OBJECT
virtual QSize sizeHint() const;
virtual void focusInEvent(QFocusEvent *event) { QAbstractScrollArea::focusInEvent(event); }
virtual void contextMenuEvent(QContextMenuEvent *event);
- virtual bool event(QEvent *event);
- virtual void mouseMoveEvent(QMouseEvent *event);
- virtual void mousePressEvent(QMouseEvent *event);
#if QT_VERSION < 0x050000
virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
private:
QPointer<BufferViewConfig> _config;
- qint64 _lastTouchStart = 0;
- bool _touchScrollInProgress = false;
enum ExpandedState {
WasExpanded = 0x01,
#include <QScrollBar>
#include <QDebug>
#include <QMenu>
-#include <QTouchEvent>
-#include <QScrollBar>
#include "buffermodel.h"
#include "client.h"
#include "types.h"
NickView::NickView(QWidget *parent)
- : QTreeView(parent)
+ : TreeViewTouch(parent)
{
setIndentation(10);
header()->hide();
connect(selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), SIGNAL(selectionUpdated()));
connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), SIGNAL(selectionUpdated()));
- setAttribute(Qt::WA_AcceptTouchEvents);
}
if (model())
disconnect(model(), 0, this, 0);
- QTreeView::setModel(model_);
+ TreeViewTouch::setModel(model_);
init();
}
void NickView::rowsInserted(const QModelIndex &parent, int start, int end)
{
- QTreeView::rowsInserted(parent, start, end);
+ TreeViewTouch::rowsInserted(parent, start, end);
if (model()->data(parent, NetworkModel::ItemTypeRole) == NetworkModel::UserCategoryItemType && !isExpanded(parent)) {
unanimatedExpandAll();
}
QModelIndexList NickView::selectedIndexes() const
{
- QModelIndexList indexList = QTreeView::selectedIndexes();
+ QModelIndexList indexList = TreeViewTouch::selectedIndexes();
// make sure the item we clicked on is first
if (indexList.contains(currentIndex())) {
return;
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);
-}
+}
\ No newline at end of file
#include <QTreeView>
#include "bufferinfo.h"
+#include "treeviewtouch.h"
-class NickView : public QTreeView
+class NickView : public TreeViewTouch
{
Q_OBJECT
//! 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();
private:
friend class NickListWidget; // needs selectedIndexes()
- qint64 _lastTouchStart = 0;
- bool _touchScrollInProgress = false;
};
--- /dev/null
+/***************************************************************************
+* Copyright (C) 2005-2015 by the Quassel Project *
+* devel@quassel-irc.org *
+* *
+* 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) version 3. *
+* *
+* 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. *
+***************************************************************************/
+#include "treeviewtouch.h"
+
+#include <QtCore>
+#include <QTouchEvent>
+#include <QScrollBar>
+
+TreeViewTouch::TreeViewTouch(QWidget *parent)
+ : QTreeView(parent)
+{
+ setAttribute(Qt::WA_AcceptTouchEvents);
+}
+
+
+bool TreeViewTouch::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 TreeViewTouch::mousePressEvent(QMouseEvent * event) {
+ if (!_touchScrollInProgress)
+ QTreeView::mousePressEvent(event);
+}
+
+void TreeViewTouch::mouseMoveEvent(QMouseEvent * event) {
+ if (!_touchScrollInProgress)
+ QTreeView::mouseMoveEvent(event);
+};
--- /dev/null
+/***************************************************************************
+* Copyright (C) 2005-2015 by the Quassel Project *
+* devel@quassel-irc.org *
+* *
+* 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) version 3. *
+* *
+* 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. *
+***************************************************************************/
+
+#ifndef TREEVIEWTOUCH_H_
+#define TREEVIEWTOUCH_H_
+
+#include <QTreeView>
+class TreeViewTouch :
+ public QTreeView
+{
+ Q_OBJECT
+
+public:
+ explicit TreeViewTouch(QWidget *parent = 0);
+
+protected:
+ virtual bool event(QEvent *event);
+ virtual void mouseMoveEvent(QMouseEvent *event);
+ virtual void mousePressEvent(QMouseEvent *event);
+
+private:
+ qint64 _lastTouchStart = 0;
+ bool _touchScrollInProgress = false;
+};
+
+#endif
\ No newline at end of file