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.
6 * \author Angus Leeming
8 * Full author contact details are available in file CREDITS.
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"
52 #include "GAboutlyx.h"
54 #include "GMathDelim.h"
55 #include "FormBibitem.h"
56 #include "FormBibtex.h"
58 #include "FormBranch.h"
60 #include "GCharacter.h"
61 #include "FormCitation.h"
62 #include "FormDocument.h"
63 #include "GErrorList.h"
65 #include "FormExternal.h"
66 #include "FormFloat.h"
67 #include "GGraphics.h"
68 #include "FormInclude.h"
70 #include "GMathPanel.h"
71 #include "FormMathsBitmap.h"
72 #include "GMathsMatrix.h"
73 #include "FormMathsSpace.h"
74 #include "FormMathsStyle.h"
76 #include "GParagraph.h"
77 #include "FormPreamble.h"
78 #include "FormPreferences.h"
82 #include "FormSendto.h"
83 #include "FormTabular.h"
85 #include "GShowFile.h"
86 #include "GSpellchecker.h"
87 #include "GTableCreate.h"
90 #include "FormVSpace.h"
93 #ifdef HAVE_LIBAIKSAURUS
94 #include "ControlThesaurus.h"
95 #include "FormThesaurus.h"
99 #include "ButtonController.h"
101 #include "arrows.xbm"
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"
116 #include <boost/assert.hpp>
121 using namespace lyx::frontend;
125 FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
126 char const * const * data, int size)
128 char const * const * const end = data + size;
129 return new FormMathsBitmap(parent, title, std::vector<string>(data, end));
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",
144 #ifdef HAVE_LIBAIKSAURUS
148 "toc", "url", "vspace", "wrap" };
150 char const * const * const end_dialognames =
151 dialognames + (sizeof(dialognames) / sizeof(char *));
154 cmpCStr(char const * name) : name_(name) {}
155 bool operator()(char const * other) {
156 return strcmp(other, name_) == 0;
165 bool Dialogs::isValidName(string const & name) const
167 return std::find_if(dialognames, end_dialognames,
168 cmpCStr(name.c_str())) != end_dialognames;
172 Dialogs::DialogPtr Dialogs::build(string const & name)
174 BOOST_ASSERT(isValidName(name));
176 DialogPtr dialog(new Dialog(lyxview_, name));
177 dialog->bc().view(new xformsBC(dialog->bc()));
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);
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);
274 } else if (name == "mathaccents") {
275 FormMathsBitmap * bitmap =
276 createFormBitmap(*dialog, _("Maths Decorations & Accents"),
277 latex_deco, nr_latex_deco);
279 BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
281 BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
283 dialog->setController(new ControlMath(*dialog));
284 dialog->setView(bitmap);
285 dialog->bc().bp(new IgnorantPolicy);
287 } else if (name == "matharrows") {
288 FormMathsBitmap * bitmap =
289 createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
291 BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
293 BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
295 BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
297 dialog->setController(new ControlMath(*dialog));
298 dialog->setView(bitmap);
299 dialog->bc().bp(new IgnorantPolicy);
301 } else if (name == "mathoperators") {
302 FormMathsBitmap * bitmap =
303 createFormBitmap(*dialog, _("Binary Ops"),
304 latex_bop, nr_latex_bop);
306 BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
308 dialog->setController(new ControlMath(*dialog));
309 dialog->setView(bitmap);
310 dialog->bc().bp(new IgnorantPolicy);
312 } else if (name == "mathrelations") {
313 FormMathsBitmap * bitmap =
314 createFormBitmap(*dialog, _("Binary Relations"),
315 latex_brel, nr_latex_brel);
317 BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
319 dialog->setController(new ControlMath(*dialog));
320 dialog->setView(bitmap);
321 dialog->bc().bp(new IgnorantPolicy);
323 } else if (name == "mathgreek") {
324 FormMathsBitmap * bitmap =
325 createFormBitmap(*dialog, _("Greek"),
326 latex_greek, nr_latex_greek);
328 BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
330 BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
332 dialog->setController(new ControlMath(*dialog));
333 dialog->setView(bitmap);
334 dialog->bc().bp(new IgnorantPolicy);
336 } else if (name == "mathmisc") {
337 FormMathsBitmap * bitmap =
338 createFormBitmap(*dialog, _("Misc"),
339 latex_misc, nr_latex_misc);
341 BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
343 BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
345 BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
347 BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
349 dialog->setController(new ControlMath(*dialog));
350 dialog->setView(bitmap);
351 dialog->bc().bp(new IgnorantPolicy);
353 } else if (name == "mathdots") {
354 FormMathsBitmap * bitmap =
355 createFormBitmap(*dialog, _("Dots"),
356 latex_dots, nr_latex_dots);
358 BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
360 dialog->setController(new ControlMath(*dialog));
361 dialog->setView(bitmap);
362 dialog->bc().bp(new IgnorantPolicy);
364 } else if (name == "mathbigoperators") {
365 FormMathsBitmap * bitmap =
366 createFormBitmap(*dialog, _("Big Operators"),
367 latex_varsz, nr_latex_varsz);
369 BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
371 dialog->setController(new ControlMath(*dialog));
372 dialog->setView(bitmap);
373 dialog->bc().bp(new IgnorantPolicy);
375 } else if (name == "mathamsmisc") {
376 FormMathsBitmap * bitmap =
377 createFormBitmap(*dialog, _("AMS Misc"),
378 latex_ams_misc, nr_latex_ams_misc);
380 BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
382 BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
384 dialog->setController(new ControlMath(*dialog));
385 dialog->setView(bitmap);
386 dialog->bc().bp(new IgnorantPolicy);
388 } else if (name == "mathamsarrows") {
389 FormMathsBitmap * bitmap =
390 createFormBitmap(*dialog, _("AMS Arrows"),
391 latex_ams_arrows, nr_latex_ams_arrows);
393 BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
395 BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
397 dialog->setController(new ControlMath(*dialog));
398 dialog->setView(bitmap);
399 dialog->bc().bp(new IgnorantPolicy);
401 } else if (name == "mathamsrelations") {
402 FormMathsBitmap * bitmap =
403 createFormBitmap(*dialog, _("AMS Relations"),
404 latex_ams_rel, nr_latex_ams_rel);
406 BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
408 dialog->setController(new ControlMath(*dialog));
409 dialog->setView(bitmap);
410 dialog->bc().bp(new IgnorantPolicy);
412 } else if (name == "mathamsnegatedrelations") {
413 FormMathsBitmap * bitmap =
414 createFormBitmap(*dialog, _("AMS Negated Rel"),
415 latex_ams_nrel, nr_latex_ams_nrel);
417 BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
419 dialog->setController(new ControlMath(*dialog));
420 dialog->setView(bitmap);
421 dialog->bc().bp(new IgnorantPolicy);
423 } else if (name == "mathamsoperators") {
424 FormMathsBitmap * bitmap =
425 createFormBitmap(*dialog, _("AMS Operators"),
426 latex_ams_ops, nr_latex_ams_ops);
428 BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
430 dialog->setController(new ControlMath(*dialog));
431 dialog->setView(bitmap);
432 dialog->bc().bp(new IgnorantPolicy);
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);
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);
535 void Dialogs::toggleTooltips()
537 Tooltips::toggleEnabled();
541 /// Are the tooltips on or off?
542 bool Dialogs::tooltipsEnabled()
544 return Tooltips::enabled();