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