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