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