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