]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/Dialogs.cpp
delete unneeded Menubar virtual interface.
[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 "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 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 QAbout(*dialog));
154                 dialog->bc().bp(new OkCancelPolicy);
155         } else if (name == "bibitem") {
156                 dialog->setController(new ControlCommand(*dialog, name, name));
157                 dialog->setView(new QBibitem(*dialog));
158                 dialog->bc().bp(new OkCancelReadOnlyPolicy);
159         } else if (name == "bibtex") {
160                 dialog->setController(new ControlBibtex(*dialog));
161                 dialog->setView(new QBibtex(*dialog));
162                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
163         } else if (name == "box") {
164                 dialog->setController(new ControlBox(*dialog));
165                 dialog->setView(new QBox(*dialog));
166                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
167         } else if (name == "branch") {
168                 dialog->setController(new ControlBranch(*dialog));
169                 dialog->setView(new QBranch(*dialog));
170                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
171         } else if (name == "changes") {
172                 dialog->setController(new ControlChanges(*dialog));
173                 dialog->setView(new QChanges(*dialog));
174                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
175         } else if (name == "character") {
176                 dialog->setController(new ControlCharacter(*dialog));
177                 dialog->setView(new QCharacter(*dialog));
178                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
179         } else if (name == "citation") {
180                 QCitation * ci = new QCitation(*dialog);
181                 dialog->setController(ci);
182                 dialog->setView(new QCitationDialog(*dialog, ci));
183                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
184         } else if (name == "document") {
185                 dialog->setController(new ControlDocument(*dialog));
186                 dialog->setView(new QDocument(*dialog));
187                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
188         } else if (name == "errorlist") {
189                 dialog->setController(new ControlErrorList(*dialog));
190                 dialog->setView(new QErrorList(*dialog));
191                 dialog->bc().bp(new OkCancelPolicy);
192         } else if (name == "ert") {
193                 dialog->setController(new ControlERT(*dialog));
194                 dialog->setView(new QERT(*dialog));
195                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
196         } else if (name == "external") {
197                 dialog->setController(new ControlExternal(*dialog));
198                 dialog->setView(new QExternal(*dialog));
199                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
200         } else if (name == "file") {
201                 dialog->setController(new ControlShowFile(*dialog));
202                 dialog->setView(new QShowFile(*dialog));
203                 dialog->bc().bp(new OkCancelPolicy);
204         } else if (name == "findreplace") {
205                 dialog->setController(new ControlSearch(*dialog));
206                 dialog->setView(new QSearch(*dialog));
207                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
208         } else if (name == "float") {
209                 dialog->setController(new ControlFloat(*dialog));
210                 dialog->setView(new QFloat(*dialog));
211                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
212         } else if (name == "graphics") {
213                 dialog->setController(new ControlGraphics(*dialog));
214                 dialog->setView(new QGraphics(*dialog));
215                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
216         } else if (name == "include") {
217                 dialog->setController(new ControlInclude(*dialog));
218                 dialog->setView(new QInclude(*dialog));
219                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
220         } else if (name == "index") {
221                 dialog->setController(new ControlCommand(*dialog, name, name));
222                 dialog->setView(new QIndex(*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 QNomencl(*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 QIndex(*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 QLog(*dialog));
239                 dialog->bc().bp(new OkCancelPolicy);
240         } else if (name == "view-source") {
241                 QViewSource * qvs = new QViewSource(*dialog);
242                 dialog->setController(qvs);
243                 GuiView & gui_view = static_cast<GuiView &>(lyxview_);
244                 dialog->setView(new DockView<QViewSource, QViewSourceDialog>(
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 QMathDelimiter(*dialog));
250                 dialog->bc().bp(new IgnorantPolicy);
251         } else if (name == "mathmatrix") {
252                 dialog->setController(new ControlMath(*dialog));
253                 dialog->setView(new QMathMatrix(*dialog));
254                 dialog->bc().bp(new IgnorantPolicy);
255         } else if (name == "note") {
256                 dialog->setController(new ControlNote(*dialog));
257                 dialog->setView(new QNote(*dialog));
258                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
259         } else if (name == "paragraph") {
260                 dialog->setController(new ControlParagraph(*dialog));
261                 dialog->setView(new QParagraph(*dialog));
262                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
263         } else if (name == "prefs") {
264                 dialog->setController(new ControlPrefs(*dialog));
265                 dialog->setView(new QPrefs(*dialog));
266                 dialog->bc().bp(new PreferencesPolicy);
267         } else if (name == "print") {
268                 dialog->setController(new ControlPrint(*dialog));
269                 dialog->setView(new QPrint(*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 QRef(*dialog));
275                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
276         } else if (name == "sendto") {
277                 dialog->setController(new ControlSendto(*dialog));
278                 dialog->setView(new QSendto(*dialog));
279                 dialog->bc().bp(new OkApplyCancelPolicy);
280         } else if (name == "spellchecker") {
281                 dialog->setController(new ControlSpellchecker(*dialog));
282                 dialog->setView(new QSpellchecker(*dialog));
283                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
284         } else if (name == "tabular") {
285                 dialog->setController(new ControlTabular(*dialog));
286                 dialog->setView(new QTabular(*dialog));
287                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
288         } else if (name == "tabularcreate") {
289                 dialog->setController(new ControlTabularCreate(*dialog));
290                 dialog->setView(new QTabularCreate(*dialog));
291                 dialog->bc().bp(new IgnorantPolicy);
292         } else if (name == "texinfo") {
293                 dialog->setController(new ControlTexinfo(*dialog));
294                 dialog->setView(new QTexinfo(*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 QThesaurus(*dialog));
300                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
301 #endif
302         } else if (name == "toc") {
303                 GuiView & gui_view = static_cast<GuiView &>(lyxview_);
304                 QToc * qtoc = new QToc(*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<QToc, TocWidget>(
309                         *dialog, qtoc, &gui_view, _("Outline"), Qt::RightDockWidgetArea, Qt::Drawer));
310 #else
311                 dialog->setView(new DockView<QToc, 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 QVSpace(*dialog));
322                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
323         } else if (name == "wrap") {
324                 dialog->setController(new ControlWrap(*dialog));
325                 dialog->setView(new QWrap(*dialog));
326                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
327         } else if (name == "listings") {
328                 dialog->setController(new ControlListings(*dialog));
329                 dialog->setView(new QListings(*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