1 /*
2  organizer_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 "dashboard_view.h"
20 
21 namespace m8r {
22 
DashboardView(QWidget * parent)23 DashboardView::DashboardView(QWidget* parent)
24     : QSplitter{Qt::Horizontal, parent},
25       isMindForgerRepository(false)
26 {
27     left = new QSplitter{Qt::Vertical, this};
28     left->setStretchFactor(0, 1);
29     left->setStretchFactor(1, 1);
30 
31     middle = new QSplitter{Qt::Vertical, this};
32     middle->setStretchFactor(0, 1);
33     middle->setStretchFactor(1, 1);
34 
35     right = new QSplitter{Qt::Vertical, this};
36     right->setStretchFactor(0, 1);
37     right->setStretchFactor(1, 1);
38 
39     // welcome
40     welcomeDashboardlet = new QTextBrowser(left);
41     welcomeDashboardlet->setOpenExternalLinks(true);
42     left->addWidget(welcomeDashboardlet);
43 
44     // recent
45     recentDashboardlet = new RecentNotesTableView(left, true);
46     left->addWidget(recentDashboardlet);
47 
48     // organizer quadrants
49     doFirstDashboardlet = new OrganizerQuadrantView(middle);
50     middle->addWidget(doFirstDashboardlet);
51 
52     // tags
53     tagsDashboardlet = new TagsTableView(middle);
54     middle->addWidget(tagsDashboardlet);
55 
56     // navigator
57     navigatorDashboardlet = new NavigatorView(right, true);
58     // IMPROVE should go to resize event
59     int windowHeight=parent->parentWidget()->parentWidget()->size().height();
60     navigatorDashboardlet->setFixedHeight(windowHeight);
61     right->addWidget(navigatorDashboardlet);
62 
63     // outlines
64     outlinesDashboardlet = new OutlinesTableView(right, true);
65     right->addWidget(outlinesDashboardlet);
66 
67     // self ~ horizontal splitter
68     setStretchFactor(0, 1);
69     setStretchFactor(1, 1);
70     setStretchFactor(2, 1);
71 
72     addWidget(left);
73     addWidget(middle);
74     addWidget(right);
75 }
76 
setMindForgerMode(bool isMindForgerRepository)77 void DashboardView::setMindForgerMode(bool isMindForgerRepository)
78 {
79     this->isMindForgerRepository = isMindForgerRepository;
80     if(isMindForgerRepository) {
81         middle->setVisible(true);
82     } else {
83         middle->setVisible(false);
84     }
85 }
86 
resizeEvent(QResizeEvent * event)87 void DashboardView::resizeEvent(QResizeEvent* event)
88 {
89     UNUSED_ARG(event);
90 
91     int normalizedWidth = width()/fontMetrics().averageCharWidth();
92     if(!isMindForgerRepository || normalizedWidth < SIMPLIFIED_VIEW_THRESHOLD_WIDTH) {
93         middle->setVisible(false);
94     } else {
95         middle->setVisible(true);
96     }
97 
98     QSplitter::resizeEvent(event);
99 }
100 
~DashboardView()101 DashboardView::~DashboardView()
102 {
103 }
104 
105 } // m8r namespace
106