]> git.lyx.org Git - features.git/blob - src/frontends/qt4/Dialogs.cpp
* src/frontends/qt4/Dialogs.cpp:
[features.git] / src / frontends / qt4 / Dialogs.cpp
1 /**
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.
5  *
6  * \author Angus Leeming
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "Dialogs.h"
14
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"
45
46 #include "Qt2BC.h"
47 #include "ButtonController.h"
48 #include "DockView.h"
49 #include "GuiView.h"
50 #include "QAbout.h"
51 #include "QBibitem.h"
52 #include "QBibtex.h"
53 #include "QBox.h"
54 #include "QBranch.h"
55 #include "QChanges.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"
62 #include "QERT.h"
63 #include "QExternal.h"
64 #include "QFloat.h"
65 #include "QGraphics.h"
66 #include "QInclude.h"
67 #include "QIndex.h"
68 #include "QMathMatrixDialog.h"
69 #include "QNomencl.h"
70 #include "QListings.h"
71 #include "QLog.h"
72 #include "QViewSource.h"
73 #include "QNote.h"
74 #include "QParagraph.h"
75 #include "QPrefs.h"
76 #include "QPrint.h"
77 #include "QRef.h"
78 #include "QSearch.h"
79 #include "QSendto.h"
80 #include "QShowFile.h"
81 #include "QSpellchecker.h"
82 #include "QTabular.h"
83 #include "QTabularCreate.h"
84 #include "QTexinfo.h"
85 #include "QToc.h"
86 #include "TocWidget.h"
87 #include "UrlView.h"
88 #include "QVSpace.h"
89 #include "QWrap.h"
90
91 #ifdef HAVE_LIBAIKSAURUS
92 #include "ControlThesaurus.h"
93 #include "QThesaurus.h"
94 #endif
95
96 #include "qt_helpers.h"
97
98 #include <boost/assert.hpp>
99
100 using std::string;
101
102 using namespace lyx::frontend;
103
104 namespace {
105
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",
112
113 #ifdef HAVE_LIBAIKSAURUS
114 "thesaurus",
115 #endif
116
117 "texinfo", "toc", "url", "view-source", "vspace", "wrap", "listings" };
118
119 char const * const * const end_dialognames =
120         dialognames + (sizeof(dialognames) / sizeof(char *));
121
122 class cmpCStr {
123 public:
124         cmpCStr(char const * name) : name_(name) {}
125         bool operator()(char const * other) {
126                 return strcmp(other, name_) == 0;
127         }
128 private:
129         char const * name_;
130 };
131
132
133 } // namespace anon
134
135
136 namespace lyx {
137
138
139 bool Dialogs::isValidName(string const & name) const
140 {
141         return std::find_if(dialognames, end_dialognames,
142                             cmpCStr(name.c_str())) != end_dialognames;
143 }
144
145
146 Dialogs::DialogPtr Dialogs::build(string const & name)
147 {
148         BOOST_ASSERT(isValidName(name));
149
150         DialogPtr dialog(new Dialog(lyxview_, name));
151         dialog->bc().view(new Qt2BC(dialog->bc()));
152
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,
225                                            _("Index Entry"),
226                                            qt_("&Keyword:")));
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,
235                                            _("Label"),
236                                            qt_("&Label:")));
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 #ifdef Q_WS_MACX
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")));
250 #else
251                 dialog->setView(new DockView<QViewSource, QViewSourceDialog>(
252                         *dialog, qvs, &gui_view, _("LaTeX Source"), Qt::BottomDockWidgetArea));
253 #endif
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);
309 #endif
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);
333         }
334
335         return dialog;
336 }
337
338
339 /// Are the tooltips on or off?
340 bool Dialogs::tooltipsEnabled()
341 {
342         return false;
343 }
344
345
346 } // namespace lyx