]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/Dialogs.C
* src/frontends/qt4/GuiSelection.C
[lyx.git] / src / frontends / qt4 / Dialogs.C
1 /**
2  * \file qt4/Dialogs.C
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 "ControlLog.h"
29 #include "ControlViewSource.h"
30 #include "ControlMath.h"
31 #include "ControlNote.h"
32 #include "ControlParagraph.h"
33 #include "ControlPrefs.h"
34 #include "ControlPrint.h"
35 #include "ControlRef.h"
36 #include "ControlSearch.h"
37 #include "ControlSendto.h"
38 #include "ControlShowFile.h"
39 #include "ControlSpellchecker.h"
40 #include "ControlTabular.h"
41 #include "ControlTabularCreate.h"
42 #include "ControlVSpace.h"
43 #include "ControlWrap.h"
44
45 #include "Qt2BC.h"
46 #include "ButtonController.h"
47 #include "QAbout.h"
48 #include "QBibitem.h"
49 #include "QBibtex.h"
50 #include "QBox.h"
51 #include "QBranch.h"
52 #include "QChanges.h"
53 #include "QCharacter.h"
54 #include "QCitation.h"
55 #include "QCitationDialog.h"
56 #include "QDocument.h"
57 #include "QErrorList.h"
58 #include "QERT.h"
59 #include "QExternal.h"
60 #include "QFloat.h"
61 #include "QGraphics.h"
62 #include "QInclude.h"
63 #include "QIndex.h"
64 #include "QNomencl.h"
65 #include "QLog.h"
66 #include "QViewSource.h"
67 #include "QMath.h"
68 #include "QNote.h"
69 #include "QParagraph.h"
70 #include "QPrefs.h"
71 #include "QPrint.h"
72 #include "QRef.h"
73 #include "QSearch.h"
74 #include "QSendto.h"
75 #include "QShowFile.h"
76 #include "QSpellchecker.h"
77 #include "QTabular.h"
78 #include "QTabularCreate.h"
79 #include "QTexinfo.h"
80 #include "QToc.h"
81 #include "QTocDialog.h"
82 #include "UrlView.h"
83 #include "QVSpace.h"
84 #include "QWrap.h"
85
86 #ifdef HAVE_LIBAIKSAURUS
87 #include "ControlThesaurus.h"
88 #include "QThesaurus.h"
89 #endif
90
91 #include "qt_helpers.h"
92
93 #include <boost/assert.hpp>
94
95
96 using std::string;
97
98 using namespace lyx::frontend;
99
100 namespace {
101
102 char const * const dialognames[] = {
103 "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
104 "citation", "document", "errorlist", "ert", "external", "file",
105 "findreplace", "float", "graphics", "include", "index", "nomenclature", "label", "log",
106 "mathpanel", "mathdelimiter", "mathmatrix", "note", "paragraph",
107 "prefs", "print", "ref", "sendto", "spellchecker","tabular", "tabularcreate",
108
109 #ifdef HAVE_LIBAIKSAURUS
110 "thesaurus",
111 #endif
112
113 "texinfo", "toc", "url", "view-source", "vspace", "wrap" };
114
115 char const * const * const end_dialognames =
116         dialognames + (sizeof(dialognames) / sizeof(char *));
117
118 class cmpCStr {
119 public:
120         cmpCStr(char const * name) : name_(name) {}
121         bool operator()(char const * other) {
122                 return strcmp(other, name_) == 0;
123         }
124 private:
125         char const * name_;
126 };
127
128
129 } // namespace anon
130
131
132 namespace lyx {
133
134 bool Dialogs::isValidName(string const & name) const
135 {
136         return std::find_if(dialognames, end_dialognames,
137                             cmpCStr(name.c_str())) != end_dialognames;
138 }
139
140
141 Dialogs::DialogPtr Dialogs::build(string const & name)
142 {
143         BOOST_ASSERT(isValidName(name));
144
145         DialogPtr dialog(new Dialog(lyxview_, name));
146         dialog->bc().view(new Qt2BC(dialog->bc()));
147
148         if (name == "aboutlyx") {
149                 dialog->setController(new ControlAboutlyx(*dialog));
150                 dialog->setView(new QAbout(*dialog));
151                 dialog->bc().bp(new OkCancelPolicy);
152         } else if (name == "bibitem") {
153                 dialog->setController(new ControlCommand(*dialog, name, name));
154                 dialog->setView(new QBibitem(*dialog));
155                 dialog->bc().bp(new OkCancelReadOnlyPolicy);
156         } else if (name == "bibtex") {
157                 dialog->setController(new ControlBibtex(*dialog));
158                 dialog->setView(new QBibtex(*dialog));
159                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
160         } else if (name == "box") {
161                 dialog->setController(new ControlBox(*dialog));
162                 dialog->setView(new QBox(*dialog));
163                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
164         } else if (name == "branch") {
165                 dialog->setController(new ControlBranch(*dialog));
166                 dialog->setView(new QBranch(*dialog));
167                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
168         } else if (name == "changes") {
169                 dialog->setController(new ControlChanges(*dialog));
170                 dialog->setView(new QChanges(*dialog));
171                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
172         } else if (name == "character") {
173                 dialog->setController(new ControlCharacter(*dialog));
174                 dialog->setView(new QCharacter(*dialog));
175                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
176         } else if (name == "citation") {
177                 QCitation * ci = new QCitation(*dialog);
178                 dialog->setController(ci);
179                 dialog->setView(new QCitationDialog(*dialog, ci));
180                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
181         } else if (name == "document") {
182                 dialog->setController(new ControlDocument(*dialog));
183                 dialog->setView(new QDocument(*dialog));
184                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
185         } else if (name == "errorlist") {
186                 dialog->setController(new ControlErrorList(*dialog));
187                 dialog->setView(new QErrorList(*dialog));
188                 dialog->bc().bp(new OkCancelPolicy);
189         } else if (name == "ert") {
190                 dialog->setController(new ControlERT(*dialog));
191                 dialog->setView(new QERT(*dialog));
192                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
193         } else if (name == "external") {
194                 dialog->setController(new ControlExternal(*dialog));
195                 dialog->setView(new QExternal(*dialog));
196                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
197         } else if (name == "file") {
198                 dialog->setController(new ControlShowFile(*dialog));
199                 dialog->setView(new QShowFile(*dialog));
200                 dialog->bc().bp(new OkCancelPolicy);
201         } else if (name == "findreplace") {
202                 dialog->setController(new ControlSearch(*dialog));
203                 dialog->setView(new QSearch(*dialog));
204                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
205         } else if (name == "float") {
206                 dialog->setController(new ControlFloat(*dialog));
207                 dialog->setView(new QFloat(*dialog));
208                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
209         } else if (name == "graphics") {
210                 dialog->setController(new ControlGraphics(*dialog));
211                 dialog->setView(new QGraphics(*dialog));
212                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
213         } else if (name == "include") {
214                 dialog->setController(new ControlInclude(*dialog));
215                 dialog->setView(new QInclude(*dialog));
216                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
217         } else if (name == "index") {
218                 dialog->setController(new ControlCommand(*dialog, name, name));
219                 dialog->setView(new QIndex(*dialog,
220                                            _("Index Entry"),
221                                            qt_("&Keyword:")));
222                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
223         } else if (name == "nomenclature") {
224                 dialog->setController(new ControlCommand(*dialog, name, name));
225                 dialog->setView(new QNomencl(*dialog, _("Glossary Entry")));
226                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
227         } else if (name == "label") {
228                 dialog->setController(new ControlCommand(*dialog, name, name));
229                 dialog->setView(new QIndex(*dialog,
230                                            _("Label"),
231                                            qt_("&Label:")));
232                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
233         } else if (name == "log") {
234                 dialog->setController(new ControlLog(*dialog));
235                 dialog->setView(new QLog(*dialog));
236                 dialog->bc().bp(new OkCancelPolicy);
237         } else if (name == "view-source") {
238                 dialog->setController(new ControlViewSource(*dialog));
239                 dialog->setView(new QViewSource(*dialog));
240                 dialog->bc().bp(new OkCancelPolicy);
241         } else if (name == "mathpanel") {
242                 dialog->setController(new ControlMath(*dialog));
243                 dialog->setView(new QMath(*dialog));
244                 dialog->bc().bp(new IgnorantPolicy);
245         } else if (name == "mathdelimiter") {
246                 dialog->setController(new ControlMath(*dialog));
247                 dialog->setView(new QMathDelimiter(*dialog));
248                 dialog->bc().bp(new IgnorantPolicy);
249         } else if (name == "mathmatrix") {
250                 dialog->setController(new ControlMath(*dialog));
251                 dialog->setView(new QMathMatrix(*dialog));
252                 dialog->bc().bp(new IgnorantPolicy);
253         } else if (name == "note") {
254                 dialog->setController(new ControlNote(*dialog));
255                 dialog->setView(new QNote(*dialog));
256                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
257         } else if (name == "paragraph") {
258                 dialog->setController(new ControlParagraph(*dialog));
259                 dialog->setView(new QParagraph(*dialog));
260                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
261         } else if (name == "prefs") {
262                 dialog->setController(new ControlPrefs(*dialog));
263                 dialog->setView(new QPrefs(*dialog));
264                 dialog->bc().bp(new PreferencesPolicy);
265         } else if (name == "print") {
266                 dialog->setController(new ControlPrint(*dialog));
267                 dialog->setView(new QPrint(*dialog));
268                 dialog->bc().bp(new OkApplyCancelPolicy);
269         } else if (name == "ref") {
270                 // full qualification because qt4 has also a ControlRef type
271                 dialog->setController(new lyx::frontend::ControlRef(*dialog));
272                 dialog->setView(new QRef(*dialog));
273                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
274         } else if (name == "sendto") {
275                 dialog->setController(new ControlSendto(*dialog));
276                 dialog->setView(new QSendto(*dialog));
277                 dialog->bc().bp(new OkApplyCancelPolicy);
278         } else if (name == "spellchecker") {
279                 dialog->setController(new ControlSpellchecker(*dialog));
280                 dialog->setView(new QSpellchecker(*dialog));
281                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
282         } else if (name == "tabular") {
283                 dialog->setController(new ControlTabular(*dialog));
284                 dialog->setView(new QTabular(*dialog));
285                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
286         } else if (name == "tabularcreate") {
287                 dialog->setController(new ControlTabularCreate(*dialog));
288                 dialog->setView(new QTabularCreate(*dialog));
289                 dialog->bc().bp(new IgnorantPolicy);
290         } else if (name == "texinfo") {
291                 dialog->setController(new ControlTexinfo(*dialog));
292                 dialog->setView(new QTexinfo(*dialog));
293                 dialog->bc().bp(new OkCancelPolicy);
294 #ifdef HAVE_LIBAIKSAURUS
295         } else if (name == "thesaurus") {
296                 dialog->setController(new ControlThesaurus(*dialog));
297                 dialog->setView(new QThesaurus(*dialog));
298                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
299 #endif
300         } else if (name == "toc") {
301                 QToc * qtoc = new QToc(*dialog);
302                 dialog->setController(qtoc);
303                 dialog->setView(new QTocDialog(*dialog, qtoc));
304                 dialog->bc().bp(new OkCancelPolicy);
305         } else if (name == "url") {
306                 dialog->setController(new ControlCommand(*dialog, name, name));
307                 dialog->setView(new UrlView(*dialog));
308                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
309         } else if (name == "vspace") {
310                 dialog->setController(new ControlVSpace(*dialog));
311                 dialog->setView(new QVSpace(*dialog));
312                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
313         } else if (name == "wrap") {
314                 dialog->setController(new ControlWrap(*dialog));
315                 dialog->setView(new QWrap(*dialog));
316                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
317         }
318
319         return dialog;
320 }
321
322
323 /// Are the tooltips on or off?
324 bool Dialogs::tooltipsEnabled()
325 {
326         return false;
327 }
328
329
330 } // namespace lyx