1 /*
2 outlines_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 "outlines_table_view.h"
20
21 namespace m8r {
22
23 using namespace std;
24
OutlinesTableView(QWidget * parent,bool isDashboardlet)25 OutlinesTableView::OutlinesTableView(QWidget *parent, bool isDashboardlet)
26 : QTableView(parent)
27 {
28 this->isDashboardlet = isDashboardlet;
29
30 verticalHeader()->setVisible(false);
31
32 // BEFARE ::ResizeToContents this kills performance - use ::Fixed instead:
33 // verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
34 verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
35
36 setSortingEnabled(true);
37
38 setEditTriggers(QAbstractItemView::NoEditTriggers);
39 setSelectionBehavior(QAbstractItemView::SelectRows);
40 setSelectionMode(QAbstractItemView::SingleSelection);
41 }
42
keyPressEvent(QKeyEvent * event)43 void OutlinesTableView::keyPressEvent(QKeyEvent* event)
44 {
45 if(!(event->modifiers() & Qt::AltModifier)
46 &&
47 !(event->modifiers() & Qt::ControlModifier)
48 &&
49 !(event->modifiers() & Qt::ShiftModifier))
50 {
51 switch(event->key()) {
52 case Qt::Key_Return:
53 case Qt::Key_Right:
54 emit signalShowSelectedOutline();
55 return;
56 case Qt::Key_Down:
57 QTableView::keyPressEvent(event);
58 return;
59 case Qt::Key_Up:
60 // IMPROVE left to cancel selection
61 case Qt::Key_Left:
62 QTableView::keyPressEvent(event);
63 return;
64 }
65
66 return;
67 }
68
69 QTableView::keyPressEvent(event);
70 }
71
mouseDoubleClickEvent(QMouseEvent * event)72 void OutlinesTableView::mouseDoubleClickEvent(QMouseEvent* event)
73 {
74 Q_UNUSED(event);
75
76 // double click to O opens it
77 emit signalShowSelectedOutline();
78 }
79
resizeEvent(QResizeEvent * event)80 void OutlinesTableView::resizeEvent(QResizeEvent* event)
81 {
82 MF_DEBUG("OutlinesTableView::resizeEvent " << event << std::endl);
83
84 if(horizontalHeader()->length() > 0) {
85 // ensure that 1st column gets the remaining space from others
86 horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
87 }
88 verticalHeader()->setDefaultSectionSize(fontMetrics().height()*1.5);
89
90 if(isDashboardlet) {
91 this->setColumnHidden(1, true);
92 this->setColumnHidden(2, true);
93 this->setColumnHidden(3, true);
94 } else {
95 // importance/urgency
96 this->setColumnWidth(1, this->fontMetrics().averageCharWidth()*12);
97 this->setColumnWidth(2, this->fontMetrics().averageCharWidth()*12);
98 // progress
99 this->setColumnWidth(3, this->fontMetrics().averageCharWidth()*6);
100 }
101
102 int normalizedWidth = width()/fontMetrics().averageCharWidth();
103 if(normalizedWidth < SIMPLIFIED_VIEW_THRESHOLD_WIDTH || isDashboardlet) {
104 this->setColumnHidden(4, true);
105 this->setColumnHidden(5, true);
106 this->setColumnHidden(6, true);
107 } else {
108 if(this->isColumnHidden(4)) {
109 this->setColumnHidden(4, false);
110 this->setColumnHidden(5, false);
111 this->setColumnHidden(6, false);
112 }
113 // notes
114 this->setColumnWidth(4, this->fontMetrics().averageCharWidth()*5);
115 // rd/wr
116 this->setColumnWidth(5, this->fontMetrics().averageCharWidth()*5);
117 this->setColumnWidth(6, this->fontMetrics().averageCharWidth()*5);
118 }
119
120 // pretty
121 this->setColumnWidth(7, this->fontMetrics().averageCharWidth()*12);
122
123 QTableView::resizeEvent(event);
124 }
125
126 } // m8r namespace
127