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 "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->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->setController(new ControlShowFile(*dialog));
228 dialog->setView(new FormShowFile(*dialog));
229 dialog->bc().bp(new OkCancelPolicy);
230 } else if (name == "findreplace") {
231 dialog->bc().view(new GBC(dialog->bc()));
232 dialog->setController(new ControlSearch(*dialog));
233 dialog->setView(new GSearch(*dialog));
234 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
235 } else if (name == "float") {
236 dialog->setController(new ControlFloat(*dialog));
237 dialog->setView(new FormFloat(*dialog));
238 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
239 } else if (name == "graphics") {
240 dialog->setController(new ControlGraphics(*dialog));
241 dialog->setView(new FormGraphics(*dialog));
242 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
243 } else if (name == "include") {
244 dialog->setController(new ControlInclude(*dialog));
245 dialog->setView(new FormInclude(*dialog));
246 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
247 } else if (name == "index") {
248 dialog->bc().view(new GBC(dialog->bc()));
249 dialog->setController(new ControlCommand(*dialog, name));
250 dialog->setView(new GText(*dialog,
251 _("Index"), _("Keyword:|#K")));
252 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
253 } else if (name == "label") {
254 dialog->bc().view(new GBC(dialog->bc()));
255 dialog->setController(new ControlCommand(*dialog, name));
256 dialog->setView(new GText(*dialog,
257 _("Label"), _("Label:|#L")));
258 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
259 } else if (name == "log") {
260 dialog->setController(new ControlLog(*dialog));
261 dialog->setView(new FormLog(*dialog));
262 dialog->bc().bp(new OkCancelPolicy);
264 } else if (name == "mathpanel") {
265 dialog->bc().view(new GBC(dialog->bc()));
266 dialog->setController(new ControlMath(*dialog));
267 dialog->setView(new GMathPanel(*dialog));
268 dialog->bc().bp(new IgnorantPolicy);
270 } else if (name == "mathaccents") {
271 FormMathsBitmap * bitmap =
272 createFormBitmap(*dialog, _("Maths Decorations & Accents"),
273 latex_deco, nr_latex_deco);
275 BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
277 BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
279 dialog->setController(new ControlMath(*dialog));
280 dialog->setView(bitmap);
281 dialog->bc().bp(new IgnorantPolicy);
283 } else if (name == "matharrows") {
284 FormMathsBitmap * bitmap =
285 createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
287 BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
289 BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
291 BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
293 dialog->setController(new ControlMath(*dialog));
294 dialog->setView(bitmap);
295 dialog->bc().bp(new IgnorantPolicy);
297 } else if (name == "mathoperators") {
298 FormMathsBitmap * bitmap =
299 createFormBitmap(*dialog, _("Binary Ops"),
300 latex_bop, nr_latex_bop);
302 BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
304 dialog->setController(new ControlMath(*dialog));
305 dialog->setView(bitmap);
306 dialog->bc().bp(new IgnorantPolicy);
308 } else if (name == "mathrelations") {
309 FormMathsBitmap * bitmap =
310 createFormBitmap(*dialog, _("Binary Relations"),
311 latex_brel, nr_latex_brel);
313 BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
315 dialog->setController(new ControlMath(*dialog));
316 dialog->setView(bitmap);
317 dialog->bc().bp(new IgnorantPolicy);
319 } else if (name == "mathgreek") {
320 FormMathsBitmap * bitmap =
321 createFormBitmap(*dialog, _("Greek"),
322 latex_greek, nr_latex_greek);
324 BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
326 BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
328 dialog->setController(new ControlMath(*dialog));
329 dialog->setView(bitmap);
330 dialog->bc().bp(new IgnorantPolicy);
332 } else if (name == "mathmisc") {
333 FormMathsBitmap * bitmap =
334 createFormBitmap(*dialog, _("Misc"),
335 latex_misc, nr_latex_misc);
337 BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
339 BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
341 BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
343 BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
345 dialog->setController(new ControlMath(*dialog));
346 dialog->setView(bitmap);
347 dialog->bc().bp(new IgnorantPolicy);
349 } else if (name == "mathdots") {
350 FormMathsBitmap * bitmap =
351 createFormBitmap(*dialog, _("Dots"),
352 latex_dots, nr_latex_dots);
354 BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
356 dialog->setController(new ControlMath(*dialog));
357 dialog->setView(bitmap);
358 dialog->bc().bp(new IgnorantPolicy);
360 } else if (name == "mathbigoperators") {
361 FormMathsBitmap * bitmap =
362 createFormBitmap(*dialog, _("Big Operators"),
363 latex_varsz, nr_latex_varsz);
365 BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
367 dialog->setController(new ControlMath(*dialog));
368 dialog->setView(bitmap);
369 dialog->bc().bp(new IgnorantPolicy);
371 } else if (name == "mathamsmisc") {
372 FormMathsBitmap * bitmap =
373 createFormBitmap(*dialog, _("AMS Misc"),
374 latex_ams_misc, nr_latex_ams_misc);
376 BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
378 BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
380 dialog->setController(new ControlMath(*dialog));
381 dialog->setView(bitmap);
382 dialog->bc().bp(new IgnorantPolicy);
384 } else if (name == "mathamsarrows") {
385 FormMathsBitmap * bitmap =
386 createFormBitmap(*dialog, _("AMS Arrows"),
387 latex_ams_arrows, nr_latex_ams_arrows);
389 BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
391 BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
393 dialog->setController(new ControlMath(*dialog));
394 dialog->setView(bitmap);
395 dialog->bc().bp(new IgnorantPolicy);
397 } else if (name == "mathamsrelations") {
398 FormMathsBitmap * bitmap =
399 createFormBitmap(*dialog, _("AMS Relations"),
400 latex_ams_rel, nr_latex_ams_rel);
402 BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
404 dialog->setController(new ControlMath(*dialog));
405 dialog->setView(bitmap);
406 dialog->bc().bp(new IgnorantPolicy);
408 } else if (name == "mathamsnegatedrelations") {
409 FormMathsBitmap * bitmap =
410 createFormBitmap(*dialog, _("AMS Negated Rel"),
411 latex_ams_nrel, nr_latex_ams_nrel);
413 BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
415 dialog->setController(new ControlMath(*dialog));
416 dialog->setView(bitmap);
417 dialog->bc().bp(new IgnorantPolicy);
419 } else if (name == "mathamsoperators") {
420 FormMathsBitmap * bitmap =
421 createFormBitmap(*dialog, _("AMS Operators"),
422 latex_ams_ops, nr_latex_ams_ops);
424 BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
426 dialog->setController(new ControlMath(*dialog));
427 dialog->setView(bitmap);
428 dialog->bc().bp(new IgnorantPolicy);
430 } else if (name == "mathdelimiter") {
431 dialog->bc().view(new GBC(dialog->bc()));
432 dialog->setController(new ControlMath(*dialog));
433 dialog->setView(new GMathDelim(*dialog));
434 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
435 } else if (name == "mathmatrix") {
436 dialog->bc().view(new GBC(dialog->bc()));
437 dialog->setController(new ControlMath(*dialog));
438 dialog->setView(new GMathsMatrix(*dialog));
439 dialog->bc().bp(new OkCancelReadOnlyPolicy);
440 } else if (name == "mathspace") {
441 dialog->setController(new ControlMath(*dialog));
442 dialog->setView(new FormMathsSpace(*dialog));
443 dialog->bc().bp(new IgnorantPolicy);
444 } else if (name == "mathstyle") {
445 dialog->setController(new ControlMath(*dialog));
446 dialog->setView(new FormMathsStyle(*dialog));
447 dialog->bc().bp(new IgnorantPolicy);
448 } else if (name == "note") {
449 dialog->setController(new ControlNote(*dialog));
450 dialog->setView(new FormNote(*dialog));
451 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
452 } else if (name == "branch") {
453 dialog->setController(new ControlBranch(*dialog));
454 dialog->setView(new FormBranch(*dialog));
455 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
456 } else if (name == "paragraph") {
457 dialog->bc().view(new GBC(dialog->bc()));
458 dialog->setController(new ControlParagraph(*dialog));
459 dialog->setView(new GParagraph(*dialog));
460 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
461 } else if (name == "preamble") {
462 dialog->setController(new ControlPreamble(*dialog));
463 dialog->setView(new FormPreamble(*dialog));
464 dialog->bc().bp(new OkApplyCancelPolicy);
465 } else if (name == "prefs") {
466 dialog->setController(new ControlPrefs(*dialog));
467 dialog->setView(new FormPreferences(*dialog));
468 dialog->bc().bp(new PreferencesPolicy);
469 } else if (name == "print") {
470 dialog->bc().view(new GBC(dialog->bc()));
471 dialog->setController(new ControlPrint(*dialog));
472 dialog->setView(new GPrint(*dialog));
473 dialog->bc().bp(new OkCancelPolicy);
474 } else if (name == "ref") {
475 dialog->setController(new ControlRef(*dialog));
476 dialog->setView(new FormRef(*dialog));
477 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
478 } else if (name == "sendto") {
479 dialog->setController(new ControlSendto(*dialog));
480 dialog->setView(new FormSendto(*dialog));
481 dialog->bc().bp(new OkApplyCancelPolicy);
482 } else if (name == "spellchecker") {
483 dialog->bc().view(new GBC(dialog->bc()));
484 dialog->setController(new ControlSpellchecker(*dialog));
485 dialog->setView(new GSpellchecker(*dialog));
486 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
487 } else if (name == "tabular") {
488 dialog->setController(new ControlTabular(*dialog));
489 dialog->setView(new FormTabular(*dialog));
490 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
491 } else if (name == "tabularcreate") {
492 dialog->bc().view(new GBC(dialog->bc()));
493 dialog->setController(new ControlTabularCreate(*dialog));
494 dialog->setView(new GTableCreate(*dialog));
495 dialog->bc().bp(new IgnorantPolicy);
496 } else if (name == "texinfo") {
497 dialog->bc().view(new GBC(dialog->bc()));
498 dialog->setController(new ControlTexinfo(*dialog));
499 dialog->setView(new GTexinfo(*dialog));
500 dialog->bc().bp(new OkCancelPolicy);
501 #ifdef HAVE_LIBAIKSAURUS
502 } else if (name == "thesaurus") {
503 dialog->setController(new ControlThesaurus(*dialog));
504 dialog->setView(new FormThesaurus(*dialog));
505 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
507 } else if (name == "toc") {
508 dialog->bc().view(new GBC(dialog->bc()));
509 dialog->setController(new ControlToc(*dialog));
510 dialog->setView(new GToc(*dialog));
511 dialog->bc().bp(new OkCancelPolicy);
512 } else if (name == "url") {
513 dialog->bc().view(new GBC(dialog->bc()));
514 dialog->setController(new ControlCommand(*dialog, name));
515 dialog->setView(new GUrl(*dialog));
516 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
517 } else if (name == "vspace") {
518 dialog->setController(new ControlVSpace(*dialog));
519 dialog->setView(new FormVSpace(*dialog));
520 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
521 } else if (name == "wrap") {
522 dialog->setController(new ControlWrap(*dialog));
523 dialog->setView(new FormWrap(*dialog));
524 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
531 void Dialogs::toggleTooltips()
533 Tooltips::toggleEnabled();
537 /// Are the tooltips on or off?
538 bool Dialogs::tooltipsEnabled()
540 return Tooltips::enabled();