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"
59 #include "FormChanges.h"
60 #include "FormCharacter.h"
61 #include "FormCitation.h"
62 #include "FormDocument.h"
63 #include "FormErrorList.h"
65 #include "FormExternal.h"
66 #include "FormFloat.h"
67 #include "FormGraphics.h"
68 #include "FormInclude.h"
70 #include "GMathPanel.h"
71 #include "FormMathsBitmap.h"
72 #include "FormMathsMatrix.h"
73 #include "FormMathsSpace.h"
74 #include "FormMathsStyle.h"
76 #include "FormParagraph.h"
77 #include "FormPreamble.h"
78 #include "FormPreferences.h"
79 #include "FormPrint.h"
82 #include "FormSendto.h"
83 #include "FormTabular.h"
84 #include "FormTexinfo.h"
85 #include "FormShowFile.h"
86 #include "FormSpellchecker.h"
87 #include "GTableCreate.h"
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->setController(new ControlChanges(*dialog));
198 dialog->setView(new FormChanges(*dialog));
199 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
200 } else if (name == "character") {
201 dialog->setController(new ControlCharacter(*dialog));
202 dialog->setView(new FormCharacter(*dialog));
203 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
204 } else if (name == "citation") {
205 dialog->setController(new ControlCitation(*dialog));
206 dialog->setView(new FormCitation(*dialog));
207 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
208 } else if (name == "document") {
209 dialog->setController(new ControlDocument(*dialog));
210 dialog->setView(new FormDocument(*dialog));
211 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
212 } else if (name == "errorlist") {
213 dialog->setController(new ControlErrorList(*dialog));
214 dialog->setView(new FormErrorList(*dialog));
215 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
216 } else if (name == "ert") {
217 dialog->setController(new ControlERT(*dialog));
218 dialog->setView(new FormERT(*dialog));
219 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
220 } else if (name == "external") {
221 dialog->setController(new ControlExternal(*dialog));
222 dialog->setView(new FormExternal(*dialog));
223 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
224 } else if (name == "file") {
225 dialog->setController(new ControlShowFile(*dialog));
226 dialog->setView(new FormShowFile(*dialog));
227 dialog->bc().bp(new OkCancelPolicy);
228 } else if (name == "findreplace") {
229 dialog->bc().view(new GBC(dialog->bc()));
230 dialog->setController(new ControlSearch(*dialog));
231 dialog->setView(new GSearch(*dialog));
232 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
233 } else if (name == "float") {
234 dialog->setController(new ControlFloat(*dialog));
235 dialog->setView(new FormFloat(*dialog));
236 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
237 } else if (name == "graphics") {
238 dialog->setController(new ControlGraphics(*dialog));
239 dialog->setView(new FormGraphics(*dialog));
240 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
241 } else if (name == "include") {
242 dialog->setController(new ControlInclude(*dialog));
243 dialog->setView(new FormInclude(*dialog));
244 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
245 } else if (name == "index") {
246 dialog->bc().view(new GBC(dialog->bc()));
247 dialog->setController(new ControlCommand(*dialog, name));
248 dialog->setView(new GText(*dialog,
249 _("Index"), _("Keyword:|#K")));
250 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
251 } else if (name == "label") {
252 dialog->bc().view(new GBC(dialog->bc()));
253 dialog->setController(new ControlCommand(*dialog, name));
254 dialog->setView(new GText(*dialog,
255 _("Label"), _("Label:|#L")));
256 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
257 } else if (name == "log") {
258 dialog->setController(new ControlLog(*dialog));
259 dialog->setView(new FormLog(*dialog));
260 dialog->bc().bp(new OkCancelPolicy);
262 } else if (name == "mathpanel") {
263 dialog->bc().view(new GBC(dialog->bc()));
264 dialog->setController(new ControlMath(*dialog));
265 dialog->setView(new GMathPanel(*dialog));
266 dialog->bc().bp(new IgnorantPolicy);
268 } else if (name == "mathaccents") {
269 FormMathsBitmap * bitmap =
270 createFormBitmap(*dialog, _("Maths Decorations & Accents"),
271 latex_deco, nr_latex_deco);
273 BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
275 BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
277 dialog->setController(new ControlMath(*dialog));
278 dialog->setView(bitmap);
279 dialog->bc().bp(new IgnorantPolicy);
281 } else if (name == "matharrows") {
282 FormMathsBitmap * bitmap =
283 createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
285 BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
287 BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
289 BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
291 dialog->setController(new ControlMath(*dialog));
292 dialog->setView(bitmap);
293 dialog->bc().bp(new IgnorantPolicy);
295 } else if (name == "mathoperators") {
296 FormMathsBitmap * bitmap =
297 createFormBitmap(*dialog, _("Binary Ops"),
298 latex_bop, nr_latex_bop);
300 BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
302 dialog->setController(new ControlMath(*dialog));
303 dialog->setView(bitmap);
304 dialog->bc().bp(new IgnorantPolicy);
306 } else if (name == "mathrelations") {
307 FormMathsBitmap * bitmap =
308 createFormBitmap(*dialog, _("Binary Relations"),
309 latex_brel, nr_latex_brel);
311 BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
313 dialog->setController(new ControlMath(*dialog));
314 dialog->setView(bitmap);
315 dialog->bc().bp(new IgnorantPolicy);
317 } else if (name == "mathgreek") {
318 FormMathsBitmap * bitmap =
319 createFormBitmap(*dialog, _("Greek"),
320 latex_greek, nr_latex_greek);
322 BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
324 BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
326 dialog->setController(new ControlMath(*dialog));
327 dialog->setView(bitmap);
328 dialog->bc().bp(new IgnorantPolicy);
330 } else if (name == "mathmisc") {
331 FormMathsBitmap * bitmap =
332 createFormBitmap(*dialog, _("Misc"),
333 latex_misc, nr_latex_misc);
335 BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
337 BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
339 BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
341 BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
343 dialog->setController(new ControlMath(*dialog));
344 dialog->setView(bitmap);
345 dialog->bc().bp(new IgnorantPolicy);
347 } else if (name == "mathdots") {
348 FormMathsBitmap * bitmap =
349 createFormBitmap(*dialog, _("Dots"),
350 latex_dots, nr_latex_dots);
352 BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
354 dialog->setController(new ControlMath(*dialog));
355 dialog->setView(bitmap);
356 dialog->bc().bp(new IgnorantPolicy);
358 } else if (name == "mathbigoperators") {
359 FormMathsBitmap * bitmap =
360 createFormBitmap(*dialog, _("Big Operators"),
361 latex_varsz, nr_latex_varsz);
363 BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
365 dialog->setController(new ControlMath(*dialog));
366 dialog->setView(bitmap);
367 dialog->bc().bp(new IgnorantPolicy);
369 } else if (name == "mathamsmisc") {
370 FormMathsBitmap * bitmap =
371 createFormBitmap(*dialog, _("AMS Misc"),
372 latex_ams_misc, nr_latex_ams_misc);
374 BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
376 BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
378 dialog->setController(new ControlMath(*dialog));
379 dialog->setView(bitmap);
380 dialog->bc().bp(new IgnorantPolicy);
382 } else if (name == "mathamsarrows") {
383 FormMathsBitmap * bitmap =
384 createFormBitmap(*dialog, _("AMS Arrows"),
385 latex_ams_arrows, nr_latex_ams_arrows);
387 BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
389 BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
391 dialog->setController(new ControlMath(*dialog));
392 dialog->setView(bitmap);
393 dialog->bc().bp(new IgnorantPolicy);
395 } else if (name == "mathamsrelations") {
396 FormMathsBitmap * bitmap =
397 createFormBitmap(*dialog, _("AMS Relations"),
398 latex_ams_rel, nr_latex_ams_rel);
400 BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
402 dialog->setController(new ControlMath(*dialog));
403 dialog->setView(bitmap);
404 dialog->bc().bp(new IgnorantPolicy);
406 } else if (name == "mathamsnegatedrelations") {
407 FormMathsBitmap * bitmap =
408 createFormBitmap(*dialog, _("AMS Negated Rel"),
409 latex_ams_nrel, nr_latex_ams_nrel);
411 BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
413 dialog->setController(new ControlMath(*dialog));
414 dialog->setView(bitmap);
415 dialog->bc().bp(new IgnorantPolicy);
417 } else if (name == "mathamsoperators") {
418 FormMathsBitmap * bitmap =
419 createFormBitmap(*dialog, _("AMS Operators"),
420 latex_ams_ops, nr_latex_ams_ops);
422 BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
424 dialog->setController(new ControlMath(*dialog));
425 dialog->setView(bitmap);
426 dialog->bc().bp(new IgnorantPolicy);
428 } else if (name == "mathdelimiter") {
429 dialog->bc().view(new GBC(dialog->bc()));
430 dialog->setController(new ControlMath(*dialog));
431 dialog->setView(new GMathDelim(*dialog));
432 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
433 } else if (name == "mathmatrix") {
434 dialog->setController(new ControlMath(*dialog));
435 dialog->setView(new FormMathsMatrix(*dialog));
436 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
437 } else if (name == "mathspace") {
438 dialog->setController(new ControlMath(*dialog));
439 dialog->setView(new FormMathsSpace(*dialog));
440 dialog->bc().bp(new IgnorantPolicy);
441 } else if (name == "mathstyle") {
442 dialog->setController(new ControlMath(*dialog));
443 dialog->setView(new FormMathsStyle(*dialog));
444 dialog->bc().bp(new IgnorantPolicy);
445 } else if (name == "note") {
446 dialog->setController(new ControlNote(*dialog));
447 dialog->setView(new FormNote(*dialog));
448 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
449 } else if (name == "branch") {
450 dialog->setController(new ControlBranch(*dialog));
451 dialog->setView(new FormBranch(*dialog));
452 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
453 } else if (name == "paragraph") {
454 dialog->setController(new ControlParagraph(*dialog));
455 dialog->setView(new FormParagraph(*dialog));
456 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
457 } else if (name == "preamble") {
458 dialog->setController(new ControlPreamble(*dialog));
459 dialog->setView(new FormPreamble(*dialog));
460 dialog->bc().bp(new OkApplyCancelPolicy);
461 } else if (name == "prefs") {
462 dialog->setController(new ControlPrefs(*dialog));
463 dialog->setView(new FormPreferences(*dialog));
464 dialog->bc().bp(new PreferencesPolicy);
465 } else if (name == "print") {
466 dialog->setController(new ControlPrint(*dialog));
467 dialog->setView(new FormPrint(*dialog));
468 dialog->bc().bp(new OkApplyCancelPolicy);
469 } else if (name == "ref") {
470 dialog->setController(new ControlRef(*dialog));
471 dialog->setView(new FormRef(*dialog));
472 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
473 } else if (name == "sendto") {
474 dialog->setController(new ControlSendto(*dialog));
475 dialog->setView(new FormSendto(*dialog));
476 dialog->bc().bp(new OkApplyCancelPolicy);
477 } else if (name == "spellchecker") {
478 dialog->setController(new ControlSpellchecker(*dialog));
479 dialog->setView(new FormSpellchecker(*dialog));
480 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
481 } else if (name == "tabular") {
482 dialog->setController(new ControlTabular(*dialog));
483 dialog->setView(new FormTabular(*dialog));
484 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
485 } else if (name == "tabularcreate") {
486 dialog->bc().view(new GBC(dialog->bc()));
487 dialog->setController(new ControlTabularCreate(*dialog));
488 dialog->setView(new GTableCreate(*dialog));
489 dialog->bc().bp(new IgnorantPolicy);
490 } else if (name == "texinfo") {
491 dialog->setController(new ControlTexinfo(*dialog));
492 dialog->setView(new FormTexinfo(*dialog));
493 dialog->bc().bp(new OkCancelPolicy);
494 #ifdef HAVE_LIBAIKSAURUS
495 } else if (name == "thesaurus") {
496 dialog->setController(new ControlThesaurus(*dialog));
497 dialog->setView(new FormThesaurus(*dialog));
498 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
500 } else if (name == "toc") {
501 dialog->setController(new ControlToc(*dialog));
502 dialog->setView(new FormToc(*dialog));
503 dialog->bc().bp(new OkCancelPolicy);
504 } else if (name == "url") {
505 dialog->bc().view(new GBC(dialog->bc()));
506 dialog->setController(new ControlCommand(*dialog, name));
507 dialog->setView(new GUrl(*dialog));
508 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
509 } else if (name == "vspace") {
510 dialog->setController(new ControlVSpace(*dialog));
511 dialog->setView(new FormVSpace(*dialog));
512 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
513 } else if (name == "wrap") {
514 dialog->setController(new ControlWrap(*dialog));
515 dialog->setView(new FormWrap(*dialog));
516 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
523 void Dialogs::toggleTooltips()
525 Tooltips::toggleEnabled();
529 /// Are the tooltips on or off?
530 bool Dialogs::tooltipsEnabled()
532 return Tooltips::enabled();