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