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"
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->bc().view(new GBC(dialog->bc()));
194 dialog->setController(new ControlBox(*dialog));
195 dialog->setView(new GBox(*dialog));
196 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
197 } else if (name == "changes") {
198 dialog->bc().view(new GBC(dialog->bc()));
199 dialog->setController(new ControlChanges(*dialog));
200 dialog->setView(new GChanges(*dialog));
201 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
202 } else if (name == "character") {
203 dialog->bc().view(new GBC(dialog->bc()));
204 dialog->setController(new ControlCharacter(*dialog));
205 dialog->setView(new GCharacter(*dialog));
206 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
207 } else if (name == "citation") {
208 dialog->setController(new ControlCitation(*dialog));
209 dialog->setView(new FormCitation(*dialog));
210 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
211 } else if (name == "document") {
212 dialog->setController(new ControlDocument(*dialog));
213 dialog->setView(new FormDocument(*dialog));
214 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
215 } else if (name == "errorlist") {
216 dialog->bc().view(new GBC(dialog->bc()));
217 dialog->setController(new ControlErrorList(*dialog));
218 dialog->setView(new GErrorList(*dialog));
219 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
220 } else if (name == "ert") {
221 dialog->bc().view(new GBC(dialog->bc()));
222 dialog->setController(new ControlERT(*dialog));
223 dialog->setView(new GERT(*dialog));
224 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
225 } else if (name == "external") {
226 dialog->setController(new ControlExternal(*dialog));
227 dialog->setView(new FormExternal(*dialog));
228 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
229 } else if (name == "file") {
230 dialog->bc().view(new GBC(dialog->bc()));
231 dialog->setController(new ControlShowFile(*dialog));
232 dialog->setView(new GShowFile(*dialog));
233 dialog->bc().bp(new OkCancelPolicy);
234 } else if (name == "findreplace") {
235 dialog->bc().view(new GBC(dialog->bc()));
236 dialog->setController(new ControlSearch(*dialog));
237 dialog->setView(new GSearch(*dialog));
238 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
239 } else if (name == "float") {
240 dialog->bc().view(new GBC(dialog->bc()));
241 dialog->setController(new ControlFloat(*dialog));
242 dialog->setView(new GFloat(*dialog));
243 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
244 } else if (name == "graphics") {
245 dialog->bc().view(new GBC(dialog->bc()));
246 dialog->setController(new ControlGraphics(*dialog));
247 dialog->setView(new GGraphics(*dialog));
248 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
249 } else if (name == "include") {
250 dialog->setController(new ControlInclude(*dialog));
251 dialog->setView(new FormInclude(*dialog));
252 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
253 } else if (name == "index") {
254 dialog->bc().view(new GBC(dialog->bc()));
255 dialog->setController(new ControlCommand(*dialog, name));
256 dialog->setView(new GText(*dialog,
257 _("Index"), _("Keyword:|#K")));
258 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
259 } else if (name == "label") {
260 dialog->bc().view(new GBC(dialog->bc()));
261 dialog->setController(new ControlCommand(*dialog, name));
262 dialog->setView(new GText(*dialog,
263 _("Label"), _("Label:|#L")));
264 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
265 } else if (name == "log") {
266 dialog->bc().view(new GBC(dialog->bc()));
267 dialog->setController(new ControlLog(*dialog));
268 dialog->setView(new GLog(*dialog));
269 dialog->bc().bp(new OkCancelPolicy);
271 } else if (name == "mathpanel") {
272 dialog->bc().view(new GBC(dialog->bc()));
273 dialog->setController(new ControlMath(*dialog));
274 dialog->setView(new GMathPanel(*dialog));
275 dialog->bc().bp(new IgnorantPolicy);
277 } else if (name == "mathaccents") {
278 FormMathsBitmap * bitmap =
279 createFormBitmap(*dialog, _("Maths Decorations & Accents"),
280 latex_deco, nr_latex_deco);
282 BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
284 BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
286 dialog->setController(new ControlMath(*dialog));
287 dialog->setView(bitmap);
288 dialog->bc().bp(new IgnorantPolicy);
290 } else if (name == "matharrows") {
291 FormMathsBitmap * bitmap =
292 createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
294 BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
296 BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
298 BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
300 dialog->setController(new ControlMath(*dialog));
301 dialog->setView(bitmap);
302 dialog->bc().bp(new IgnorantPolicy);
304 } else if (name == "mathoperators") {
305 FormMathsBitmap * bitmap =
306 createFormBitmap(*dialog, _("Binary Ops"),
307 latex_bop, nr_latex_bop);
309 BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
311 dialog->setController(new ControlMath(*dialog));
312 dialog->setView(bitmap);
313 dialog->bc().bp(new IgnorantPolicy);
315 } else if (name == "mathrelations") {
316 FormMathsBitmap * bitmap =
317 createFormBitmap(*dialog, _("Binary Relations"),
318 latex_brel, nr_latex_brel);
320 BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
322 dialog->setController(new ControlMath(*dialog));
323 dialog->setView(bitmap);
324 dialog->bc().bp(new IgnorantPolicy);
326 } else if (name == "mathgreek") {
327 FormMathsBitmap * bitmap =
328 createFormBitmap(*dialog, _("Greek"),
329 latex_greek, nr_latex_greek);
331 BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
333 BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
335 dialog->setController(new ControlMath(*dialog));
336 dialog->setView(bitmap);
337 dialog->bc().bp(new IgnorantPolicy);
339 } else if (name == "mathmisc") {
340 FormMathsBitmap * bitmap =
341 createFormBitmap(*dialog, _("Misc"),
342 latex_misc, nr_latex_misc);
344 BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
346 BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
348 BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
350 BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
352 dialog->setController(new ControlMath(*dialog));
353 dialog->setView(bitmap);
354 dialog->bc().bp(new IgnorantPolicy);
356 } else if (name == "mathdots") {
357 FormMathsBitmap * bitmap =
358 createFormBitmap(*dialog, _("Dots"),
359 latex_dots, nr_latex_dots);
361 BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
363 dialog->setController(new ControlMath(*dialog));
364 dialog->setView(bitmap);
365 dialog->bc().bp(new IgnorantPolicy);
367 } else if (name == "mathbigoperators") {
368 FormMathsBitmap * bitmap =
369 createFormBitmap(*dialog, _("Big Operators"),
370 latex_varsz, nr_latex_varsz);
372 BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
374 dialog->setController(new ControlMath(*dialog));
375 dialog->setView(bitmap);
376 dialog->bc().bp(new IgnorantPolicy);
378 } else if (name == "mathamsmisc") {
379 FormMathsBitmap * bitmap =
380 createFormBitmap(*dialog, _("AMS Misc"),
381 latex_ams_misc, nr_latex_ams_misc);
383 BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
385 BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
387 dialog->setController(new ControlMath(*dialog));
388 dialog->setView(bitmap);
389 dialog->bc().bp(new IgnorantPolicy);
391 } else if (name == "mathamsarrows") {
392 FormMathsBitmap * bitmap =
393 createFormBitmap(*dialog, _("AMS Arrows"),
394 latex_ams_arrows, nr_latex_ams_arrows);
396 BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
398 BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
400 dialog->setController(new ControlMath(*dialog));
401 dialog->setView(bitmap);
402 dialog->bc().bp(new IgnorantPolicy);
404 } else if (name == "mathamsrelations") {
405 FormMathsBitmap * bitmap =
406 createFormBitmap(*dialog, _("AMS Relations"),
407 latex_ams_rel, nr_latex_ams_rel);
409 BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
411 dialog->setController(new ControlMath(*dialog));
412 dialog->setView(bitmap);
413 dialog->bc().bp(new IgnorantPolicy);
415 } else if (name == "mathamsnegatedrelations") {
416 FormMathsBitmap * bitmap =
417 createFormBitmap(*dialog, _("AMS Negated Rel"),
418 latex_ams_nrel, nr_latex_ams_nrel);
420 BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
422 dialog->setController(new ControlMath(*dialog));
423 dialog->setView(bitmap);
424 dialog->bc().bp(new IgnorantPolicy);
426 } else if (name == "mathamsoperators") {
427 FormMathsBitmap * bitmap =
428 createFormBitmap(*dialog, _("AMS Operators"),
429 latex_ams_ops, nr_latex_ams_ops);
431 BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
433 dialog->setController(new ControlMath(*dialog));
434 dialog->setView(bitmap);
435 dialog->bc().bp(new IgnorantPolicy);
437 } else if (name == "mathdelimiter") {
438 dialog->bc().view(new GBC(dialog->bc()));
439 dialog->setController(new ControlMath(*dialog));
440 dialog->setView(new GMathDelim(*dialog));
441 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
442 } else if (name == "mathmatrix") {
443 dialog->bc().view(new GBC(dialog->bc()));
444 dialog->setController(new ControlMath(*dialog));
445 dialog->setView(new GMathsMatrix(*dialog));
446 dialog->bc().bp(new OkCancelReadOnlyPolicy);
447 } else if (name == "mathspace") {
448 dialog->setController(new ControlMath(*dialog));
449 dialog->setView(new FormMathsSpace(*dialog));
450 dialog->bc().bp(new IgnorantPolicy);
451 } else if (name == "mathstyle") {
452 dialog->setController(new ControlMath(*dialog));
453 dialog->setView(new FormMathsStyle(*dialog));
454 dialog->bc().bp(new IgnorantPolicy);
455 } else if (name == "note") {
456 dialog->bc().view(new GBC(dialog->bc()));
457 dialog->setController(new ControlNote(*dialog));
458 dialog->setView(new GNote(*dialog));
459 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
460 } else if (name == "branch") {
461 dialog->setController(new ControlBranch(*dialog));
462 dialog->setView(new FormBranch(*dialog));
463 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
464 } else if (name == "paragraph") {
465 dialog->bc().view(new GBC(dialog->bc()));
466 dialog->setController(new ControlParagraph(*dialog));
467 dialog->setView(new GParagraph(*dialog));
468 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
469 } else if (name == "preamble") {
470 dialog->setController(new ControlPreamble(*dialog));
471 dialog->setView(new FormPreamble(*dialog));
472 dialog->bc().bp(new OkApplyCancelPolicy);
473 } else if (name == "prefs") {
474 dialog->setController(new ControlPrefs(*dialog));
475 dialog->setView(new FormPreferences(*dialog));
476 dialog->bc().bp(new PreferencesPolicy);
477 } else if (name == "print") {
478 dialog->bc().view(new GBC(dialog->bc()));
479 dialog->setController(new ControlPrint(*dialog));
480 dialog->setView(new GPrint(*dialog));
481 dialog->bc().bp(new OkCancelPolicy);
482 } else if (name == "ref") {
483 dialog->setController(new ControlRef(*dialog));
484 dialog->setView(new FormRef(*dialog));
485 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
486 } else if (name == "sendto") {
487 dialog->setController(new ControlSendto(*dialog));
488 dialog->setView(new FormSendto(*dialog));
489 dialog->bc().bp(new OkApplyCancelPolicy);
490 } else if (name == "spellchecker") {
491 dialog->bc().view(new GBC(dialog->bc()));
492 dialog->setController(new ControlSpellchecker(*dialog));
493 dialog->setView(new GSpellchecker(*dialog));
494 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
495 } else if (name == "tabular") {
496 dialog->setController(new ControlTabular(*dialog));
497 dialog->setView(new FormTabular(*dialog));
498 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
499 } else if (name == "tabularcreate") {
500 dialog->bc().view(new GBC(dialog->bc()));
501 dialog->setController(new ControlTabularCreate(*dialog));
502 dialog->setView(new GTableCreate(*dialog));
503 dialog->bc().bp(new IgnorantPolicy);
504 } else if (name == "texinfo") {
505 dialog->bc().view(new GBC(dialog->bc()));
506 dialog->setController(new ControlTexinfo(*dialog));
507 dialog->setView(new GTexinfo(*dialog));
508 dialog->bc().bp(new OkCancelPolicy);
509 #ifdef HAVE_LIBAIKSAURUS
510 } else if (name == "thesaurus") {
511 dialog->setController(new ControlThesaurus(*dialog));
512 dialog->setView(new FormThesaurus(*dialog));
513 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
515 } else if (name == "toc") {
516 dialog->bc().view(new GBC(dialog->bc()));
517 dialog->setController(new ControlToc(*dialog));
518 dialog->setView(new GToc(*dialog));
519 dialog->bc().bp(new OkCancelPolicy);
520 } else if (name == "url") {
521 dialog->bc().view(new GBC(dialog->bc()));
522 dialog->setController(new ControlCommand(*dialog, name));
523 dialog->setView(new GUrl(*dialog));
524 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
525 } else if (name == "vspace") {
526 dialog->setController(new ControlVSpace(*dialog));
527 dialog->setView(new FormVSpace(*dialog));
528 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
529 } else if (name == "wrap") {
530 dialog->setController(new ControlWrap(*dialog));
531 dialog->setView(new FormWrap(*dialog));
532 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
539 void Dialogs::toggleTooltips()
541 Tooltips::toggleEnabled();
545 /// Are the tooltips on or off?
546 bool Dialogs::tooltipsEnabled()
548 return Tooltips::enabled();