LCOV - code coverage report
Current view: top level - src - deselectabletreeview.h (source / functions) Coverage Total Hit
Test: .lcov.total Lines: 0.0 % 28 0
Test Date: 2026-03-23 21:55:57 Functions: 0.0 % 4 0

            Line data    Source code
       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              : 
      11              : /**
      12              :  * @brief The DeselectableTreeView class
      13              :  * loosly based on http://stackoverflow.com/questions/2761284/
      14              :  * thanks to Yassir Ennazk
      15              :  */
      16              : class DeselectableTreeView : public QTreeView {
      17              :   Q_OBJECT
      18              : 
      19              : public:
      20              :   /**
      21              :    * @brief DeselectableTreeView standard constructor
      22              :    * @param parent
      23              :    */
      24            0 :   DeselectableTreeView(QWidget *parent) : QTreeView(parent) {}
      25              :   /**
      26              :    * @brief ~DeselectableTreeView standard destructor
      27              :    */
      28            0 :   virtual ~DeselectableTreeView() {}
      29              : 
      30              : signals:
      31              :   /**
      32              :    * @brief emptyClicked event
      33              :    */
      34              :   void emptyClicked();
      35              : 
      36              : private:
      37              :   bool doubleClickHappened = false;
      38              :   bool clickSelected = false;
      39              : 
      40              :   /**
      41              :    * @brief mousePressEvent registers if the field was pre-selected
      42              :    * @param event
      43              :    */
      44            0 :   virtual void mousePressEvent(QMouseEvent *event) {
      45            0 :     clickSelected = selectionModel()->isSelected(indexAt(event->pos()));
      46            0 :     QTreeView::mousePressEvent(event);
      47            0 :   }
      48              : 
      49              :   /**
      50              :    * @brief mouseReleaseEvent now deselects on click on empty space
      51              :    * @param event
      52              :    */
      53            0 :   void mouseReleaseEvent(QMouseEvent *event) {
      54            0 :     doubleClickHappened = false;
      55              :     // The timer is to distinguish between single and double click
      56            0 :     QTime dieTime = QTime::currentTime().addMSecs(200);
      57            0 :     while (QTime::currentTime() < dieTime)
      58            0 :       QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
      59              :     // could this be done nicer?
      60            0 :     if (!doubleClickHappened && clickSelected) {
      61            0 :       QModelIndex item = indexAt(event->pos());
      62            0 :       bool selected = selectionModel()->isSelected(indexAt(event->pos()));
      63            0 :       if ((item.row() == -1 && item.column() == -1) || selected) {
      64            0 :         clearSelection();
      65            0 :         const QModelIndex index;
      66            0 :         selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select);
      67            0 :         emit emptyClicked();
      68              :       } else {
      69            0 :         QTreeView::mouseReleaseEvent(event);
      70              :       }
      71            0 :     } else {
      72            0 :       QTreeView::mouseReleaseEvent(event);
      73              :     }
      74            0 :     clickSelected = false;
      75            0 :   }
      76              : 
      77              :   /**
      78              :    * @brief mouseDoubleClickEvent
      79              :    * @param event
      80              :    */
      81            0 :   void mouseDoubleClickEvent(QMouseEvent *event) {
      82            0 :     doubleClickHappened = true;
      83            0 :     QTreeView::mouseDoubleClickEvent(event);
      84            0 :   }
      85              : };
      86              : 
      87              : #endif // SRC_DESELECTABLETREEVIEW_H_
        

Generated by: LCOV version 2.4-beta