1 /*
2  tags_table_view.cpp     MindForger thinking notebook
3 
4  Copyright (C) 2016-2020 Martin Dvorak <martin.dvorak@mindforger.com>
5 
6  This program is free software; you can redistribute it and/or
7  modify it under the terms of the GNU General Public License
8  as published by the Free Software Foundation; either version 2
9  of the License, or (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19 #include "tags_table_view.h"
20 
21 namespace m8r {
22 
TagsTableView(QWidget * parent)23 TagsTableView::TagsTableView(QWidget* parent)
24     : QTableView(parent)
25 {
26     verticalHeader()->setVisible(false);
27     verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
28 
29     setSortingEnabled(true);
30 
31     setEditTriggers(QAbstractItemView::NoEditTriggers);
32     setSelectionBehavior(QAbstractItemView::SelectRows);
33     setSelectionMode(QAbstractItemView::SingleSelection);
34 }
35 
keyPressEvent(QKeyEvent * event)36 void TagsTableView::keyPressEvent(QKeyEvent* event)
37 {
38     if(!(event->modifiers() & Qt::AltModifier)
39          &&
40        !(event->modifiers() & Qt::ControlModifier)
41          &&
42        !(event->modifiers() & Qt::ShiftModifier))
43     {
44         switch(event->key()) {
45         case Qt::Key_Return:
46         case Qt::Key_Right:
47             emit signalShowDialogForTag();
48             return;
49         case Qt::Key_Down:
50             QTableView::keyPressEvent(event);
51             return;
52         case Qt::Key_Up:
53         // IMPROVE left to cancel selection
54         case Qt::Key_Left:
55             QTableView::keyPressEvent(event);
56             return;
57         }
58 
59         return;
60     }
61 
62     QTableView::keyPressEvent(event);
63 }
64 
mouseDoubleClickEvent(QMouseEvent * event)65 void TagsTableView::mouseDoubleClickEvent(QMouseEvent* event)
66 {
67     Q_UNUSED(event);
68 
69     // double click to O opens it
70     emit signalShowDialogForTag();
71 }
72 
resizeEvent(QResizeEvent * event)73 void TagsTableView::resizeEvent(QResizeEvent* event)
74 {
75     MF_DEBUG("TagsTableView::resizeEvent " << event << std::endl);
76 
77     if(horizontalHeader()->length() > 0) {
78         // ensure that 1st column gets the remaining space from others
79         horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
80     }
81     verticalHeader()->setDefaultSectionSize(fontMetrics().height()*1.5);
82 
83     // cardinality
84     this->setColumnWidth(1, this->fontMetrics().averageCharWidth()*6);
85 
86     QTableView::resizeEvent(event);
87 }
88 
89 } // m8r namespace
90