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_);
246 dialog->setView(new DockView<QViewSource, QViewSourceDialog>(
247 *dialog, qvs, &gui_view, _("LaTeX Source"), Qt::BottomDockWidgetArea));
248 dialog->bc().bp(new OkCancelPolicy);
249 } else if (name == "mathdelimiter") {
250 dialog->setController(new ControlMath(*dialog));
251 dialog->setView(new QMathDelimiter(*dialog));
252 dialog->bc().bp(new IgnorantPolicy);
253 } else if (name == "mathmatrix") {
254 dialog->setController(new ControlMath(*dialog));
255 dialog->setView(new QMathMatrix(*dialog));
256 dialog->bc().bp(new IgnorantPolicy);
257 } else if (name == "note") {
258 dialog->setController(new ControlNote(*dialog));
259 dialog->setView(new QNote(*dialog));
260 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
261 } else if (name == "paragraph") {
262 dialog->setController(new ControlParagraph(*dialog));
263 dialog->setView(new QParagraph(*dialog));
264 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
265 } else if (name == "prefs") {
266 dialog->setController(new ControlPrefs(*dialog));
267 dialog->setView(new QPrefs(*dialog));
268 dialog->bc().bp(new PreferencesPolicy);
269 } else if (name == "print") {
270 dialog->setController(new ControlPrint(*dialog));
271 dialog->setView(new QPrint(*dialog));
272 dialog->bc().bp(new OkApplyCancelPolicy);
273 } else if (name == "ref") {
274 // full qualification because qt4 has also a ControlRef type
275 dialog->setController(new lyx::frontend::ControlRef(*dialog));
276 dialog->setView(new QRef(*dialog));
277 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
278 } else if (name == "sendto") {
279 dialog->setController(new ControlSendto(*dialog));
280 dialog->setView(new QSendto(*dialog));
281 dialog->bc().bp(new OkApplyCancelPolicy);
282 } else if (name == "spellchecker") {
283 dialog->setController(new ControlSpellchecker(*dialog));
284 dialog->setView(new QSpellchecker(*dialog));
285 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
286 } else if (name == "tabular") {
287 dialog->setController(new ControlTabular(*dialog));
288 dialog->setView(new QTabular(*dialog));
289 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
290 } else if (name == "tabularcreate") {
291 dialog->setController(new ControlTabularCreate(*dialog));
292 dialog->setView(new QTabularCreate(*dialog));
293 dialog->bc().bp(new IgnorantPolicy);
294 } else if (name == "texinfo") {
295 dialog->setController(new ControlTexinfo(*dialog));
296 dialog->setView(new QTexinfo(*dialog));
297 dialog->bc().bp(new OkCancelPolicy);
298 #ifdef HAVE_LIBAIKSAURUS
299 } else if (name == "thesaurus") {
300 dialog->setController(new ControlThesaurus(*dialog));
301 dialog->setView(new QThesaurus(*dialog));
302 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
304 } else if (name == "toc") {
305 GuiView & gui_view = static_cast<GuiView &>(lyxview_);
306 QToc * qtoc = new QToc(*dialog, &gui_view);
307 dialog->setController(qtoc);
309 // On Mac show as a drawer at the right
310 dialog->setView(new DockView<QToc, TocWidget>(
311 *dialog, qtoc, &gui_view, _("Outline"), Qt::RightDockWidgetArea, Qt::Drawer));
313 dialog->setView(new DockView<QToc, TocWidget>(
314 *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()