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