2 * \file qt4/Dialogs.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Angus Leeming
8 * Full author contact details are available in file CREDITS.
15 #include "ControlAboutlyx.h"
16 #include "ControlBibtex.h"
17 #include "ControlBox.h"
18 #include "ControlBranch.h"
19 #include "ControlChanges.h"
20 #include "ControlCharacter.h"
21 #include "ControlDocument.h"
22 #include "ControlErrorList.h"
23 #include "ControlERT.h"
24 #include "ControlExternal.h"
25 #include "ControlFloat.h"
26 #include "ControlGraphics.h"
27 #include "ControlInclude.h"
28 #include "ControlListings.h"
29 #include "ControlLog.h"
30 #include "ControlViewSource.h"
31 #include "ControlMath.h"
32 #include "ControlNote.h"
33 #include "ControlParagraph.h"
34 #include "ControlPrefs.h"
35 #include "ControlPrint.h"
36 #include "ControlRef.h"
37 #include "ControlSearch.h"
38 #include "ControlSendto.h"
39 #include "ControlShowFile.h"
40 #include "ControlSpellchecker.h"
41 #include "ControlTabular.h"
42 #include "ControlTabularCreate.h"
43 #include "ControlVSpace.h"
44 #include "ControlWrap.h"
47 #include "ButtonController.h"
56 #include "QCharacter.h"
57 #include "QCitation.h"
58 #include "QCitationDialog.h"
59 #include "QDelimiterDialog.h"
60 #include "QDocument.h"
61 #include "QErrorList.h"
63 #include "QExternal.h"
65 #include "QGraphics.h"
68 #include "QMathMatrixDialog.h"
70 #include "QListings.h"
72 #include "QViewSource.h"
74 #include "QParagraph.h"
80 #include "QShowFile.h"
81 #include "QSpellchecker.h"
83 #include "QTabularCreate.h"
86 #include "TocWidget.h"
91 #ifdef HAVE_LIBAIKSAURUS
92 #include "ControlThesaurus.h"
93 #include "QThesaurus.h"
96 #include "qt_helpers.h"
98 #include <boost/assert.hpp>
102 using namespace lyx::frontend;
106 char const * const dialognames[] = {
107 "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
108 "citation", "document", "errorlist", "ert", "external", "file",
109 "findreplace", "float", "graphics", "include", "index", "nomenclature", "label", "log",
110 "mathdelimiter", "mathmatrix", "note", "paragraph",
111 "prefs", "print", "ref", "sendto", "spellchecker","tabular", "tabularcreate",
113 #ifdef HAVE_LIBAIKSAURUS
117 "texinfo", "toc", "url", "view-source", "vspace", "wrap", "listings" };
119 char const * const * const end_dialognames =
120 dialognames + (sizeof(dialognames) / sizeof(char *));
124 cmpCStr(char const * name) : name_(name) {}
125 bool operator()(char const * other) {
126 return strcmp(other, name_) == 0;
139 bool Dialogs::isValidName(string const & name) const
141 return std::find_if(dialognames, end_dialognames,
142 cmpCStr(name.c_str())) != end_dialognames;
146 Dialogs::DialogPtr Dialogs::build(string const & name)
148 BOOST_ASSERT(isValidName(name));
150 DialogPtr dialog(new Dialog(lyxview_, name));
151 dialog->bc().view(new Qt2BC(dialog->bc()));
153 if (name == "aboutlyx") {
154 dialog->setController(new ControlAboutlyx(*dialog));
155 dialog->setView(new QAbout(*dialog));
156 dialog->bc().bp(new OkCancelPolicy);
157 } else if (name == "bibitem") {
158 dialog->setController(new ControlCommand(*dialog, name, name));
159 dialog->setView(new QBibitem(*dialog));
160 dialog->bc().bp(new OkCancelReadOnlyPolicy);
161 } else if (name == "bibtex") {
162 dialog->setController(new ControlBibtex(*dialog));
163 dialog->setView(new QBibtex(*dialog));
164 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
165 } else if (name == "box") {
166 dialog->setController(new ControlBox(*dialog));
167 dialog->setView(new QBox(*dialog));
168 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
169 } else if (name == "branch") {
170 dialog->setController(new ControlBranch(*dialog));
171 dialog->setView(new QBranch(*dialog));
172 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
173 } else if (name == "changes") {
174 dialog->setController(new ControlChanges(*dialog));
175 dialog->setView(new QChanges(*dialog));
176 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
177 } else if (name == "character") {
178 dialog->setController(new ControlCharacter(*dialog));
179 dialog->setView(new QCharacter(*dialog));
180 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
181 } else if (name == "citation") {
182 QCitation * ci = new QCitation(*dialog);
183 dialog->setController(ci);
184 dialog->setView(new QCitationDialog(*dialog, ci));
185 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
186 } else if (name == "document") {
187 dialog->setController(new ControlDocument(*dialog));
188 dialog->setView(new QDocument(*dialog));
189 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
190 } else if (name == "errorlist") {
191 dialog->setController(new ControlErrorList(*dialog));
192 dialog->setView(new QErrorList(*dialog));
193 dialog->bc().bp(new OkCancelPolicy);
194 } else if (name == "ert") {
195 dialog->setController(new ControlERT(*dialog));
196 dialog->setView(new QERT(*dialog));
197 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
198 } else if (name == "external") {
199 dialog->setController(new ControlExternal(*dialog));
200 dialog->setView(new QExternal(*dialog));
201 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
202 } else if (name == "file") {
203 dialog->setController(new ControlShowFile(*dialog));
204 dialog->setView(new QShowFile(*dialog));
205 dialog->bc().bp(new OkCancelPolicy);
206 } else if (name == "findreplace") {
207 dialog->setController(new ControlSearch(*dialog));
208 dialog->setView(new QSearch(*dialog));
209 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
210 } else if (name == "float") {
211 dialog->setController(new ControlFloat(*dialog));
212 dialog->setView(new QFloat(*dialog));
213 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
214 } else if (name == "graphics") {
215 dialog->setController(new ControlGraphics(*dialog));
216 dialog->setView(new QGraphics(*dialog));
217 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
218 } else if (name == "include") {
219 dialog->setController(new ControlInclude(*dialog));
220 dialog->setView(new QInclude(*dialog));
221 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
222 } else if (name == "index") {
223 dialog->setController(new ControlCommand(*dialog, name, name));
224 dialog->setView(new QIndex(*dialog,
227 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
228 } else if (name == "nomenclature") {
229 dialog->setController(new ControlCommand(*dialog, name, name));
230 dialog->setView(new QNomencl(*dialog, _("Nomenclature Entry")));
231 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
232 } else if (name == "label") {
233 dialog->setController(new ControlCommand(*dialog, name, name));
234 dialog->setView(new QIndex(*dialog,
237 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
238 } else if (name == "log") {
239 dialog->setController(new ControlLog(*dialog));
240 dialog->setView(new QLog(*dialog));
241 dialog->bc().bp(new OkCancelPolicy);
242 } else if (name == "view-source") {
243 QViewSource * qvs = new QViewSource(*dialog);
244 dialog->setController(qvs);
245 GuiView & gui_view = static_cast<GuiView &>(lyxview_);
247 // Mac uses a drawer that should be on the right.
248 dialog->setView(new DockView<QViewSource, QViewSourceDialog>(
249 *dialog, qvs, &gui_view, _("LaTeX Source")));
251 dialog->setView(new DockView<QViewSource, QViewSourceDialog>(
252 *dialog, qvs, &gui_view, _("LaTeX Source"), Qt::BottomDockWidgetArea));
254 dialog->bc().bp(new OkCancelPolicy);
255 } else if (name == "mathdelimiter") {
256 dialog->setController(new ControlMath(*dialog));
257 dialog->setView(new QMathDelimiter(*dialog));
258 dialog->bc().bp(new IgnorantPolicy);
259 } else if (name == "mathmatrix") {
260 dialog->setController(new ControlMath(*dialog));
261 dialog->setView(new QMathMatrix(*dialog));
262 dialog->bc().bp(new IgnorantPolicy);
263 } else if (name == "note") {
264 dialog->setController(new ControlNote(*dialog));
265 dialog->setView(new QNote(*dialog));
266 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
267 } else if (name == "paragraph") {
268 dialog->setController(new ControlParagraph(*dialog));
269 dialog->setView(new QParagraph(*dialog));
270 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
271 } else if (name == "prefs") {
272 dialog->setController(new ControlPrefs(*dialog));
273 dialog->setView(new QPrefs(*dialog));
274 dialog->bc().bp(new PreferencesPolicy);
275 } else if (name == "print") {
276 dialog->setController(new ControlPrint(*dialog));
277 dialog->setView(new QPrint(*dialog));
278 dialog->bc().bp(new OkApplyCancelPolicy);
279 } else if (name == "ref") {
280 // full qualification because qt4 has also a ControlRef type
281 dialog->setController(new lyx::frontend::ControlRef(*dialog));
282 dialog->setView(new QRef(*dialog));
283 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
284 } else if (name == "sendto") {
285 dialog->setController(new ControlSendto(*dialog));
286 dialog->setView(new QSendto(*dialog));
287 dialog->bc().bp(new OkApplyCancelPolicy);
288 } else if (name == "spellchecker") {
289 dialog->setController(new ControlSpellchecker(*dialog));
290 dialog->setView(new QSpellchecker(*dialog));
291 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
292 } else if (name == "tabular") {
293 dialog->setController(new ControlTabular(*dialog));
294 dialog->setView(new QTabular(*dialog));
295 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
296 } else if (name == "tabularcreate") {
297 dialog->setController(new ControlTabularCreate(*dialog));
298 dialog->setView(new QTabularCreate(*dialog));
299 dialog->bc().bp(new IgnorantPolicy);
300 } else if (name == "texinfo") {
301 dialog->setController(new ControlTexinfo(*dialog));
302 dialog->setView(new QTexinfo(*dialog));
303 dialog->bc().bp(new OkCancelPolicy);
304 #ifdef HAVE_LIBAIKSAURUS
305 } else if (name == "thesaurus") {
306 dialog->setController(new ControlThesaurus(*dialog));
307 dialog->setView(new QThesaurus(*dialog));
308 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
310 } else if (name == "toc") {
311 GuiView & gui_view = static_cast<GuiView &>(lyxview_);
312 QToc * qtoc = new QToc(*dialog, &gui_view);
313 dialog->setController(qtoc);
314 dialog->setView(new DockView<QToc, TocWidget>(
315 *dialog, qtoc, &gui_view, _("Outline")));
316 dialog->bc().bp(new OkCancelPolicy);
317 } else if (name == "url") {
318 dialog->setController(new ControlCommand(*dialog, name, name));
319 dialog->setView(new UrlView(*dialog));
320 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
321 } else if (name == "vspace") {
322 dialog->setController(new ControlVSpace(*dialog));
323 dialog->setView(new QVSpace(*dialog));
324 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
325 } else if (name == "wrap") {
326 dialog->setController(new ControlWrap(*dialog));
327 dialog->setView(new QWrap(*dialog));
328 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
329 } else if (name == "listings") {
330 dialog->setController(new ControlListings(*dialog));
331 dialog->setView(new QListings(*dialog));
332 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
339 /// Are the tooltips on or off?
340 bool Dialogs::tooltipsEnabled()