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