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