]> git.lyx.org Git - features.git/blob - src/frontends/qt4/Dialogs.cpp
somewhat more uniform naming
[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 "ControlEmbeddedFiles.h"
23 #include "ControlErrorList.h"
24 #include "ControlERT.h"
25 #include "ControlExternal.h"
26 #include "ControlFloat.h"
27 #include "ControlGraphics.h"
28 #include "ControlInclude.h"
29 #include "ControlListings.h"
30 #include "ControlLog.h"
31 #include "ControlViewSource.h"
32 #include "ControlMath.h"
33 #include "ControlNote.h"
34 #include "ControlParagraph.h"
35 #include "ControlPrefs.h"
36 #include "ControlPrint.h"
37 #include "ControlRef.h"
38 #include "ControlSearch.h"
39 #include "ControlSendto.h"
40 #include "ControlShowFile.h"
41 #include "ControlSpellchecker.h"
42 #include "ControlTabular.h"
43 #include "ControlTabularCreate.h"
44 #include "ControlVSpace.h"
45 #include "ControlWrap.h"
46
47 #include "Qt2BC.h"
48 #include "ButtonController.h"
49 #include "DockView.h"
50 #include "GuiView.h"
51 #include "GuiAbout.h"
52 #include "GuiBibitem.h"
53 #include "GuiBibtex.h"
54 #include "GuiBox.h"
55 #include "GuiBranch.h"
56 #include "GuiChanges.h"
57 #include "GuiCharacter.h"
58 #include "GuiCitation.h"
59 #include "GuiDelimiter.h"
60 #include "GuiDocument.h"
61 #include "GuiEmbeddedFiles.h"
62 #include "GuiErrorList.h"
63 #include "GuiERT.h"
64 #include "GuiExternal.h"
65 #include "GuiFloat.h"
66 #include "GuiGraphics.h"
67 #include "GuiInclude.h"
68 #include "GuiIndex.h"
69 #include "GuiMathMatrix.h"
70 #include "GuiNomencl.h"
71 #include "GuiListings.h"
72 #include "GuiLog.h"
73 #include "GuiViewSource.h"
74 #include "GuiNote.h"
75 #include "GuiParagraph.h"
76 #include "GuiPrefs.h"
77 #include "GuiPrint.h"
78 #include "GuiRef.h"
79 #include "GuiSearch.h"
80 #include "GuiSendto.h"
81 #include "GuiShowFile.h"
82 #include "GuiSpellchecker.h"
83 #include "GuiTabular.h"
84 #include "GuiTabularCreate.h"
85 #include "GuiTexinfo.h"
86 #include "GuiToc.h"
87 #include "TocWidget.h"
88 #include "GuiURL.h"
89 #include "GuiVSpace.h"
90 #include "GuiWrap.h"
91
92 #ifdef HAVE_LIBAIKSAURUS
93 #include "ControlThesaurus.h"
94 #include "GuiThesaurus.h"
95 #endif
96
97 #include "qt_helpers.h"
98
99 #include <boost/assert.hpp>
100
101 using std::string;
102
103 namespace lyx {
104 namespace frontend {
105
106 namespace {
107
108 char const * const dialognames[] = {
109 "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
110 "citation", "document", "embedding", "errorlist", "ert", "external", "file",
111 "findreplace", "float", "graphics", "include", "index", "nomenclature", "label", "log",
112 "mathdelimiter", "mathmatrix", "note", "paragraph",
113 "prefs", "print", "ref", "sendto", "spellchecker","tabular", "tabularcreate",
114
115 #ifdef HAVE_LIBAIKSAURUS
116 "thesaurus",
117 #endif
118
119 "texinfo", "toc", "url", "view-source", "vspace", "wrap", "listings" };
120
121 char const * const * const end_dialognames =
122         dialognames + (sizeof(dialognames) / sizeof(char *));
123
124 class cmpCStr {
125 public:
126         cmpCStr(char const * name) : name_(name) {}
127         bool operator()(char const * other) {
128                 return strcmp(other, name_) == 0;
129         }
130 private:
131         char const * name_;
132 };
133
134
135 } // namespace anon
136
137
138 bool Dialogs::isValidName(string const & name) const
139 {
140         return std::find_if(dialognames, end_dialognames,
141                             cmpCStr(name.c_str())) != end_dialognames;
142 }
143
144
145 Dialogs::DialogPtr Dialogs::build(string const & name)
146 {
147         BOOST_ASSERT(isValidName(name));
148
149         DialogPtr dialog(new Dialog(lyxview_, name));
150         dialog->bc().view(new Qt2BC(dialog->bc()));
151
152         if (name == "aboutlyx") {
153                 dialog->setController(new ControlAboutlyx(*dialog));
154                 dialog->setView(new GuiAbout(*dialog));
155                 dialog->bc().bp(new OkCancelPolicy);
156         } else if (name == "bibitem") {
157                 dialog->setController(new ControlCommand(*dialog, name, name));
158                 dialog->setView(new GuiBibitem(*dialog));
159                 dialog->bc().bp(new OkCancelReadOnlyPolicy);
160         } else if (name == "bibtex") {
161                 dialog->setController(new ControlBibtex(*dialog));
162                 dialog->setView(new GuiBibtex(*dialog));
163                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
164         } else if (name == "box") {
165                 dialog->setController(new ControlBox(*dialog));
166                 dialog->setView(new GuiBox(*dialog));
167                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
168         } else if (name == "branch") {
169                 dialog->setController(new ControlBranch(*dialog));
170                 dialog->setView(new GuiBranch(*dialog));
171                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
172         } else if (name == "changes") {
173                 dialog->setController(new ControlChanges(*dialog));
174                 dialog->setView(new GuiChanges(*dialog));
175                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
176         } else if (name == "character") {
177                 dialog->setController(new ControlCharacter(*dialog));
178                 dialog->setView(new GuiCharacter(*dialog));
179                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
180         } else if (name == "citation") {
181                 GuiCitation * ci = new GuiCitation(*dialog);
182                 dialog->setController(ci);
183                 dialog->setView(new GuiCitationDialog(*dialog, ci));
184                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
185         } else if (name == "document") {
186                 dialog->setController(new ControlDocument(*dialog));
187                 dialog->setView(new GuiDocument(*dialog));
188                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
189         } else if (name == "embedding") {
190                 GuiViewBase & gui_view = static_cast<GuiViewBase &>(lyxview_);
191                 GuiEmbeddedFiles * qef = new GuiEmbeddedFiles(*dialog);
192                 dialog->setController(qef);
193                 dialog->setView(new DockView<GuiEmbeddedFiles, GuiEmbeddedFilesDialog>(
194                         *dialog, qef, &gui_view, _("Embedded Files"), Qt::RightDockWidgetArea));
195                 dialog->bc().bp(new OkCancelPolicy);
196         } else if (name == "errorlist") {
197                 dialog->setController(new ControlErrorList(*dialog));
198                 dialog->setView(new GuiErrorList(*dialog));
199                 dialog->bc().bp(new OkCancelPolicy);
200         } else if (name == "ert") {
201                 dialog->setController(new ControlERT(*dialog));
202                 dialog->setView(new GuiERT(*dialog));
203                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
204         } else if (name == "external") {
205                 dialog->setController(new ControlExternal(*dialog));
206                 dialog->setView(new GuiExternal(*dialog));
207                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
208         } else if (name == "file") {
209                 dialog->setController(new ControlShowFile(*dialog));
210                 dialog->setView(new GuiShowFile(*dialog));
211                 dialog->bc().bp(new OkCancelPolicy);
212         } else if (name == "findreplace") {
213                 dialog->setController(new ControlSearch(*dialog));
214                 dialog->setView(new GuiSearch(*dialog));
215                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
216         } else if (name == "float") {
217                 dialog->setController(new ControlFloat(*dialog));
218                 dialog->setView(new GuiFloat(*dialog));
219                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
220         } else if (name == "graphics") {
221                 dialog->setController(new ControlGraphics(*dialog));
222                 dialog->setView(new GuiGraphics(*dialog));
223                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
224         } else if (name == "include") {
225                 dialog->setController(new ControlInclude(*dialog));
226                 dialog->setView(new GuiInclude(*dialog));
227                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
228         } else if (name == "index") {
229                 dialog->setController(new ControlCommand(*dialog, name, name));
230                 dialog->setView(new GuiIndex(*dialog,
231                                            _("Index Entry"),
232                                            qt_("&Keyword:")));
233                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
234         } else if (name == "nomenclature") {
235                 dialog->setController(new ControlCommand(*dialog, name, name));
236                 dialog->setView(new GuiNomencl(*dialog, _("Nomenclature Entry")));
237                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
238         } else if (name == "label") {
239                 dialog->setController(new ControlCommand(*dialog, name, name));
240                 dialog->setView(new GuiIndex(*dialog,
241                                            _("Label"),
242                                            qt_("&Label:")));
243                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
244         } else if (name == "log") {
245                 dialog->setController(new ControlLog(*dialog));
246                 dialog->setView(new GuiLog(*dialog));
247                 dialog->bc().bp(new OkCancelPolicy);
248         } else if (name == "view-source") {
249                 GuiViewSource * qvs = new GuiViewSource(*dialog);
250                 dialog->setController(qvs);
251                 GuiViewBase & gui_view = static_cast<GuiViewBase &>(lyxview_);
252                 dialog->setView(new DockView<GuiViewSource, GuiViewSourceDialog>(
253                         *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 GuiDelimiter(*dialog));
258                 dialog->bc().bp(new IgnorantPolicy);
259         } else if (name == "mathmatrix") {
260                 dialog->setController(new ControlMath(*dialog));
261                 dialog->setView(new GuiMathMatrix(*dialog));
262                 dialog->bc().bp(new IgnorantPolicy);
263         } else if (name == "note") {
264                 dialog->setController(new ControlNote(*dialog));
265                 dialog->setView(new GuiNote(*dialog));
266                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
267         } else if (name == "paragraph") {
268                 dialog->setController(new ControlParagraph(*dialog));
269                 dialog->setView(new GuiParagraph(*dialog));
270                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
271         } else if (name == "prefs") {
272                 dialog->setController(new ControlPrefs(*dialog));
273                 dialog->setView(new GuiPrefs(*dialog));
274                 dialog->bc().bp(new PreferencesPolicy);
275         } else if (name == "print") {
276                 dialog->setController(new ControlPrint(*dialog));
277                 dialog->setView(new GuiPrint(*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 ControlRef(*dialog));
282                 dialog->setView(new GuiRef(*dialog));
283                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
284         } else if (name == "sendto") {
285                 dialog->setController(new ControlSendto(*dialog));
286                 dialog->setView(new GuiSendto(*dialog));
287                 dialog->bc().bp(new OkApplyCancelPolicy);
288         } else if (name == "spellchecker") {
289                 dialog->setController(new ControlSpellchecker(*dialog));
290                 dialog->setView(new GuiSpellchecker(*dialog));
291                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
292         } else if (name == "tabular") {
293                 dialog->setController(new ControlTabular(*dialog));
294                 dialog->setView(new GuiTabular(*dialog));
295                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
296         } else if (name == "tabularcreate") {
297                 dialog->setController(new ControlTabularCreate(*dialog));
298                 dialog->setView(new GuiTabularCreate(*dialog));
299                 dialog->bc().bp(new IgnorantPolicy);
300         } else if (name == "texinfo") {
301                 dialog->setController(new ControlTexinfo(*dialog));
302                 dialog->setView(new GuiTexinfo(*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 GuiThesaurus(*dialog));
308                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
309 #endif
310         } else if (name == "toc") {
311                 GuiViewBase & gui_view = static_cast<GuiViewBase &>(lyxview_);
312                 GuiToc * qtoc = new GuiToc(*dialog, &gui_view);
313                 dialog->setController(qtoc);
314 #ifdef Q_WS_MACX
315                 // On Mac show as a drawer at the right
316                 dialog->setView(new DockView<GuiToc, TocWidget>(
317                         *dialog, qtoc, &gui_view, _("Outline"), Qt::RightDockWidgetArea, Qt::Drawer));
318 #else
319                 dialog->setView(new DockView<GuiToc, TocWidget>(
320                         *dialog, qtoc, &gui_view, _("Outline")));
321 #endif
322                 dialog->bc().bp(new OkCancelPolicy);
323         } else if (name == "url") {
324                 dialog->setController(new ControlCommand(*dialog, name, name));
325                 dialog->setView(new UrlView(*dialog));
326                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
327         } else if (name == "vspace") {
328                 dialog->setController(new ControlVSpace(*dialog));
329                 dialog->setView(new GuiVSpace(*dialog));
330                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
331         } else if (name == "wrap") {
332                 dialog->setController(new ControlWrap(*dialog));
333                 dialog->setView(new GuiWrap(*dialog));
334                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
335         } else if (name == "listings") {
336                 dialog->setController(new ControlListings(*dialog));
337                 dialog->setView(new GuiListings(*dialog));
338                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
339         }
340
341         return dialog;
342 }
343
344
345 /// Are the tooltips on or off?
346 bool Dialogs::tooltipsEnabled()
347 {
348         return false;
349 }
350
351 } // namespace frontend
352 } // namespace lyx