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