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 "ControlPrint.h"
35 #include "ControlRef.h"
36 #include "ControlSearch.h"
37 #include "ControlSendto.h"
38 #include "ControlShowFile.h"
39 #include "ControlTabular.h"
40 #include "ControlTabularCreate.h"
41 #include "ControlToc.h"
42 #include "ControlVSpace.h"
43 #include "ControlWrap.h"
45 #include "FormAboutlyx.h"
46 #include "FormBibitem.h"
47 #include "FormBibtex.h"
49 #include "FormBranch.h"
50 #include "FormChanges.h"
51 #include "FormCharacter.h"
52 #include "FormCitation.h"
53 #include "FormDocument.h"
54 #include "FormErrorList.h"
56 #include "FormExternal.h"
57 #include "FormFloat.h"
58 #include "FormGraphics.h"
59 #include "FormInclude.h"
61 #include "FormMathsPanel.h"
62 #include "FormMathsBitmap.h"
63 #include "FormMathsDelim.h"
64 #include "FormMathsMatrix.h"
65 #include "FormMathsSpace.h"
66 #include "FormMathsStyle.h"
68 #include "FormParagraph.h"
69 #include "FormPrint.h"
71 #include "FormTabular.h"
72 #include "FormTexinfo.h"
73 #include "FormSearch.h"
74 #include "FormSendto.h"
75 #include "FormShowFile.h"
76 #include "FormTabularCreate.h"
80 #include "FormVSpace.h"
83 #ifdef HAVE_LIBAIKSAURUS
84 #include "ControlThesaurus.h"
85 #include "FormThesaurus.h"
89 #include "ButtonController.h"
100 #include "ams_misc.xbm"
101 #include "ams_arrows.xbm"
102 #include "ams_rel.xbm"
103 #include "ams_nrel.xbm"
104 #include "ams_ops.xbm"
112 FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
113 char const * const * data, int size)
115 char const * const * const end = data + size;
116 return new FormMathsBitmap(parent, title, std::vector<string>(data, end));
120 char const * const dialognames[] = {
121 "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
122 "citation", "document", "error", "errorlist" , "ert", "external", "file",
123 "findreplace", "float", "graphics", "include", "index", "label", "log",
124 "mathpanel", "mathaccents", "matharrows", "mathoperators", "mathrelations",
125 "mathgreek", "mathmisc", "mathdots", "mathbigoperators", "mathamsmisc",
126 "mathamsarrows", "mathamsrelations", "mathamsnegatedrelations",
127 "mathamsoperators", "mathdelimiter", "mathmatrix", "mathspace", "mathstyle",
128 "note", "paragraph", "print", "ref", "sendto", "tabular", "tabularcreate",
130 #ifdef HAVE_LIBAIKSAURUS
134 "texinfo", "toc", "url", "vspace", "wrap" };
136 char const * const * const end_dialognames =
137 dialognames + (sizeof(dialognames) / sizeof(char *));
140 cmpCStr(char const * name) : name_(name) {}
141 bool operator()(char const * other) {
142 return strcmp(other, name_) == 0;
151 bool Dialogs::isValidName(string const & name) const
153 return std::find_if(dialognames, end_dialognames,
154 cmpCStr(name.c_str())) != end_dialognames;
158 Dialog * Dialogs::build(string const & name)
160 if (!isValidName(name))
163 Dialog * dialog = new Dialog(lyxview_, name);
164 dialog->bc().view(new xformsBC(dialog->bc()));
166 if (name == "aboutlyx") {
167 dialog->setController(new ControlAboutlyx(*dialog));
168 dialog->setView(new FormAboutlyx(*dialog));
169 dialog->bc().bp(new OkCancelPolicy);
170 } else if (name == "bibitem") {
171 dialog->setController(new ControlCommand(*dialog, name));
172 dialog->setView(new FormBibitem(*dialog));
173 dialog->bc().bp(new OkCancelReadOnlyPolicy);
174 } else if (name == "bibtex") {
175 dialog->setController(new ControlBibtex(*dialog));
176 dialog->setView(new FormBibtex(*dialog));
177 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
178 } else if (name == "box") {
179 dialog->setController(new ControlBox(*dialog));
180 dialog->setView(new FormBox(*dialog));
181 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
182 } else if (name == "branch") {
183 dialog->setController(new ControlBranch(*dialog));
184 dialog->setView(new FormBranch(*dialog));
185 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
186 } else if (name == "character") {
187 dialog->setController(new ControlCharacter(*dialog));
188 dialog->setView(new FormCharacter(*dialog));
189 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
190 } else if (name == "changes") {
191 dialog->setController(new ControlChanges(*dialog));
192 dialog->setView(new FormChanges(*dialog));
193 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
194 } else if (name == "citation") {
195 dialog->setController(new ControlCitation(*dialog));
196 dialog->setView(new FormCitation(*dialog));
197 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
198 } else if (name == "document") {
199 dialog->setController(new ControlDocument(*dialog));
200 dialog->setView(new FormDocument(*dialog));
201 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
202 } else if (name == "errorlist") {
203 dialog->setController(new ControlErrorList(*dialog));
204 dialog->setView(new FormErrorList(*dialog));
205 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
206 } else if (name == "ert") {
207 dialog->setController(new ControlERT(*dialog));
208 dialog->setView(new FormERT(*dialog));
209 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
210 } else if (name == "external") {
211 dialog->setController(new ControlExternal(*dialog));
212 dialog->setView(new FormExternal(*dialog));
213 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
214 } else if (name == "file") {
215 dialog->setController(new ControlShowFile(*dialog));
216 dialog->setView(new FormShowFile(*dialog));
217 dialog->bc().bp(new OkCancelPolicy);
218 } else if (name == "findreplace") {
219 dialog->setController(new ControlSearch(*dialog));
220 dialog->setView(new FormSearch(*dialog));
221 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
222 } else if (name == "float") {
223 dialog->setController(new ControlFloat(*dialog));
224 dialog->setView(new FormFloat(*dialog));
225 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
226 } else if (name == "graphics") {
227 dialog->setController(new ControlGraphics(*dialog));
228 dialog->setView(new FormGraphics(*dialog));
229 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
230 } else if (name == "include") {
231 dialog->setController(new ControlInclude(*dialog));
232 dialog->setView(new FormInclude(*dialog));
233 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
234 } else if (name == "index") {
235 dialog->setController(new ControlCommand(*dialog, name));
236 dialog->setView(new FormText(*dialog,
237 _("Index"), _("Keyword:|#K")));
238 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
239 } else if (name == "label") {
240 dialog->setController(new ControlCommand(*dialog, name));
241 dialog->setView(new FormText(*dialog,
242 _("Label"), _("Label:|#L")));
243 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
244 } else if (name == "log") {
245 dialog->setController(new ControlLog(*dialog));
246 dialog->setView(new FormLog(*dialog));
247 dialog->bc().bp(new OkCancelPolicy);
249 } else if (name == "mathpanel") {
250 dialog->setController(new ControlMath(*dialog));
251 dialog->setView(new FormMathsPanel(*dialog));
252 dialog->bc().bp(new IgnorantPolicy);
254 } else if (name == "mathaccents") {
255 FormMathsBitmap * bitmap =
256 createFormBitmap(*dialog, _("Maths Decorations & Accents"),
257 latex_deco, nr_latex_deco);
259 BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
261 BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
263 dialog->setController(new ControlMath(*dialog));
264 dialog->setView(bitmap);
265 dialog->bc().bp(new IgnorantPolicy);
267 } else if (name == "matharrows") {
268 FormMathsBitmap * bitmap =
269 createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
271 BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
273 BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
275 BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
277 dialog->setController(new ControlMath(*dialog));
278 dialog->setView(bitmap);
279 dialog->bc().bp(new IgnorantPolicy);
281 } else if (name == "mathoperators") {
282 FormMathsBitmap * bitmap =
283 createFormBitmap(*dialog, _("Binary Ops"),
284 latex_bop, nr_latex_bop);
286 BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
288 dialog->setController(new ControlMath(*dialog));
289 dialog->setView(bitmap);
290 dialog->bc().bp(new IgnorantPolicy);
292 } else if (name == "mathrelations") {
293 FormMathsBitmap * bitmap =
294 createFormBitmap(*dialog, _("Binary Relations"),
295 latex_brel, nr_latex_brel);
297 BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
299 dialog->setController(new ControlMath(*dialog));
300 dialog->setView(bitmap);
301 dialog->bc().bp(new IgnorantPolicy);
303 } else if (name == "mathgreek") {
304 FormMathsBitmap * bitmap =
305 createFormBitmap(*dialog, _("Greek"),
306 latex_greek, nr_latex_greek);
308 BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
310 BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
312 dialog->setController(new ControlMath(*dialog));
313 dialog->setView(bitmap);
314 dialog->bc().bp(new IgnorantPolicy);
316 } else if (name == "mathmisc") {
317 FormMathsBitmap * bitmap =
318 createFormBitmap(*dialog, _("Misc"),
319 latex_misc, nr_latex_misc);
321 BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
323 BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
325 BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
327 BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
329 dialog->setController(new ControlMath(*dialog));
330 dialog->setView(bitmap);
331 dialog->bc().bp(new IgnorantPolicy);
333 } else if (name == "mathdots") {
334 FormMathsBitmap * bitmap =
335 createFormBitmap(*dialog, _("Dots"),
336 latex_dots, nr_latex_dots);
338 BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
340 dialog->setController(new ControlMath(*dialog));
341 dialog->setView(bitmap);
342 dialog->bc().bp(new IgnorantPolicy);
344 } else if (name == "mathbigoperators") {
345 FormMathsBitmap * bitmap =
346 createFormBitmap(*dialog, _("Big Operators"),
347 latex_varsz, nr_latex_varsz);
349 BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
351 dialog->setController(new ControlMath(*dialog));
352 dialog->setView(bitmap);
353 dialog->bc().bp(new IgnorantPolicy);
355 } else if (name == "mathamsmisc") {
356 FormMathsBitmap * bitmap =
357 createFormBitmap(*dialog, _("AMS Misc"),
358 latex_ams_misc, nr_latex_ams_misc);
360 BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
362 BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
364 dialog->setController(new ControlMath(*dialog));
365 dialog->setView(bitmap);
366 dialog->bc().bp(new IgnorantPolicy);
368 } else if (name == "mathamsarrows") {
369 FormMathsBitmap * bitmap =
370 createFormBitmap(*dialog, _("AMS Arrows"),
371 latex_ams_arrows, nr_latex_ams_arrows);
373 BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
375 BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
377 dialog->setController(new ControlMath(*dialog));
378 dialog->setView(bitmap);
379 dialog->bc().bp(new IgnorantPolicy);
381 } else if (name == "mathamsrelations") {
382 FormMathsBitmap * bitmap =
383 createFormBitmap(*dialog, _("AMS Relations"),
384 latex_ams_rel, nr_latex_ams_rel);
386 BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
388 dialog->setController(new ControlMath(*dialog));
389 dialog->setView(bitmap);
390 dialog->bc().bp(new IgnorantPolicy);
392 } else if (name == "mathamsnegatedrelations") {
393 FormMathsBitmap * bitmap =
394 createFormBitmap(*dialog, _("AMS Negated Rel"),
395 latex_ams_nrel, nr_latex_ams_nrel);
397 BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
399 dialog->setController(new ControlMath(*dialog));
400 dialog->setView(bitmap);
401 dialog->bc().bp(new IgnorantPolicy);
403 } else if (name == "mathamsoperators") {
404 FormMathsBitmap * bitmap =
405 createFormBitmap(*dialog, _("AMS Operators"),
406 latex_ams_ops, nr_latex_ams_ops);
408 BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
410 dialog->setController(new ControlMath(*dialog));
411 dialog->setView(bitmap);
412 dialog->bc().bp(new IgnorantPolicy);
414 } else if (name == "mathdelimiter") {
415 dialog->setController(new ControlMath(*dialog));
416 dialog->setView(new FormMathsDelim(*dialog));
417 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
418 } else if (name == "mathmatrix") {
419 dialog->setController(new ControlMath(*dialog));
420 dialog->setView(new FormMathsMatrix(*dialog));
421 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
422 } else if (name == "mathspace") {
423 dialog->setController(new ControlMath(*dialog));
424 dialog->setView(new FormMathsSpace(*dialog));
425 dialog->bc().bp(new IgnorantPolicy);
426 } else if (name == "mathstyle") {
427 dialog->setController(new ControlMath(*dialog));
428 dialog->setView(new FormMathsStyle(*dialog));
429 dialog->bc().bp(new IgnorantPolicy);
430 } else if (name == "note") {
431 dialog->setController(new ControlNote(*dialog));
432 dialog->setView(new FormNote(*dialog));
433 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
434 } else if (name == "paragraph") {
435 dialog->setController(new ControlParagraph(*dialog));
436 dialog->setView(new FormParagraph(*dialog));
437 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
438 } else if (name == "print") {
439 dialog->setController(new ControlPrint(*dialog));
440 dialog->setView(new FormPrint(*dialog));
441 dialog->bc().bp(new OkApplyCancelPolicy);
442 } else if (name == "ref") {
443 dialog->setController(new ControlRef(*dialog));
444 dialog->setView(new FormRef(*dialog));
445 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
446 } else if (name == "sendto") {
447 dialog->setController(new ControlSendto(*dialog));
448 dialog->setView(new FormSendto(*dialog));
449 dialog->bc().bp(new OkApplyCancelPolicy);
450 } else if (name == "tabular") {
451 dialog->setController(new ControlTabular(*dialog));
452 dialog->setView(new FormTabular(*dialog));
453 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
454 } else if (name == "tabularcreate") {
455 dialog->setController(new ControlTabularCreate(*dialog));
456 dialog->setView(new FormTabularCreate(*dialog));
457 dialog->bc().bp(new IgnorantPolicy);
458 } else if (name == "texinfo") {
459 dialog->setController(new ControlTexinfo(*dialog));
460 dialog->setView(new FormTexinfo(*dialog));
461 dialog->bc().bp(new OkCancelPolicy);
462 #ifdef HAVE_LIBAIKSAURUS
463 } else if (name == "thesaurus") {
464 dialog->setController(new ControlThesaurus(*dialog));
465 dialog->setView(new FormThesaurus(*dialog));
466 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
468 } else if (name == "toc") {
469 dialog->setController(new ControlToc(*dialog));
470 dialog->setView(new FormToc(*dialog));
471 dialog->bc().bp(new OkCancelPolicy);
472 } else if (name == "url") {
473 dialog->setController(new ControlCommand(*dialog, name));
474 dialog->setView(new FormUrl(*dialog));
475 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
476 } else if (name == "vspace") {
477 dialog->setController(new ControlVSpace(*dialog));
478 dialog->setView(new FormVSpace(*dialog));
479 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
480 } else if (name == "wrap") {
481 dialog->setController(new ControlWrap(*dialog));
482 dialog->setView(new FormWrap(*dialog));
483 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
490 void Dialogs::toggleTooltips()
492 Tooltips::toggleEnabled();
496 /// Are the tooltips on or off?
497 bool Dialogs::tooltipsEnabled()
499 return Tooltips::enabled();