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>
124 FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
125 char const * const * data, int size)
127 char const * const * const end = data + size;
128 return new FormMathsBitmap(parent, title, std::vector<string>(data, end));
132 char const * const dialognames[] = {
133 "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
134 "citation", "document", "error", "errorlist" , "ert", "external", "file",
135 "findreplace", "float", "graphics", "include", "index", "label", "log",
136 "mathpanel", "mathaccents", "matharrows", "mathoperators", "mathrelations",
137 "mathgreek", "mathmisc", "mathdots", "mathbigoperators", "mathamsmisc",
138 "mathamsarrows", "mathamsrelations", "mathamsnegatedrelations",
139 "mathamsoperators", "mathdelimiter", "mathmatrix", "mathspace", "mathstyle",
140 "note", "paragraph", "preamble", "prefs", "print", "ref", "sendto",
141 "spellchecker", "tabular", "tabularcreate", "texinfo",
143 #ifdef HAVE_LIBAIKSAURUS
147 "toc", "url", "vspace", "wrap" };
149 char const * const * const end_dialognames =
150 dialognames + (sizeof(dialognames) / sizeof(char *));
153 cmpCStr(char const * name) : name_(name) {}
154 bool operator()(char const * other) {
155 return strcmp(other, name_) == 0;
164 bool Dialogs::isValidName(string const & name) const
166 return std::find_if(dialognames, end_dialognames,
167 cmpCStr(name.c_str())) != end_dialognames;
171 Dialogs::DialogPtr Dialogs::build(string const & name)
173 BOOST_ASSERT(isValidName(name));
175 DialogPtr dialog(new Dialog(lyxview_, name));
176 dialog->bc().view(new xformsBC(dialog->bc()));
178 if (name == "aboutlyx") {
179 dialog->bc().view(new GBC(dialog->bc()));
180 dialog->setController(new ControlAboutlyx(*dialog));
181 dialog->setView(new GAboutlyx(*dialog));
182 dialog->bc().bp(new OkCancelPolicy);
183 } else if (name == "bibitem") {
184 dialog->setController(new ControlCommand(*dialog, name));
185 dialog->setView(new FormBibitem(*dialog));
186 dialog->bc().bp(new OkCancelReadOnlyPolicy);
187 } else if (name == "bibtex") {
188 dialog->setController(new ControlBibtex(*dialog));
189 dialog->setView(new FormBibtex(*dialog));
190 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
191 } else if (name == "box") {
192 dialog->setController(new ControlBox(*dialog));
193 dialog->setView(new FormBox(*dialog));
194 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
195 } else if (name == "character") {
196 dialog->setController(new ControlCharacter(*dialog));
197 dialog->setView(new FormCharacter(*dialog));
198 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
199 } else if (name == "changes") {
200 dialog->setController(new ControlChanges(*dialog));
201 dialog->setView(new FormChanges(*dialog));
202 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
203 } else if (name == "citation") {
204 dialog->setController(new ControlCitation(*dialog));
205 dialog->setView(new FormCitation(*dialog));
206 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
207 } else if (name == "document") {
208 dialog->setController(new ControlDocument(*dialog));
209 dialog->setView(new FormDocument(*dialog));
210 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
211 } else if (name == "errorlist") {
212 dialog->setController(new ControlErrorList(*dialog));
213 dialog->setView(new FormErrorList(*dialog));
214 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
215 } else if (name == "ert") {
216 dialog->setController(new ControlERT(*dialog));
217 dialog->setView(new FormERT(*dialog));
218 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
219 } else if (name == "external") {
220 dialog->setController(new ControlExternal(*dialog));
221 dialog->setView(new FormExternal(*dialog));
222 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
223 } else if (name == "file") {
224 dialog->setController(new ControlShowFile(*dialog));
225 dialog->setView(new FormShowFile(*dialog));
226 dialog->bc().bp(new OkCancelPolicy);
227 } else if (name == "findreplace") {
228 dialog->setController(new ControlSearch(*dialog));
229 dialog->setView(new FormSearch(*dialog));
230 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
231 } else if (name == "float") {
232 dialog->setController(new ControlFloat(*dialog));
233 dialog->setView(new FormFloat(*dialog));
234 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
235 } else if (name == "graphics") {
236 dialog->setController(new ControlGraphics(*dialog));
237 dialog->setView(new FormGraphics(*dialog));
238 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
239 } else if (name == "include") {
240 dialog->setController(new ControlInclude(*dialog));
241 dialog->setView(new FormInclude(*dialog));
242 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
243 } else if (name == "index") {
244 dialog->bc().view(new GBC(dialog->bc()));
245 dialog->setController(new ControlCommand(*dialog, name));
246 dialog->setView(new GText(*dialog,
247 _("Index"), _("Keyword:|#K")));
248 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
249 } else if (name == "label") {
250 dialog->bc().view(new GBC(dialog->bc()));
251 dialog->setController(new ControlCommand(*dialog, name));
252 dialog->setView(new GText(*dialog,
253 _("Label"), _("Label:|#L")));
254 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
255 } else if (name == "log") {
256 dialog->setController(new ControlLog(*dialog));
257 dialog->setView(new FormLog(*dialog));
258 dialog->bc().bp(new OkCancelPolicy);
260 } else if (name == "mathpanel") {
261 dialog->bc().view(new GBC(dialog->bc()));
262 dialog->setController(new ControlMath(*dialog));
263 dialog->setView(new GMathPanel(*dialog));
264 dialog->bc().bp(new IgnorantPolicy);
266 } else if (name == "mathaccents") {
267 FormMathsBitmap * bitmap =
268 createFormBitmap(*dialog, _("Maths Decorations & Accents"),
269 latex_deco, nr_latex_deco);
271 BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
273 BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
275 dialog->setController(new ControlMath(*dialog));
276 dialog->setView(bitmap);
277 dialog->bc().bp(new IgnorantPolicy);
279 } else if (name == "matharrows") {
280 FormMathsBitmap * bitmap =
281 createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
283 BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
285 BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
287 BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
289 dialog->setController(new ControlMath(*dialog));
290 dialog->setView(bitmap);
291 dialog->bc().bp(new IgnorantPolicy);
293 } else if (name == "mathoperators") {
294 FormMathsBitmap * bitmap =
295 createFormBitmap(*dialog, _("Binary Ops"),
296 latex_bop, nr_latex_bop);
298 BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
300 dialog->setController(new ControlMath(*dialog));
301 dialog->setView(bitmap);
302 dialog->bc().bp(new IgnorantPolicy);
304 } else if (name == "mathrelations") {
305 FormMathsBitmap * bitmap =
306 createFormBitmap(*dialog, _("Binary Relations"),
307 latex_brel, nr_latex_brel);
309 BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
311 dialog->setController(new ControlMath(*dialog));
312 dialog->setView(bitmap);
313 dialog->bc().bp(new IgnorantPolicy);
315 } else if (name == "mathgreek") {
316 FormMathsBitmap * bitmap =
317 createFormBitmap(*dialog, _("Greek"),
318 latex_greek, nr_latex_greek);
320 BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
322 BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
324 dialog->setController(new ControlMath(*dialog));
325 dialog->setView(bitmap);
326 dialog->bc().bp(new IgnorantPolicy);
328 } else if (name == "mathmisc") {
329 FormMathsBitmap * bitmap =
330 createFormBitmap(*dialog, _("Misc"),
331 latex_misc, nr_latex_misc);
333 BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
335 BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
337 BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
339 BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
341 dialog->setController(new ControlMath(*dialog));
342 dialog->setView(bitmap);
343 dialog->bc().bp(new IgnorantPolicy);
345 } else if (name == "mathdots") {
346 FormMathsBitmap * bitmap =
347 createFormBitmap(*dialog, _("Dots"),
348 latex_dots, nr_latex_dots);
350 BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
352 dialog->setController(new ControlMath(*dialog));
353 dialog->setView(bitmap);
354 dialog->bc().bp(new IgnorantPolicy);
356 } else if (name == "mathbigoperators") {
357 FormMathsBitmap * bitmap =
358 createFormBitmap(*dialog, _("Big Operators"),
359 latex_varsz, nr_latex_varsz);
361 BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
363 dialog->setController(new ControlMath(*dialog));
364 dialog->setView(bitmap);
365 dialog->bc().bp(new IgnorantPolicy);
367 } else if (name == "mathamsmisc") {
368 FormMathsBitmap * bitmap =
369 createFormBitmap(*dialog, _("AMS Misc"),
370 latex_ams_misc, nr_latex_ams_misc);
372 BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
374 BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
376 dialog->setController(new ControlMath(*dialog));
377 dialog->setView(bitmap);
378 dialog->bc().bp(new IgnorantPolicy);
380 } else if (name == "mathamsarrows") {
381 FormMathsBitmap * bitmap =
382 createFormBitmap(*dialog, _("AMS Arrows"),
383 latex_ams_arrows, nr_latex_ams_arrows);
385 BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
387 BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
389 dialog->setController(new ControlMath(*dialog));
390 dialog->setView(bitmap);
391 dialog->bc().bp(new IgnorantPolicy);
393 } else if (name == "mathamsrelations") {
394 FormMathsBitmap * bitmap =
395 createFormBitmap(*dialog, _("AMS Relations"),
396 latex_ams_rel, nr_latex_ams_rel);
398 BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
400 dialog->setController(new ControlMath(*dialog));
401 dialog->setView(bitmap);
402 dialog->bc().bp(new IgnorantPolicy);
404 } else if (name == "mathamsnegatedrelations") {
405 FormMathsBitmap * bitmap =
406 createFormBitmap(*dialog, _("AMS Negated Rel"),
407 latex_ams_nrel, nr_latex_ams_nrel);
409 BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
411 dialog->setController(new ControlMath(*dialog));
412 dialog->setView(bitmap);
413 dialog->bc().bp(new IgnorantPolicy);
415 } else if (name == "mathamsoperators") {
416 FormMathsBitmap * bitmap =
417 createFormBitmap(*dialog, _("AMS Operators"),
418 latex_ams_ops, nr_latex_ams_ops);
420 BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
422 dialog->setController(new ControlMath(*dialog));
423 dialog->setView(bitmap);
424 dialog->bc().bp(new IgnorantPolicy);
426 } else if (name == "mathdelimiter") {
427 dialog->bc().view(new GBC(dialog->bc()));
428 dialog->setController(new ControlMath(*dialog));
429 dialog->setView(new GMathDelim(*dialog));
430 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
431 } else if (name == "mathmatrix") {
432 dialog->setController(new ControlMath(*dialog));
433 dialog->setView(new FormMathsMatrix(*dialog));
434 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
435 } else if (name == "mathspace") {
436 dialog->setController(new ControlMath(*dialog));
437 dialog->setView(new FormMathsSpace(*dialog));
438 dialog->bc().bp(new IgnorantPolicy);
439 } else if (name == "mathstyle") {
440 dialog->setController(new ControlMath(*dialog));
441 dialog->setView(new FormMathsStyle(*dialog));
442 dialog->bc().bp(new IgnorantPolicy);
443 } else if (name == "note") {
444 dialog->setController(new ControlNote(*dialog));
445 dialog->setView(new FormNote(*dialog));
446 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
447 } else if (name == "branch") {
448 dialog->setController(new ControlBranch(*dialog));
449 dialog->setView(new FormBranch(*dialog));
450 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
451 } else if (name == "paragraph") {
452 dialog->setController(new ControlParagraph(*dialog));
453 dialog->setView(new FormParagraph(*dialog));
454 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
455 } else if (name == "preamble") {
456 dialog->setController(new ControlPreamble(*dialog));
457 dialog->setView(new FormPreamble(*dialog));
458 dialog->bc().bp(new OkApplyCancelPolicy);
459 } else if (name == "prefs") {
460 dialog->setController(new ControlPrefs(*dialog));
461 dialog->setView(new FormPreferences(*dialog));
462 dialog->bc().bp(new PreferencesPolicy);
463 } else if (name == "print") {
464 dialog->setController(new ControlPrint(*dialog));
465 dialog->setView(new FormPrint(*dialog));
466 dialog->bc().bp(new OkApplyCancelPolicy);
467 } else if (name == "ref") {
468 dialog->setController(new ControlRef(*dialog));
469 dialog->setView(new FormRef(*dialog));
470 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
471 } else if (name == "sendto") {
472 dialog->setController(new ControlSendto(*dialog));
473 dialog->setView(new FormSendto(*dialog));
474 dialog->bc().bp(new OkApplyCancelPolicy);
475 } else if (name == "spellchecker") {
476 dialog->setController(new ControlSpellchecker(*dialog));
477 dialog->setView(new FormSpellchecker(*dialog));
478 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
479 } else if (name == "tabular") {
480 dialog->setController(new ControlTabular(*dialog));
481 dialog->setView(new FormTabular(*dialog));
482 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
483 } else if (name == "tabularcreate") {
484 dialog->bc().view(new GBC(dialog->bc()));
485 dialog->setController(new ControlTabularCreate(*dialog));
486 dialog->setView(new GTableCreate(*dialog));
487 dialog->bc().bp(new IgnorantPolicy);
488 } else if (name == "texinfo") {
489 dialog->setController(new ControlTexinfo(*dialog));
490 dialog->setView(new FormTexinfo(*dialog));
491 dialog->bc().bp(new OkCancelPolicy);
492 #ifdef HAVE_LIBAIKSAURUS
493 } else if (name == "thesaurus") {
494 dialog->setController(new ControlThesaurus(*dialog));
495 dialog->setView(new FormThesaurus(*dialog));
496 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
498 } else if (name == "toc") {
499 dialog->setController(new ControlToc(*dialog));
500 dialog->setView(new FormToc(*dialog));
501 dialog->bc().bp(new OkCancelPolicy);
502 } else if (name == "url") {
503 dialog->bc().view(new GBC(dialog->bc()));
504 dialog->setController(new ControlCommand(*dialog, name));
505 dialog->setView(new GUrl(*dialog));
506 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
507 } else if (name == "vspace") {
508 dialog->setController(new ControlVSpace(*dialog));
509 dialog->setView(new FormVSpace(*dialog));
510 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
511 } else if (name == "wrap") {
512 dialog->setController(new ControlWrap(*dialog));
513 dialog->setView(new FormWrap(*dialog));
514 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
521 void Dialogs::toggleTooltips()
523 Tooltips::toggleEnabled();
527 /// Are the tooltips on or off?
528 bool Dialogs::tooltipsEnabled()
530 return Tooltips::enabled();