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