QtPass 1.6.0
Multi-platform GUI for pass, the standard unix password manager.
Loading...
Searching...
No Matches
deselectabletreeview.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2016 Anne Jan Brouwer
2// SPDX-License-Identifier: GPL-3.0-or-later
3#ifndef SRC_DESELECTABLETREEVIEW_H_
4#define SRC_DESELECTABLETREEVIEW_H_
5
6#include <QCoreApplication>
7#include <QMouseEvent>
8#include <QTime>
9#include <QTreeView>
10
18
23
27
32
37
44
49class DeselectableTreeView : public QTreeView {
50 Q_OBJECT
51
52public:
57 DeselectableTreeView(QWidget *parent) : QTreeView(parent) {}
61 ~DeselectableTreeView() override = default;
62
63signals:
68
69private:
70 bool doubleClickHappened = false;
71 bool clickSelected = false;
72
77 void mousePressEvent(QMouseEvent *event) override {
78 clickSelected = selectionModel()->isSelected(indexAt(event->pos()));
79 QTreeView::mousePressEvent(event);
80 }
81
86 void mouseReleaseEvent(QMouseEvent *event) override {
87 doubleClickHappened = false;
88 // The timer is to distinguish between single and double click
89 QTime dieTime = QTime::currentTime().addMSecs(200);
90 while (QTime::currentTime() < dieTime)
91 QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
92 // could this be done nicer?
93 if (!doubleClickHappened && clickSelected) {
94 QModelIndex item = indexAt(event->pos());
95 bool selected = selectionModel()->isSelected(indexAt(event->pos()));
96 if ((item.row() == -1 && item.column() == -1) || selected) {
97 clearSelection();
98 const QModelIndex index;
99 selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select);
100 emit emptyClicked();
101 } else {
102 QTreeView::mouseReleaseEvent(event);
103 }
104 } else {
105 QTreeView::mouseReleaseEvent(event);
106 }
107 clickSelected = false;
108 }
109
114 void mouseDoubleClickEvent(QMouseEvent *event) override {
115 doubleClickHappened = true;
116 QTreeView::mouseDoubleClickEvent(event);
117 }
118};
119
120#endif // SRC_DESELECTABLETREEVIEW_H_
DeselectableTreeView(QWidget *parent)
DeselectableTreeView standard constructor.
void emptyClicked()
emptyClicked event
~DeselectableTreeView() override=default
~DeselectableTreeView standard destructor