]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/Dialogs.C
Squash bug 1590 by removing "error" from the list of dialog identifiers.
[lyx.git] / src / frontends / xforms / Dialogs.C
1 /**
2  * \file xforms/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 "Tooltips.h"
16
17 #include "ControlAboutlyx.h"
18 #include "ControlBibtex.h"
19 #include "ControlBox.h"
20 #include "ControlBranch.h"
21 #include "ControlChanges.h"
22 #include "ControlCitation.h"
23 #include "ControlDocument.h"
24 #include "ControlErrorList.h"
25 #include "ControlERT.h"
26 #include "ControlExternal.h"
27 #include "ControlFloat.h"
28 #include "ControlGraphics.h"
29 #include "ControlInclude.h"
30 #include "ControlLog.h"
31 #include "ControlMath.h"
32 #include "ControlNote.h"
33 #include "ControlParagraph.h"
34 #include "ControlPreamble.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 "ControlToc.h"
45 #include "ControlVSpace.h"
46 #include "ControlWrap.h"
47
48 #include "FormAboutlyx.h"
49 #include "FormBibitem.h"
50 #include "FormBibtex.h"
51 #include "FormBox.h"
52 #include "FormBranch.h"
53 #include "FormChanges.h"
54 #include "FormCharacter.h"
55 #include "FormCitation.h"
56 #include "FormDocument.h"
57 #include "FormErrorList.h"
58 #include "FormERT.h"
59 #include "FormExternal.h"
60 #include "FormFloat.h"
61 #include "FormGraphics.h"
62 #include "FormInclude.h"
63 #include "FormLog.h"
64 #include "FormMathsPanel.h"
65 #include "FormMathsBitmap.h"
66 #include "FormMathsDelim.h"
67 #include "FormMathsMatrix.h"
68 #include "FormMathsSpace.h"
69 #include "FormMathsStyle.h"
70 #include "FormNote.h"
71 #include "FormParagraph.h"
72 #include "FormPreamble.h"
73 #include "FormPreferences.h"
74 #include "FormPrint.h"
75 #include "FormRef.h"
76 #include "FormTabular.h"
77 #include "FormTexinfo.h"
78 #include "FormSearch.h"
79 #include "FormSendto.h"
80 #include "FormShowFile.h"
81 #include "FormSpellchecker.h"
82 #include "FormTabularCreate.h"
83 #include "FormText.h"
84 #include "FormToc.h"
85 #include "FormUrl.h"
86 #include "FormVSpace.h"
87 #include "FormWrap.h"
88
89 #ifdef HAVE_LIBAIKSAURUS
90 #include "ControlThesaurus.h"
91 #include "FormThesaurus.h"
92 #endif
93
94 #include "xformsBC.h"
95 #include "ButtonController.h"
96
97 #include "arrows.xbm"
98 #include "bop.xbm"
99 #include "brel.xbm"
100 #include "deco.xbm"
101 #include "dots.xbm"
102 #include "greek.xbm"
103 #include "misc.xbm"
104 #include "varsz.xbm"
105
106 #include "ams_misc.xbm"
107 #include "ams_arrows.xbm"
108 #include "ams_rel.xbm"
109 #include "ams_nrel.xbm"
110 #include "ams_ops.xbm"
111
112 #include <boost/assert.hpp>
113
114
115 using std::string;
116
117
118 namespace {
119
120 FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
121                                    char const * const * data, int size)
122 {
123         char const * const * const end = data + size;
124         return new FormMathsBitmap(parent, title, std::vector<string>(data, end));
125 }
126
127
128 char const * const dialognames[] = {
129 "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
130 "citation", "document", "errorlist" , "ert", "external", "file",
131 "findreplace", "float", "graphics", "include", "index", "label", "log",
132 "mathpanel", "mathaccents", "matharrows", "mathoperators", "mathrelations",
133 "mathgreek", "mathmisc", "mathdots", "mathbigoperators", "mathamsmisc",
134 "mathamsarrows", "mathamsrelations", "mathamsnegatedrelations",
135 "mathamsoperators", "mathdelimiter", "mathmatrix", "mathspace", "mathstyle",
136 "note", "paragraph", "preamble", "prefs", "print", "ref", "sendto",
137 "spellchecker", "tabular", "tabularcreate", "texinfo",
138
139 #ifdef HAVE_LIBAIKSAURUS
140 "thesaurus",
141 #endif
142
143 "toc", "url", "vspace", "wrap" };
144
145 char const * const * const end_dialognames =
146         dialognames + (sizeof(dialognames) / sizeof(char *));
147
148 struct cmpCStr {
149         cmpCStr(char const * name) : name_(name) {}
150         bool operator()(char const * other) {
151                 return strcmp(other, name_) == 0;
152         }
153 private:
154         char const * name_;
155 };
156
157 } // namespace anon
158
159
160 bool Dialogs::isValidName(string const & name) const
161 {
162         return std::find_if(dialognames, end_dialognames,
163                             cmpCStr(name.c_str())) != end_dialognames;
164 }
165
166
167 Dialogs::DialogPtr Dialogs::build(string const & name)
168 {
169         BOOST_ASSERT(isValidName(name));
170
171         DialogPtr dialog(new Dialog(lyxview_, name));
172         dialog->bc().view(new xformsBC(dialog->bc()));
173
174         if (name == "aboutlyx") {
175                 dialog->setController(new ControlAboutlyx(*dialog));
176                 dialog->setView(new FormAboutlyx(*dialog));
177                 dialog->bc().bp(new OkCancelPolicy);
178         } else if (name == "bibitem") {
179                 dialog->setController(new ControlCommand(*dialog, name));
180                 dialog->setView(new FormBibitem(*dialog));
181                 dialog->bc().bp(new OkCancelReadOnlyPolicy);
182         } else if (name == "bibtex") {
183                 dialog->setController(new ControlBibtex(*dialog));
184                 dialog->setView(new FormBibtex(*dialog));
185                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
186         } else if (name == "box") {
187                 dialog->setController(new ControlBox(*dialog));
188                 dialog->setView(new FormBox(*dialog));
189                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
190         } else if (name == "branch") {
191                 dialog->setController(new ControlBranch(*dialog));
192                 dialog->setView(new FormBranch(*dialog));
193                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
194         } else if (name == "changes") {
195                 dialog->setController(new ControlChanges(*dialog));
196                 dialog->setView(new FormChanges(*dialog));
197                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
198         } else if (name == "character") {
199                 dialog->setController(new ControlCharacter(*dialog));
200                 dialog->setView(new FormCharacter(*dialog));
201                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
202         } else if (name == "citation") {
203                 dialog->setController(new ControlCitation(*dialog));
204                 dialog->setView(new FormCitation(*dialog));
205                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
206         } else if (name == "document") {
207                 dialog->setController(new ControlDocument(*dialog));
208                 dialog->setView(new FormDocument(*dialog));
209                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
210         } else if (name == "errorlist") {
211                 dialog->setController(new ControlErrorList(*dialog));
212                 dialog->setView(new FormErrorList(*dialog));
213                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
214         } else if (name == "ert") {
215                 dialog->setController(new ControlERT(*dialog));
216                 dialog->setView(new FormERT(*dialog));
217                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
218         } else if (name == "external") {
219                 dialog->setController(new ControlExternal(*dialog));
220                 dialog->setView(new FormExternal(*dialog));
221                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
222         } else if (name == "file") {
223                 dialog->setController(new ControlShowFile(*dialog));
224                 dialog->setView(new FormShowFile(*dialog));
225                 dialog->bc().bp(new OkCancelPolicy);
226         } else if (name == "findreplace") {
227                 dialog->setController(new ControlSearch(*dialog));
228                 dialog->setView(new FormSearch(*dialog));
229                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
230         } else if (name == "float") {
231                 dialog->setController(new ControlFloat(*dialog));
232                 dialog->setView(new FormFloat(*dialog));
233                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
234         } else if (name == "graphics") {
235                 dialog->setController(new ControlGraphics(*dialog));
236                 dialog->setView(new FormGraphics(*dialog));
237                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
238         } else if (name == "include") {
239                 dialog->setController(new ControlInclude(*dialog));
240                 dialog->setView(new FormInclude(*dialog));
241                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
242         } else if (name == "index") {
243                 dialog->setController(new ControlCommand(*dialog, name));
244                 dialog->setView(new FormText(*dialog,
245                                              _("Index"), _("Keyword:|#K")));
246                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
247         } else if (name == "label") {
248                 dialog->setController(new ControlCommand(*dialog, name));
249                 dialog->setView(new FormText(*dialog,
250                                              _("Label"), _("Label:|#L")));
251                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
252         } else if (name == "log") {
253                 dialog->setController(new ControlLog(*dialog));
254                 dialog->setView(new FormLog(*dialog));
255                 dialog->bc().bp(new OkCancelPolicy);
256
257         } else if (name == "mathpanel") {
258                 dialog->setController(new ControlMath(*dialog));
259                 dialog->setView(new FormMathsPanel(*dialog));
260                 dialog->bc().bp(new IgnorantPolicy);
261
262         } else if (name == "mathaccents") {
263                 FormMathsBitmap * bitmap =
264                         createFormBitmap(*dialog, _("Maths Decorations & Accents"),
265                                          latex_deco, nr_latex_deco);
266                 bitmap->addBitmap(
267                         BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
268                 bitmap->addBitmap(
269                         BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
270
271                 dialog->setController(new ControlMath(*dialog));
272                 dialog->setView(bitmap);
273                 dialog->bc().bp(new IgnorantPolicy);
274
275         } else if (name == "matharrows") {
276                 FormMathsBitmap * bitmap =
277                         createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
278                 bitmap->addBitmap(
279                         BitmapStore(20, 5, 4, arrow_width,  arrow_height,  arrow_bits, true));
280                 bitmap->addBitmap(
281                         BitmapStore(7,  2, 4, larrow_width, larrow_height, larrow_bits, false));
282                 bitmap->addBitmap(
283                         BitmapStore(4,  2, 2, darrow_width,  darrow_height, darrow_bits, true));
284
285                 dialog->setController(new ControlMath(*dialog));
286                 dialog->setView(bitmap);
287                 dialog->bc().bp(new IgnorantPolicy);
288
289         } else if (name == "mathoperators") {
290                 FormMathsBitmap * bitmap =
291                         createFormBitmap(*dialog, _("Binary Ops"),
292                                          latex_bop, nr_latex_bop);
293                 bitmap->addBitmap(
294                         BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
295
296                 dialog->setController(new ControlMath(*dialog));
297                 dialog->setView(bitmap);
298                 dialog->bc().bp(new IgnorantPolicy);
299
300         } else if (name == "mathrelations") {
301                 FormMathsBitmap * bitmap =
302                         createFormBitmap(*dialog, _("Binary Relations"),
303                                          latex_brel, nr_latex_brel);
304                 bitmap->addBitmap(
305                         BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
306
307                 dialog->setController(new ControlMath(*dialog));
308                 dialog->setView(bitmap);
309                 dialog->bc().bp(new IgnorantPolicy);
310
311         } else if (name == "mathgreek") {
312                 FormMathsBitmap * bitmap =
313                         createFormBitmap(*dialog, _("Greek"),
314                                          latex_greek, nr_latex_greek);
315                 bitmap->addBitmap(
316                         BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
317                 bitmap->addBitmap(
318                         BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
319
320                 dialog->setController(new ControlMath(*dialog));
321                 dialog->setView(bitmap);
322                 dialog->bc().bp(new IgnorantPolicy);
323
324         } else if (name == "mathmisc") {
325                 FormMathsBitmap * bitmap =
326                         createFormBitmap(*dialog, _("Misc"),
327                                          latex_misc, nr_latex_misc);
328                 bitmap->addBitmap(
329                         BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
330                 bitmap->addBitmap(
331                         BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
332                 bitmap->addBitmap(
333                         BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
334                 bitmap->addBitmap(
335                         BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
336
337                 dialog->setController(new ControlMath(*dialog));
338                 dialog->setView(bitmap);
339                 dialog->bc().bp(new IgnorantPolicy);
340
341         } else if (name == "mathdots") {
342                 FormMathsBitmap * bitmap =
343                         createFormBitmap(*dialog, _("Dots"),
344                                          latex_dots, nr_latex_dots);
345                 bitmap->addBitmap(
346                         BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
347
348                 dialog->setController(new ControlMath(*dialog));
349                 dialog->setView(bitmap);
350                 dialog->bc().bp(new IgnorantPolicy);
351
352         } else if (name == "mathbigoperators") {
353                 FormMathsBitmap * bitmap =
354                         createFormBitmap(*dialog, _("Big Operators"),
355                                          latex_varsz, nr_latex_varsz);
356                 bitmap->addBitmap(
357                         BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
358
359                 dialog->setController(new ControlMath(*dialog));
360                 dialog->setView(bitmap);
361                 dialog->bc().bp(new IgnorantPolicy);
362
363         } else if (name == "mathamsmisc") {
364                 FormMathsBitmap * bitmap =
365                         createFormBitmap(*dialog, _("AMS Misc"),
366                                          latex_ams_misc, nr_latex_ams_misc);
367                 bitmap->addBitmap(
368                         BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
369                 bitmap->addBitmap(
370                         BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
371
372                 dialog->setController(new ControlMath(*dialog));
373                 dialog->setView(bitmap);
374                 dialog->bc().bp(new IgnorantPolicy);
375
376         } else if (name == "mathamsarrows") {
377                 FormMathsBitmap * bitmap =
378                         createFormBitmap(*dialog, _("AMS Arrows"),
379                                          latex_ams_arrows, nr_latex_ams_arrows);
380                 bitmap->addBitmap(
381                         BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
382                 bitmap->addBitmap(
383                         BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
384
385                 dialog->setController(new ControlMath(*dialog));
386                 dialog->setView(bitmap);
387                 dialog->bc().bp(new IgnorantPolicy);
388
389         } else if (name == "mathamsrelations") {
390                 FormMathsBitmap * bitmap =
391                         createFormBitmap(*dialog, _("AMS Relations"),
392                                          latex_ams_rel, nr_latex_ams_rel);
393                 bitmap->addBitmap(
394                         BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
395
396                 dialog->setController(new ControlMath(*dialog));
397                 dialog->setView(bitmap);
398                 dialog->bc().bp(new IgnorantPolicy);
399
400         } else if (name == "mathamsnegatedrelations") {
401                 FormMathsBitmap * bitmap =
402                         createFormBitmap(*dialog, _("AMS Negated Rel"),
403                                          latex_ams_nrel, nr_latex_ams_nrel);
404                 bitmap->addBitmap(
405                         BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
406
407                 dialog->setController(new ControlMath(*dialog));
408                 dialog->setView(bitmap);
409                 dialog->bc().bp(new IgnorantPolicy);
410
411         } else if (name == "mathamsoperators") {
412                 FormMathsBitmap * bitmap =
413                         createFormBitmap(*dialog, _("AMS Operators"),
414                                          latex_ams_ops, nr_latex_ams_ops);
415                 bitmap->addBitmap(
416                         BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
417
418                 dialog->setController(new ControlMath(*dialog));
419                 dialog->setView(bitmap);
420                 dialog->bc().bp(new IgnorantPolicy);
421
422         } else if (name == "mathdelimiter") {
423                 dialog->setController(new ControlMath(*dialog));
424                 dialog->setView(new FormMathsDelim(*dialog));
425                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
426         } else if (name == "mathmatrix") {
427                 dialog->setController(new ControlMath(*dialog));
428                 dialog->setView(new FormMathsMatrix(*dialog));
429                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
430         } else if (name == "mathspace") {
431                 dialog->setController(new ControlMath(*dialog));
432                 dialog->setView(new FormMathsSpace(*dialog));
433                 dialog->bc().bp(new IgnorantPolicy);
434         } else if (name == "mathstyle") {
435                 dialog->setController(new ControlMath(*dialog));
436                 dialog->setView(new FormMathsStyle(*dialog));
437                 dialog->bc().bp(new IgnorantPolicy);
438         } else if (name == "note") {
439                 dialog->setController(new ControlNote(*dialog));
440                 dialog->setView(new FormNote(*dialog));
441                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
442         } else if (name == "paragraph") {
443                 dialog->setController(new ControlParagraph(*dialog));
444                 dialog->setView(new FormParagraph(*dialog));
445                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
446         } else if (name == "preamble") {
447                 dialog->setController(new ControlPreamble(*dialog));
448                 dialog->setView(new FormPreamble(*dialog));
449                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
450         } else if (name == "prefs") {
451                 dialog->setController(new ControlPrefs(*dialog));
452                 dialog->setView(new FormPreferences(*dialog));
453                 dialog->bc().bp(new PreferencesPolicy);
454         } else if (name == "print") {
455                 dialog->setController(new ControlPrint(*dialog));
456                 dialog->setView(new FormPrint(*dialog));
457                 dialog->bc().bp(new OkApplyCancelPolicy);
458         } else if (name == "ref") {
459                 dialog->setController(new ControlRef(*dialog));
460                 dialog->setView(new FormRef(*dialog));
461                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
462         } else if (name == "sendto") {
463                 dialog->setController(new ControlSendto(*dialog));
464                 dialog->setView(new FormSendto(*dialog));
465                 dialog->bc().bp(new OkApplyCancelPolicy);
466         } else if (name == "spellchecker") {
467                 dialog->setController(new ControlSpellchecker(*dialog));
468                 dialog->setView(new FormSpellchecker(*dialog));
469                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
470         } else if (name == "tabular") {
471                 dialog->setController(new ControlTabular(*dialog));
472                 dialog->setView(new FormTabular(*dialog));
473                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
474         } else if (name == "tabularcreate") {
475                 dialog->setController(new ControlTabularCreate(*dialog));
476                 dialog->setView(new FormTabularCreate(*dialog));
477                 dialog->bc().bp(new IgnorantPolicy);
478         } else if (name == "texinfo") {
479                 dialog->setController(new ControlTexinfo(*dialog));
480                 dialog->setView(new FormTexinfo(*dialog));
481                 dialog->bc().bp(new OkCancelPolicy);
482 #ifdef HAVE_LIBAIKSAURUS
483         } else if (name == "thesaurus") {
484                 dialog->setController(new ControlThesaurus(*dialog));
485                 dialog->setView(new FormThesaurus(*dialog));
486                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
487 #endif
488         } else if (name == "toc") {
489                 dialog->setController(new ControlToc(*dialog));
490                 dialog->setView(new FormToc(*dialog));
491                 dialog->bc().bp(new OkCancelPolicy);
492         } else if (name == "url") {
493                 dialog->setController(new ControlCommand(*dialog, name));
494                 dialog->setView(new FormUrl(*dialog));
495                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
496         } else if (name == "vspace") {
497                 dialog->setController(new ControlVSpace(*dialog));
498                 dialog->setView(new FormVSpace(*dialog));
499                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
500         } else if (name == "wrap") {
501                 dialog->setController(new ControlWrap(*dialog));
502                 dialog->setView(new FormWrap(*dialog));
503                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
504         }
505
506         return dialog;
507 }
508
509
510 void Dialogs::toggleTooltips()
511 {
512         Tooltips::toggleEnabled();
513 }
514
515
516 /// Are the tooltips on or off?
517 bool Dialogs::tooltipsEnabled()
518 {
519         return Tooltips::enabled();
520 }