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.
17 #include "ControlAboutlyx.h"
18 #include "ControlBibtex.h"
19 #include "ControlBox.h"
20 #include "ControlBranch.h"
21 #include "ControlChanges.h"
22 #include "ControlCitation.h"
23 #include "ControlDocument.h"
24 #include "ControlErrorList.h"
25 #include "ControlERT.h"
26 #include "ControlExternal.h"
27 #include "ControlFloat.h"
28 #include "ControlGraphics.h"
29 #include "ControlInclude.h"
30 #include "ControlLog.h"
31 #include "ControlMath.h"
32 #include "ControlNote.h"
33 #include "ControlParagraph.h"
34 #include "ControlPreamble.h"
35 #include "ControlPrefs.h"
36 #include "ControlPrint.h"
37 #include "ControlRef.h"
38 #include "ControlSearch.h"
39 #include "ControlSendto.h"
40 #include "ControlShowFile.h"
41 #include "ControlSpellchecker.h"
42 #include "ControlTabular.h"
43 #include "ControlTabularCreate.h"
44 #include "ControlToc.h"
45 #include "ControlVSpace.h"
46 #include "ControlWrap.h"
48 #include "FormAboutlyx.h"
49 #include "FormBibitem.h"
50 #include "FormBibtex.h"
52 #include "FormBranch.h"
53 #include "FormChanges.h"
54 #include "FormCharacter.h"
55 #include "FormCitation.h"
56 #include "FormDocument.h"
57 #include "FormErrorList.h"
59 #include "FormExternal.h"
60 #include "FormFloat.h"
61 #include "FormGraphics.h"
62 #include "FormInclude.h"
64 #include "FormMathsPanel.h"
65 #include "FormMathsBitmap.h"
66 #include "FormMathsDelim.h"
67 #include "FormMathsMatrix.h"
68 #include "FormMathsSpace.h"
69 #include "FormMathsStyle.h"
71 #include "FormParagraph.h"
72 #include "FormPreamble.h"
73 #include "FormPreferences.h"
74 #include "FormPrint.h"
76 #include "FormTabular.h"
77 #include "FormTexinfo.h"
78 #include "FormSearch.h"
79 #include "FormSendto.h"
80 #include "FormShowFile.h"
81 #include "FormSpellchecker.h"
82 #include "FormTabularCreate.h"
86 #include "FormVSpace.h"
89 #ifdef HAVE_LIBAIKSAURUS
90 #include "ControlThesaurus.h"
91 #include "FormThesaurus.h"
95 #include "ButtonController.h"
106 #include "ams_misc.xbm"
107 #include "ams_arrows.xbm"
108 #include "ams_rel.xbm"
109 #include "ams_nrel.xbm"
110 #include "ams_ops.xbm"
112 #include <boost/assert.hpp>
116 using namespace lyx::frontend;
121 FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
122 char const * const * data, int size)
124 char const * const * const end = data + size;
125 return new FormMathsBitmap(parent, title, std::vector<string>(data, end));
129 char const * const dialognames[] = {
130 "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
131 "citation", "document", "errorlist" , "ert", "external", "file",
132 "findreplace", "float", "graphics", "include", "index", "label", "log",
133 "mathpanel", "mathaccents", "matharrows", "mathoperators", "mathrelations",
134 "mathgreek", "mathmisc", "mathdots", "mathbigoperators", "mathamsmisc",
135 "mathamsarrows", "mathamsrelations", "mathamsnegatedrelations",
136 "mathamsoperators", "mathdelimiter", "mathmatrix", "mathspace", "mathstyle",
137 "note", "paragraph", "preamble", "prefs", "print", "ref", "sendto",
138 "spellchecker", "tabular", "tabularcreate", "texinfo",
140 #ifdef HAVE_LIBAIKSAURUS
144 "toc", "url", "vspace", "wrap" };
146 char const * const * const end_dialognames =
147 dialognames + (sizeof(dialognames) / sizeof(char *));
150 cmpCStr(char const * name) : name_(name) {}
151 bool operator()(char const * other) {
152 return strcmp(other, name_) == 0;
161 bool Dialogs::isValidName(string const & name) const
163 return std::find_if(dialognames, end_dialognames,
164 cmpCStr(name.c_str())) != end_dialognames;
168 Dialogs::DialogPtr Dialogs::build(string const & name)
170 BOOST_ASSERT(isValidName(name));
172 DialogPtr dialog(new Dialog(lyxview_, name));
173 dialog->bc().view(new xformsBC(dialog->bc()));
175 if (name == "aboutlyx") {
176 dialog->setController(new ControlAboutlyx(*dialog));
177 dialog->setView(new FormAboutlyx(*dialog));
178 dialog->bc().bp(new OkCancelPolicy);
179 } else if (name == "bibitem") {
180 dialog->setController(new ControlCommand(*dialog, name));
181 dialog->setView(new FormBibitem(*dialog));
182 dialog->bc().bp(new OkCancelReadOnlyPolicy);
183 } else if (name == "bibtex") {
184 dialog->setController(new ControlBibtex(*dialog));
185 dialog->setView(new FormBibtex(*dialog));
186 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
187 } else if (name == "box") {
188 dialog->setController(new ControlBox(*dialog));
189 dialog->setView(new FormBox(*dialog));
190 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
191 } else if (name == "branch") {
192 dialog->setController(new ControlBranch(*dialog));
193 dialog->setView(new FormBranch(*dialog));
194 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
195 } else if (name == "changes") {
196 dialog->setController(new ControlChanges(*dialog));
197 dialog->setView(new FormChanges(*dialog));
198 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
199 } else if (name == "character") {
200 dialog->setController(new ControlCharacter(*dialog));
201 dialog->setView(new FormCharacter(*dialog));
202 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
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->setController(new ControlCommand(*dialog, name));
245 dialog->setView(new FormText(*dialog,
246 _("Index"), _("Keyword:|#K")));
247 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
248 } else if (name == "label") {
249 dialog->setController(new ControlCommand(*dialog, name));
250 dialog->setView(new FormText(*dialog,
251 _("Label"), _("Label:|#L")));
252 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
253 } else if (name == "log") {
254 dialog->setController(new ControlLog(*dialog));
255 dialog->setView(new FormLog(*dialog));
256 dialog->bc().bp(new OkCancelPolicy);
258 } else if (name == "mathpanel") {
259 dialog->setController(new ControlMath(*dialog));
260 dialog->setView(new FormMathsPanel(*dialog));
261 dialog->bc().bp(new IgnorantPolicy);
263 } else if (name == "mathaccents") {
264 FormMathsBitmap * bitmap =
265 createFormBitmap(*dialog, _("Maths Decorations & Accents"),
266 latex_deco, nr_latex_deco);
268 BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
270 BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
272 dialog->setController(new ControlMath(*dialog));
273 dialog->setView(bitmap);
274 dialog->bc().bp(new IgnorantPolicy);
276 } else if (name == "matharrows") {
277 FormMathsBitmap * bitmap =
278 createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
280 BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
282 BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
284 BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
286 dialog->setController(new ControlMath(*dialog));
287 dialog->setView(bitmap);
288 dialog->bc().bp(new IgnorantPolicy);
290 } else if (name == "mathoperators") {
291 FormMathsBitmap * bitmap =
292 createFormBitmap(*dialog, _("Binary Ops"),
293 latex_bop, nr_latex_bop);
295 BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
297 dialog->setController(new ControlMath(*dialog));
298 dialog->setView(bitmap);
299 dialog->bc().bp(new IgnorantPolicy);
301 } else if (name == "mathrelations") {
302 FormMathsBitmap * bitmap =
303 createFormBitmap(*dialog, _("Binary Relations"),
304 latex_brel, nr_latex_brel);
306 BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
308 dialog->setController(new ControlMath(*dialog));
309 dialog->setView(bitmap);
310 dialog->bc().bp(new IgnorantPolicy);
312 } else if (name == "mathgreek") {
313 FormMathsBitmap * bitmap =
314 createFormBitmap(*dialog, _("Greek"),
315 latex_greek, nr_latex_greek);
317 BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
319 BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
321 dialog->setController(new ControlMath(*dialog));
322 dialog->setView(bitmap);
323 dialog->bc().bp(new IgnorantPolicy);
325 } else if (name == "mathmisc") {
326 FormMathsBitmap * bitmap =
327 createFormBitmap(*dialog, _("Misc"),
328 latex_misc, nr_latex_misc);
330 BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
332 BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
334 BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
336 BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
338 dialog->setController(new ControlMath(*dialog));
339 dialog->setView(bitmap);
340 dialog->bc().bp(new IgnorantPolicy);
342 } else if (name == "mathdots") {
343 FormMathsBitmap * bitmap =
344 createFormBitmap(*dialog, _("Dots"),
345 latex_dots, nr_latex_dots);
347 BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
349 dialog->setController(new ControlMath(*dialog));
350 dialog->setView(bitmap);
351 dialog->bc().bp(new IgnorantPolicy);
353 } else if (name == "mathbigoperators") {
354 FormMathsBitmap * bitmap =
355 createFormBitmap(*dialog, _("Big Operators"),
356 latex_varsz, nr_latex_varsz);
358 BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
360 dialog->setController(new ControlMath(*dialog));
361 dialog->setView(bitmap);
362 dialog->bc().bp(new IgnorantPolicy);
364 } else if (name == "mathamsmisc") {
365 FormMathsBitmap * bitmap =
366 createFormBitmap(*dialog, _("AMS Misc"),
367 latex_ams_misc, nr_latex_ams_misc);
369 BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
371 BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
373 dialog->setController(new ControlMath(*dialog));
374 dialog->setView(bitmap);
375 dialog->bc().bp(new IgnorantPolicy);
377 } else if (name == "mathamsarrows") {
378 FormMathsBitmap * bitmap =
379 createFormBitmap(*dialog, _("AMS Arrows"),
380 latex_ams_arrows, nr_latex_ams_arrows);
382 BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
384 BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
386 dialog->setController(new ControlMath(*dialog));
387 dialog->setView(bitmap);
388 dialog->bc().bp(new IgnorantPolicy);
390 } else if (name == "mathamsrelations") {
391 FormMathsBitmap * bitmap =
392 createFormBitmap(*dialog, _("AMS Relations"),
393 latex_ams_rel, nr_latex_ams_rel);
395 BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
397 dialog->setController(new ControlMath(*dialog));
398 dialog->setView(bitmap);
399 dialog->bc().bp(new IgnorantPolicy);
401 } else if (name == "mathamsnegatedrelations") {
402 FormMathsBitmap * bitmap =
403 createFormBitmap(*dialog, _("AMS Negated Rel"),
404 latex_ams_nrel, nr_latex_ams_nrel);
406 BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
408 dialog->setController(new ControlMath(*dialog));
409 dialog->setView(bitmap);
410 dialog->bc().bp(new IgnorantPolicy);
412 } else if (name == "mathamsoperators") {
413 FormMathsBitmap * bitmap =
414 createFormBitmap(*dialog, _("AMS Operators"),
415 latex_ams_ops, nr_latex_ams_ops);
417 BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
419 dialog->setController(new ControlMath(*dialog));
420 dialog->setView(bitmap);
421 dialog->bc().bp(new IgnorantPolicy);
423 } else if (name == "mathdelimiter") {
424 dialog->setController(new ControlMath(*dialog));
425 dialog->setView(new FormMathsDelim(*dialog));
426 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
427 } else if (name == "mathmatrix") {
428 dialog->setController(new ControlMath(*dialog));
429 dialog->setView(new FormMathsMatrix(*dialog));
430 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
431 } else if (name == "mathspace") {
432 dialog->setController(new ControlMath(*dialog));
433 dialog->setView(new FormMathsSpace(*dialog));
434 dialog->bc().bp(new IgnorantPolicy);
435 } else if (name == "mathstyle") {
436 dialog->setController(new ControlMath(*dialog));
437 dialog->setView(new FormMathsStyle(*dialog));
438 dialog->bc().bp(new IgnorantPolicy);
439 } else if (name == "note") {
440 dialog->setController(new ControlNote(*dialog));
441 dialog->setView(new FormNote(*dialog));
442 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
443 } else if (name == "paragraph") {
444 dialog->setController(new ControlParagraph(*dialog));
445 dialog->setView(new FormParagraph(*dialog));
446 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
447 } else if (name == "preamble") {
448 dialog->setController(new ControlPreamble(*dialog));
449 dialog->setView(new FormPreamble(*dialog));
450 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
451 } else if (name == "prefs") {
452 dialog->setController(new ControlPrefs(*dialog));
453 dialog->setView(new FormPreferences(*dialog));
454 dialog->bc().bp(new PreferencesPolicy);
455 } else if (name == "print") {
456 dialog->setController(new ControlPrint(*dialog));
457 dialog->setView(new FormPrint(*dialog));
458 dialog->bc().bp(new OkApplyCancelPolicy);
459 } else if (name == "ref") {
460 dialog->setController(new ControlRef(*dialog));
461 dialog->setView(new FormRef(*dialog));
462 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
463 } else if (name == "sendto") {
464 dialog->setController(new ControlSendto(*dialog));
465 dialog->setView(new FormSendto(*dialog));
466 dialog->bc().bp(new OkApplyCancelPolicy);
467 } else if (name == "spellchecker") {
468 dialog->setController(new ControlSpellchecker(*dialog));
469 dialog->setView(new FormSpellchecker(*dialog));
470 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
471 } else if (name == "tabular") {
472 dialog->setController(new ControlTabular(*dialog));
473 dialog->setView(new FormTabular(*dialog));
474 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
475 } else if (name == "tabularcreate") {
476 dialog->setController(new ControlTabularCreate(*dialog));
477 dialog->setView(new FormTabularCreate(*dialog));
478 dialog->bc().bp(new IgnorantPolicy);
479 } else if (name == "texinfo") {
480 dialog->setController(new ControlTexinfo(*dialog));
481 dialog->setView(new FormTexinfo(*dialog));
482 dialog->bc().bp(new OkCancelPolicy);
483 #ifdef HAVE_LIBAIKSAURUS
484 } else if (name == "thesaurus") {
485 dialog->setController(new ControlThesaurus(*dialog));
486 dialog->setView(new FormThesaurus(*dialog));
487 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
489 } else if (name == "toc") {
490 dialog->setController(new ControlToc(*dialog));
491 dialog->setView(new FormToc(*dialog));
492 dialog->bc().bp(new OkCancelPolicy);
493 } else if (name == "url") {
494 dialog->setController(new ControlCommand(*dialog, name));
495 dialog->setView(new FormUrl(*dialog));
496 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
497 } else if (name == "vspace") {
498 dialog->setController(new ControlVSpace(*dialog));
499 dialog->setView(new FormVSpace(*dialog));
500 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
501 } else if (name == "wrap") {
502 dialog->setController(new ControlWrap(*dialog));
503 dialog->setView(new FormWrap(*dialog));
504 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
511 void Dialogs::toggleTooltips()
513 Tooltips::toggleEnabled();
517 /// Are the tooltips on or off?
518 bool Dialogs::tooltipsEnabled()
520 return Tooltips::enabled();