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"
81 #include "FormSearch.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->setController(new ControlSearch(*dialog));
230 dialog->setView(new FormSearch(*dialog));
231 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
232 } else if (name == "float") {
233 dialog->setController(new ControlFloat(*dialog));
234 dialog->setView(new FormFloat(*dialog));
235 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
236 } else if (name == "graphics") {
237 dialog->setController(new ControlGraphics(*dialog));
238 dialog->setView(new FormGraphics(*dialog));
239 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
240 } else if (name == "include") {
241 dialog->setController(new ControlInclude(*dialog));
242 dialog->setView(new FormInclude(*dialog));
243 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
244 } else if (name == "index") {
245 dialog->bc().view(new GBC(dialog->bc()));
246 dialog->setController(new ControlCommand(*dialog, name));
247 dialog->setView(new GText(*dialog,
248 _("Index"), _("Keyword:|#K")));
249 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
250 } else if (name == "label") {
251 dialog->bc().view(new GBC(dialog->bc()));
252 dialog->setController(new ControlCommand(*dialog, name));
253 dialog->setView(new GText(*dialog,
254 _("Label"), _("Label:|#L")));
255 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
256 } else if (name == "log") {
257 dialog->setController(new ControlLog(*dialog));
258 dialog->setView(new FormLog(*dialog));
259 dialog->bc().bp(new OkCancelPolicy);
261 } else if (name == "mathpanel") {
262 dialog->bc().view(new GBC(dialog->bc()));
263 dialog->setController(new ControlMath(*dialog));
264 dialog->setView(new GMathPanel(*dialog));
265 dialog->bc().bp(new IgnorantPolicy);
267 } else if (name == "mathaccents") {
268 FormMathsBitmap * bitmap =
269 createFormBitmap(*dialog, _("Maths Decorations & Accents"),
270 latex_deco, nr_latex_deco);
272 BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
274 BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
276 dialog->setController(new ControlMath(*dialog));
277 dialog->setView(bitmap);
278 dialog->bc().bp(new IgnorantPolicy);
280 } else if (name == "matharrows") {
281 FormMathsBitmap * bitmap =
282 createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
284 BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
286 BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
288 BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
290 dialog->setController(new ControlMath(*dialog));
291 dialog->setView(bitmap);
292 dialog->bc().bp(new IgnorantPolicy);
294 } else if (name == "mathoperators") {
295 FormMathsBitmap * bitmap =
296 createFormBitmap(*dialog, _("Binary Ops"),
297 latex_bop, nr_latex_bop);
299 BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
301 dialog->setController(new ControlMath(*dialog));
302 dialog->setView(bitmap);
303 dialog->bc().bp(new IgnorantPolicy);
305 } else if (name == "mathrelations") {
306 FormMathsBitmap * bitmap =
307 createFormBitmap(*dialog, _("Binary Relations"),
308 latex_brel, nr_latex_brel);
310 BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
312 dialog->setController(new ControlMath(*dialog));
313 dialog->setView(bitmap);
314 dialog->bc().bp(new IgnorantPolicy);
316 } else if (name == "mathgreek") {
317 FormMathsBitmap * bitmap =
318 createFormBitmap(*dialog, _("Greek"),
319 latex_greek, nr_latex_greek);
321 BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
323 BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
325 dialog->setController(new ControlMath(*dialog));
326 dialog->setView(bitmap);
327 dialog->bc().bp(new IgnorantPolicy);
329 } else if (name == "mathmisc") {
330 FormMathsBitmap * bitmap =
331 createFormBitmap(*dialog, _("Misc"),
332 latex_misc, nr_latex_misc);
334 BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
336 BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
338 BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
340 BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
342 dialog->setController(new ControlMath(*dialog));
343 dialog->setView(bitmap);
344 dialog->bc().bp(new IgnorantPolicy);
346 } else if (name == "mathdots") {
347 FormMathsBitmap * bitmap =
348 createFormBitmap(*dialog, _("Dots"),
349 latex_dots, nr_latex_dots);
351 BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
353 dialog->setController(new ControlMath(*dialog));
354 dialog->setView(bitmap);
355 dialog->bc().bp(new IgnorantPolicy);
357 } else if (name == "mathbigoperators") {
358 FormMathsBitmap * bitmap =
359 createFormBitmap(*dialog, _("Big Operators"),
360 latex_varsz, nr_latex_varsz);
362 BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
364 dialog->setController(new ControlMath(*dialog));
365 dialog->setView(bitmap);
366 dialog->bc().bp(new IgnorantPolicy);
368 } else if (name == "mathamsmisc") {
369 FormMathsBitmap * bitmap =
370 createFormBitmap(*dialog, _("AMS Misc"),
371 latex_ams_misc, nr_latex_ams_misc);
373 BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
375 BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
377 dialog->setController(new ControlMath(*dialog));
378 dialog->setView(bitmap);
379 dialog->bc().bp(new IgnorantPolicy);
381 } else if (name == "mathamsarrows") {
382 FormMathsBitmap * bitmap =
383 createFormBitmap(*dialog, _("AMS Arrows"),
384 latex_ams_arrows, nr_latex_ams_arrows);
386 BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
388 BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
390 dialog->setController(new ControlMath(*dialog));
391 dialog->setView(bitmap);
392 dialog->bc().bp(new IgnorantPolicy);
394 } else if (name == "mathamsrelations") {
395 FormMathsBitmap * bitmap =
396 createFormBitmap(*dialog, _("AMS Relations"),
397 latex_ams_rel, nr_latex_ams_rel);
399 BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
401 dialog->setController(new ControlMath(*dialog));
402 dialog->setView(bitmap);
403 dialog->bc().bp(new IgnorantPolicy);
405 } else if (name == "mathamsnegatedrelations") {
406 FormMathsBitmap * bitmap =
407 createFormBitmap(*dialog, _("AMS Negated Rel"),
408 latex_ams_nrel, nr_latex_ams_nrel);
410 BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
412 dialog->setController(new ControlMath(*dialog));
413 dialog->setView(bitmap);
414 dialog->bc().bp(new IgnorantPolicy);
416 } else if (name == "mathamsoperators") {
417 FormMathsBitmap * bitmap =
418 createFormBitmap(*dialog, _("AMS Operators"),
419 latex_ams_ops, nr_latex_ams_ops);
421 BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
423 dialog->setController(new ControlMath(*dialog));
424 dialog->setView(bitmap);
425 dialog->bc().bp(new IgnorantPolicy);
427 } else if (name == "mathdelimiter") {
428 dialog->bc().view(new GBC(dialog->bc()));
429 dialog->setController(new ControlMath(*dialog));
430 dialog->setView(new GMathDelim(*dialog));
431 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
432 } else if (name == "mathmatrix") {
433 dialog->setController(new ControlMath(*dialog));
434 dialog->setView(new FormMathsMatrix(*dialog));
435 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
436 } else if (name == "mathspace") {
437 dialog->setController(new ControlMath(*dialog));
438 dialog->setView(new FormMathsSpace(*dialog));
439 dialog->bc().bp(new IgnorantPolicy);
440 } else if (name == "mathstyle") {
441 dialog->setController(new ControlMath(*dialog));
442 dialog->setView(new FormMathsStyle(*dialog));
443 dialog->bc().bp(new IgnorantPolicy);
444 } else if (name == "note") {
445 dialog->setController(new ControlNote(*dialog));
446 dialog->setView(new FormNote(*dialog));
447 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
448 } else if (name == "branch") {
449 dialog->setController(new ControlBranch(*dialog));
450 dialog->setView(new FormBranch(*dialog));
451 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
452 } else if (name == "paragraph") {
453 dialog->setController(new ControlParagraph(*dialog));
454 dialog->setView(new FormParagraph(*dialog));
455 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
456 } else if (name == "preamble") {
457 dialog->setController(new ControlPreamble(*dialog));
458 dialog->setView(new FormPreamble(*dialog));
459 dialog->bc().bp(new OkApplyCancelPolicy);
460 } else if (name == "prefs") {
461 dialog->setController(new ControlPrefs(*dialog));
462 dialog->setView(new FormPreferences(*dialog));
463 dialog->bc().bp(new PreferencesPolicy);
464 } else if (name == "print") {
465 dialog->setController(new ControlPrint(*dialog));
466 dialog->setView(new FormPrint(*dialog));
467 dialog->bc().bp(new OkApplyCancelPolicy);
468 } else if (name == "ref") {
469 dialog->setController(new ControlRef(*dialog));
470 dialog->setView(new FormRef(*dialog));
471 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
472 } else if (name == "sendto") {
473 dialog->setController(new ControlSendto(*dialog));
474 dialog->setView(new FormSendto(*dialog));
475 dialog->bc().bp(new OkApplyCancelPolicy);
476 } else if (name == "spellchecker") {
477 dialog->setController(new ControlSpellchecker(*dialog));
478 dialog->setView(new FormSpellchecker(*dialog));
479 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
480 } else if (name == "tabular") {
481 dialog->setController(new ControlTabular(*dialog));
482 dialog->setView(new FormTabular(*dialog));
483 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
484 } else if (name == "tabularcreate") {
485 dialog->bc().view(new GBC(dialog->bc()));
486 dialog->setController(new ControlTabularCreate(*dialog));
487 dialog->setView(new GTableCreate(*dialog));
488 dialog->bc().bp(new IgnorantPolicy);
489 } else if (name == "texinfo") {
490 dialog->setController(new ControlTexinfo(*dialog));
491 dialog->setView(new FormTexinfo(*dialog));
492 dialog->bc().bp(new OkCancelPolicy);
493 #ifdef HAVE_LIBAIKSAURUS
494 } else if (name == "thesaurus") {
495 dialog->setController(new ControlThesaurus(*dialog));
496 dialog->setView(new FormThesaurus(*dialog));
497 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
499 } else if (name == "toc") {
500 dialog->setController(new ControlToc(*dialog));
501 dialog->setView(new FormToc(*dialog));
502 dialog->bc().bp(new OkCancelPolicy);
503 } else if (name == "url") {
504 dialog->bc().view(new GBC(dialog->bc()));
505 dialog->setController(new ControlCommand(*dialog, name));
506 dialog->setView(new GUrl(*dialog));
507 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
508 } else if (name == "vspace") {
509 dialog->setController(new ControlVSpace(*dialog));
510 dialog->setView(new FormVSpace(*dialog));
511 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
512 } else if (name == "wrap") {
513 dialog->setController(new ControlWrap(*dialog));
514 dialog->setView(new FormWrap(*dialog));
515 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
522 void Dialogs::toggleTooltips()
524 Tooltips::toggleEnabled();
528 /// Are the tooltips on or off?
529 bool Dialogs::tooltipsEnabled()
531 return Tooltips::enabled();