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