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 "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"
84 #include "FormTexinfo.h"
85 #include "FormShowFile.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->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->bc().view(new GBC(dialog->bc()));
436 dialog->setController(new ControlMath(*dialog));
437 dialog->setView(new GMathsMatrix(*dialog));
438 dialog->bc().bp(new OkCancelReadOnlyPolicy);
439 } else if (name == "mathspace") {
440 dialog->setController(new ControlMath(*dialog));
441 dialog->setView(new FormMathsSpace(*dialog));
442 dialog->bc().bp(new IgnorantPolicy);
443 } else if (name == "mathstyle") {
444 dialog->setController(new ControlMath(*dialog));
445 dialog->setView(new FormMathsStyle(*dialog));
446 dialog->bc().bp(new IgnorantPolicy);
447 } else if (name == "note") {
448 dialog->setController(new ControlNote(*dialog));
449 dialog->setView(new FormNote(*dialog));
450 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
451 } else if (name == "branch") {
452 dialog->setController(new ControlBranch(*dialog));
453 dialog->setView(new FormBranch(*dialog));
454 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
455 } else if (name == "paragraph") {
456 dialog->bc().view(new GBC(dialog->bc()));
457 dialog->setController(new ControlParagraph(*dialog));
458 dialog->setView(new GParagraph(*dialog));
459 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
460 } else if (name == "preamble") {
461 dialog->setController(new ControlPreamble(*dialog));
462 dialog->setView(new FormPreamble(*dialog));
463 dialog->bc().bp(new OkApplyCancelPolicy);
464 } else if (name == "prefs") {
465 dialog->setController(new ControlPrefs(*dialog));
466 dialog->setView(new FormPreferences(*dialog));
467 dialog->bc().bp(new PreferencesPolicy);
468 } else if (name == "print") {
469 dialog->bc().view(new GBC(dialog->bc()));
470 dialog->setController(new ControlPrint(*dialog));
471 dialog->setView(new GPrint(*dialog));
472 dialog->bc().bp(new OkCancelPolicy);
473 } else if (name == "ref") {
474 dialog->setController(new ControlRef(*dialog));
475 dialog->setView(new FormRef(*dialog));
476 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
477 } else if (name == "sendto") {
478 dialog->setController(new ControlSendto(*dialog));
479 dialog->setView(new FormSendto(*dialog));
480 dialog->bc().bp(new OkApplyCancelPolicy);
481 } else if (name == "spellchecker") {
482 dialog->bc().view(new GBC(dialog->bc()));
483 dialog->setController(new ControlSpellchecker(*dialog));
484 dialog->setView(new GSpellchecker(*dialog));
485 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
486 } else if (name == "tabular") {
487 dialog->setController(new ControlTabular(*dialog));
488 dialog->setView(new FormTabular(*dialog));
489 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
490 } else if (name == "tabularcreate") {
491 dialog->bc().view(new GBC(dialog->bc()));
492 dialog->setController(new ControlTabularCreate(*dialog));
493 dialog->setView(new GTableCreate(*dialog));
494 dialog->bc().bp(new IgnorantPolicy);
495 } else if (name == "texinfo") {
496 dialog->setController(new ControlTexinfo(*dialog));
497 dialog->setView(new FormTexinfo(*dialog));
498 dialog->bc().bp(new OkCancelPolicy);
499 #ifdef HAVE_LIBAIKSAURUS
500 } else if (name == "thesaurus") {
501 dialog->setController(new ControlThesaurus(*dialog));
502 dialog->setView(new FormThesaurus(*dialog));
503 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
505 } else if (name == "toc") {
506 dialog->bc().view(new GBC(dialog->bc()));
507 dialog->setController(new ControlToc(*dialog));
508 dialog->setView(new GToc(*dialog));
509 dialog->bc().bp(new OkCancelPolicy);
510 } else if (name == "url") {
511 dialog->bc().view(new GBC(dialog->bc()));
512 dialog->setController(new ControlCommand(*dialog, name));
513 dialog->setView(new GUrl(*dialog));
514 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
515 } else if (name == "vspace") {
516 dialog->setController(new ControlVSpace(*dialog));
517 dialog->setView(new FormVSpace(*dialog));
518 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
519 } else if (name == "wrap") {
520 dialog->setController(new ControlWrap(*dialog));
521 dialog->setView(new FormWrap(*dialog));
522 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
529 void Dialogs::toggleTooltips()
531 Tooltips::toggleEnabled();
535 /// Are the tooltips on or off?
536 bool Dialogs::tooltipsEnabled()
538 return Tooltips::enabled();