1 /*
2  main_menu.h     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 #ifndef M8RUI_MAIN_MENU_H
20 #define M8RUI_MAIN_MENU_H
21 
22 #include <QtWidgets>
23 
24 #include "../../lib/src/debug.h"
25 
26 #include "main_window_view.h"
27 #include "recent_files_menu.h"
28 
29 namespace m8r {
30 
31 class MainWindowView;
32 
33 /**
34  * @brief MindForger main window menu view.
35  *
36  * View creates all menu items and Qt actions while presenter
37  * implements doActions() and connects them using signals/slots
38  * to this view.
39  */
40 class MainMenuView : public QObject
41 {
42     Q_OBJECT
43 
44     MainWindowView* mainWindow;
45     QMenuBar* qMenuBar;
46 
47 public:
48     QMenu* menuMind;
49     QMenu* menuFind;
50     QMenu* menuView;
51     QMenu* menuNavigator;
52     QMenu* menuOutline;
53     QMenu* menuNote;
54     QMenu* menuEdit;
55     QMenu* menuFormat;
56     QMenu* menuHelp;
57 
58 #ifdef DO_MF_DEBUG
59     QAction* actionMindHack;
60 #endif
61     // menu: MindForger
62     QMenu* submenuMindNew;
63     QAction* actionMindNewRepository;
64     QAction* actionMindNewFile;
65     QMenu* submenuMindLearn;
66     QAction* actionMindLearnRepository;
67     QAction* actionMindLearnFile;
68     RecentFilesMenu* submenuMindRelearn;
69     QAction* actionMindRemember;
70     QAction* actionMindThink;
71     QAction* actionMindAutolink;
72     QAction* actionMindScope;
73     QAction* actionMindForget;
74     QAction* actionMindSnapshot;
75     QAction* actionMindPreferences;
76     QMenu* submenuMindExport;
77     QAction* actionMindExportCsv;
78     QAction* actionExit;
79 
80     // menu: Find
81     QAction* actionFindFts;
82     QAction* actionFindOutlineByName;
83     QAction* actionFindNoteByName;
84     QAction* actionFindOutlineByTag;
85     QAction* actionFindNoteByTag;
86 #ifdef MF_NER
87     QAction* actionFindNerPersons;
88     QAction* actionFindNerLocations;
89     QAction* actionFindNerOrganizations;
90     QAction* actionFindNerMisc;
91 #endif
92 
93     // menu: View
94     QAction* actionViewDashboard;
95     QAction* actionViewHome;
96     QAction* actionViewOrganizer;
97     QAction* actionViewOutlines;
98     QAction* actionViewTags;
99     QAction* actionViewNavigator;
100     QAction* actionViewDwell;
101     QAction* actionViewStencils;
102     QAction* actionViewCli;
103     QAction* actionViewRecentNotes;
104     QAction* actionViewLimbo;
105     QAction* actionViewDistractionFree;
106     QAction* actionViewFullscreen;
107 
108     // menu: Navigator
109     QAction* actionNavigatorZoomIn;
110     QAction* actionNavigatorZoomOut;
111     QAction* actionNavigatorEdgesStretch;
112     QAction* actionNavigatorEdgesShrink;
113     QAction* actionNavigatorShuffle;
114 
115     // menu: Outline
116     QAction* actionOutlineNew;
117     QAction* actionOutlineEdit;
118     QAction* actionOutlineHome;
119     QAction* actionOutlineStencil;
120     QAction* actionOutlineClone;
121     QAction* actionOutlineForget;
122     QMenu* submenuOutlineExport;
123     QAction* actionOutlineHtmlExport;
124     QMenu* submenuOutlineImport;
125     QAction* actionOutlineTWikiImport;
126 
127     // menu: Note
128     QAction* actionNoteNew;
129     QAction* actionViewHoist;
130     QAction* actionNoteEdit;
131     QAction* actionNoteSave;
132     QAction* actionNoteClose;
133     QAction* actionNoteForget;
134     QAction* actionNotePromote;
135     QAction* actionNoteDemote;
136     QAction* actionNoteFirst;
137     QAction* actionNoteUp;
138     QAction* actionNoteDown;
139     QAction* actionNoteLast;
140     QAction* actionNoteRefactor;
141     QAction* actionNoteStencil;
142     QAction* actionNoteClone;
143     QAction* actionNoteExport;
144     QAction* actionNoteImport;
145 
146     // menu: Edit
147     QAction* actionEditFind;
148     QAction* actionEditFindNext;
149     QAction* actionEditUndo;
150     QAction* actionEditRedo;
151     QAction* actionEditCut;
152     QAction* actionEditCopy;
153     QAction* actionEditPaste;
154     QAction* actionEditLiveNotePreview;
155     QAction* actionEditWordWrap;
156     QAction* actionEditNameDescFocusSwap;
157     QAction* actionEditExtract;
158     QAction* actionEditComplete;
159 
160     // menu: Format
161     QAction* actionFormatBold;
162     QAction* actionFormatItalic;
163     QAction* actionFormatStrikethrough;
164     QAction* actionFormatKeyboard;
165     QAction* actionFormatMath;
166     QAction* actionFormatCode;
167     QAction* actionFormatCodeBlock;
168     QMenu* submenuFormatMathJax;
169     QMenu* submenuFormatLists;
170     QMenu* submenuFormatBlocks;
171     QMenu* submenuFormatDiagrams;
172     QAction* actionFormatDiagramsFlow;
173     QAction* actionFormatDiagramsSequence;
174     QAction* actionFormatDiagramsClass;
175     QAction* actionFormatDiagramsState;
176     QAction* actionFormatDiagramsGantt;
177     QAction* actionFormatDiagramsPie;
178     QAction* actionFormatMathFraction;
179     QAction* actionFormatMathSum;
180     QAction* actionFormatMathInt;
181     QAction* actionFormatMathIiint;
182     QAction* actionFormatMathAlpha;
183     QAction* actionFormatMathBeta;
184     QAction* actionFormatMathDelta;
185     QAction* actionFormatMathGama;
186     QAction* actionFormatMathText;
187     QAction* actionFormatMathBar;
188     QAction* actionFormatMathHat;
189     QAction* actionFormatMathDot;
190     QAction* actionFormatMathOverrightarrow;
191     QAction* actionFormatMathCup;
192     QAction* actionFormatMathCap;
193     QAction* actionFormatMathEmptyset;
194     QAction* actionFormatMathIn;
195     QAction* actionFormatMathNotin;
196     QAction* actionFormatMathSqrt;
197     QAction* actionFormatMathBlock;
198     QAction* actionFormatDiagramBlock;
199     QAction* actionFormatBlockQuote;
200     QAction* actionFormatListNumber;
201     QAction* actionFormatListBullet;
202     QAction* actionFormatListTask;
203     QAction* actionFormatListTaskItem;
204     QAction* actionFormatLink;
205     QAction* actionFormatImage;
206     QAction* actionFormatTable;
207     QAction* actionFormatHr;
208     QAction* actionFormatToc;
209     QAction* actionFormatTimestamp;
210 
211     // menu: Help
212     QAction* actionHelpDocumentation;
213     QAction* actionHelpWeb;
214 
215     QAction* actionHelpMarkdown;
216     QAction* actionHelpMathLivePreview;
217     QAction* actionHelpMathQuickReference;
218     QAction* actionHelpDiagrams;
219 
220     QAction* actionHelpReportBug;
221     QAction* actionHelpCheckForUpdates;
222     QAction* actionHelpAbout;
223 
224 public:
225     MainMenuView(MainWindowView& mainWindow);
226     MainMenuView(const MainMenuView&) = delete;
227     MainMenuView(const MainMenuView&&) = delete;
228     MainMenuView &operator=(const MainMenuView&) = delete;
229     MainMenuView &operator=(const MainMenuView&&) = delete;
230     virtual ~MainMenuView();
231 
232     void showFacetOutlineList(bool repositoryMode=true);
233     void showFacetOutlineView(bool repositoryMode=true);
234     void showFacetNoteEdit(bool repositoryMode=true);
235 
236     void showFacetMindThink();
237     void showFacetMindSleep();
238 
239     void showFacetMindAutolink(bool enabled);
240 
241     void showFacetLiveNotePreview(bool enabled);
242 
243     void showFacetNavigator();
244 
245     void addRepositoryOrFileToRelearn(const QString& path);
246 
247 private:
248     void showAllMenuItems();
249 
250 private slots:
slotShowCli()251     void slotShowCli() { emit showCli(); }
252 
253 signals:
254     void showCli();
255 };
256 
257 }
258 
259 #endif // M8RUI_MAIN_MENU_H
260