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