1 /* Copyright (C) 2005-2020 J.F.Dockes
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the
14 * Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16 */
17
18 #include <iostream>
19
20 #include "rclmain_w.h"
21 #include "ssearch_w.h"
22
23 #include <QMenu>
24 #include <QPushButton>
25 #include <QMessageBox>
26
buildMenus()27 void RclMain::buildMenus()
28 {
29 fileMenu = new QMenu();
30 fileMenu->setObjectName(QString::fromUtf8("fileMenu"));
31 fileMenu->setTitle(QApplication::translate("RclMainBase", "&File"));
32 viewMenu = new QMenu();
33 viewMenu->setObjectName(QString::fromUtf8("viewMenu"));
34 viewMenu->setTitle(QApplication::translate("RclMainBase", "&View"));
35 toolsMenu = new QMenu();
36 toolsMenu->setObjectName(QString::fromUtf8("toolsMenu"));
37 toolsMenu->setTitle(QApplication::translate("RclMainBase", "&Tools"));
38 preferencesMenu = new QMenu();
39 preferencesMenu->setObjectName(QString::fromUtf8("preferencesMenu"));
40 preferencesMenu->setTitle(QApplication::translate("RclMainBase",
41 "&Preferences"));
42 helpMenu = new QMenu();
43 helpMenu->setObjectName(QString::fromUtf8("helpMenu"));
44 helpMenu->setTitle(QApplication::translate("RclMainBase", "&Help"));
45 resultsMenu = new QMenu();
46 resultsMenu->setObjectName(QString::fromUtf8("resultsMenu"));
47 resultsMenu->setTitle(QApplication::translate("RclMainBase", "&Results"));
48 queryMenu = new QMenu();
49 queryMenu->setObjectName(QString::fromUtf8("queryMenu"));
50 queryMenu->setTitle(QApplication::translate("RclMainBase", "&Query"));
51
52
53 fileMenu->insertAction(fileRebuildIndexAction, fileBumpIndexingAction);
54 fileMenu->addAction(fileToggleIndexingAction);
55 fileMenu->addAction(fileRebuildIndexAction);
56 fileMenu->addAction(actionSpecial_Indexing);
57 fileMenu->addSeparator();
58 fileMenu->addAction(actionSave_last_query);
59 fileMenu->addAction(actionLoad_saved_query);
60 fileMenu->addSeparator();
61 fileMenu->addAction(fileExportSSearchHistoryAction);
62 fileMenu->addAction(fileEraseSearchHistoryAction);
63 fileMenu->addSeparator();
64 fileMenu->addAction(fileEraseDocHistoryAction);
65 fileMenu->addSeparator();
66 fileMenu->addAction(fileExitAction);
67
68 viewMenu->addSeparator();
69 viewMenu->addAction(toggleFullScreenAction);
70 viewMenu->addAction(zoomInAction);
71 viewMenu->addAction(zoomOutAction);
72
73 toolsMenu->addAction(toolsDoc_HistoryAction);
74 toolsMenu->addAction(toolsAdvanced_SearchAction);
75 toolsMenu->addAction(toolsSpellAction);
76 toolsMenu->addAction(actionQuery_Fragments);
77 toolsMenu->addAction(actionWebcache_Editor);
78 toolsMenu->addAction(showMissingHelpers_Action);
79 toolsMenu->addAction(showActiveTypes_Action);
80 toolsMenu->addAction(actionShow_index_statistics);
81
82 preferencesMenu->addAction(queryPrefsAction);
83 preferencesMenu->addSeparator();
84 preferencesMenu->addAction(indexConfigAction);
85 preferencesMenu->addAction(indexScheduleAction);
86
87 queryMenu->addSection(QIcon(), tr("Simple search type"));
88 sstypGroup = new QActionGroup(this);
89 auto actSSAny = new QAction(tr("Any term"), this);
90
91 actSSAny->setData(QVariant(SSearch::SST_ANY));
92 actSSAny->setCheckable(true);
93 sstypGroup->addAction(actSSAny);
94 queryMenu->addAction(actSSAny);
95 auto actSSAll = new QAction(tr("All terms"), this);
96 actSSAll->setData(QVariant(SSearch::SST_ALL));
97 actSSAll->setCheckable(true);
98 sstypGroup->addAction(actSSAll);
99 queryMenu->addAction(actSSAll);
100 auto actSSFile = new QAction(tr("File name"), this);
101 actSSFile->setData(QVariant(SSearch::SST_FNM));
102 actSSFile->setCheckable(true);
103 sstypGroup->addAction(actSSFile);
104 queryMenu->addAction(actSSFile);
105 auto actSSQuery = new QAction(tr("Query language"), this);
106 actSSQuery->setData(QVariant(SSearch::SST_LANG));
107 actSSQuery->setCheckable(true);
108 sstypGroup->addAction(actSSQuery);
109 queryMenu->addAction(actSSQuery);
110 queryMenu->addSeparator();
111 queryMenu->addAction(enbSynAction);
112 queryMenu->addSeparator();
113 queryMenu->addAction(extIdxAction);
114 connect(queryMenu, SIGNAL(triggered(QAction *)), this,
115 SLOT(onSSTypMenu(QAction *)));
116 connect(sSearch->searchTypCMB, SIGNAL(currentIndexChanged(int)), this,
117 SLOT(onSSTypCMB(int)));
118 queryMenu->addSection(QIcon(), tr("Stemming language"));
119 // Stemming language menu
120 g_stringNoStem = tr("(no stemming)");
121 g_stringAllStem = tr("(all languages)");
122 m_idNoStem = queryMenu->addAction(g_stringNoStem);
123 m_idNoStem->setCheckable(true);
124 m_stemLangToId[g_stringNoStem] = m_idNoStem;
125 m_idAllStem = queryMenu->addAction(g_stringAllStem);
126 m_idAllStem->setCheckable(true);
127 m_stemLangToId[g_stringAllStem] = m_idAllStem;
128 // Can't get the stemming languages from the db at this stage as
129 // db not open yet (the case where it does not even exist makes
130 // things complicated). So get the languages from the config
131 // instead
132 vector<string> langs;
133 if (!getStemLangs(langs)) {
134 QMessageBox::warning(0, "Recoll",
135 tr("error retrieving stemming languages"));
136 }
137 QAction *curid = prefs.queryStemLang == "ALL" ? m_idAllStem : m_idNoStem;
138 QAction *id;
139 for (const auto& lang : langs) {
140 QString qlang = u8s2qs(lang);
141 id = queryMenu->addAction(qlang);
142 id->setCheckable(true);
143 m_stemLangToId[qlang] = id;
144 if (prefs.queryStemLang == qlang) {
145 curid = id;
146 }
147 }
148 curid->setChecked(true);
149
150 helpMenu->addAction(userManualAction);
151 helpMenu->addAction(showMissingHelpers_Action);
152 helpMenu->addAction(showActiveTypes_Action);
153 helpMenu->addSeparator();
154 helpMenu->addAction(helpAbout_RecollAction);
155
156 resultsMenu->addAction(nextPageAction);
157 resultsMenu->addAction(prevPageAction);
158 resultsMenu->addAction(firstPageAction);
159 resultsMenu->addSeparator();
160 resultsMenu->addAction(actionSortByDateAsc);
161 resultsMenu->addAction(actionSortByDateDesc);
162 resultsMenu->addSeparator();
163 resultsMenu->addAction(actionShowQueryDetails);
164 resultsMenu->addSeparator();
165 resultsMenu->addAction(actionShowResultsAsTable);
166 resultsMenu->addSeparator();
167 resultsMenu->addAction(actionSaveResultsAsCSV);
168
169 MenuBar->addAction(fileMenu->menuAction());
170 MenuBar->addAction(queryMenu->menuAction());
171 MenuBar->addAction(resultsMenu->menuAction());
172 MenuBar->addAction(viewMenu->menuAction());
173 MenuBar->addAction(toolsMenu->menuAction());
174 MenuBar->addAction(preferencesMenu->menuAction());
175 MenuBar->addSeparator();
176 MenuBar->addAction(helpMenu->menuAction());
177
178 buttonTopMenu = new QMenu();
179 buttonTopMenu->addAction(fileMenu->menuAction());
180 buttonTopMenu->addAction(queryMenu->menuAction());
181 buttonTopMenu->addAction(viewMenu->menuAction());
182 buttonTopMenu->addAction(toolsMenu->menuAction());
183 buttonTopMenu->addAction(resultsMenu->menuAction());
184 buttonTopMenu->addAction(preferencesMenu->menuAction());
185 buttonTopMenu->addSeparator();
186 buttonTopMenu->addAction(helpMenu->menuAction());
187 sSearch->menuPB->setMenu(buttonTopMenu);
188
189 return;
190 }
191
onSSTypMenu(QAction * act)192 void RclMain::onSSTypMenu(QAction *act)
193 {
194 if (act->actionGroup() != sstypGroup) {
195 return;
196 }
197 int id = act->data().toInt();
198 sSearch->onSearchTypeChanged(id);
199 }
200
onSSTypCMB(int idx)201 void RclMain::onSSTypCMB(int idx)
202 {
203 QList<QAction*> ssacts = sstypGroup->actions();
204 for (int i = 0; i < ssacts.size(); ++i) {
205 if (ssacts.at(i)->data().toInt() == idx)
206 ssacts.at(i)->setChecked(true);
207 }
208 }
209