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