]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/Dialogs.C
Move the document dialog over to the Dialog-based scheme.
[lyx.git] / src / frontends / gtk / Dialogs.C
1 /**
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.
5  *
6  * \author Angus Leeming
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "Dialogs.h"
14 #include "Dialog.h"
15
16 #include "Tooltips.h"
17
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 "ControlPrint.h"
38 #include "ControlRef.h"
39 #include "ControlSearch.h"
40 #include "ControlSendto.h"
41 #include "ControlShowFile.h"
42 #include "ControlTabular.h"
43 #include "ControlTabularCreate.h"
44 #include "ControlTexinfo.h"
45 #include "ControlToc.h"
46 #include "ControlVSpace.h"
47 #include "ControlWrap.h"
48
49 #include "GAboutlyx.h"
50 #include "GText.h"
51 #include "GMathDelim.h"
52 #include "FormBibitem.h"
53 #include "FormBibtex.h"
54 #include "FormBox.h"
55 #include "FormBranch.h"
56 #include "FormChanges.h"
57 #include "FormCharacter.h"
58 #include "FormCitation.h"
59 #include "FormDocument.h"
60 #include "FormErrorList.h"
61 #include "FormERT.h"
62 #include "FormExternal.h"
63 #include "FormFloat.h"
64 #include "FormGraphics.h"
65 #include "FormInclude.h"
66 #include "FormLog.h"
67 #include "GMathPanel.h"
68 #include "FormMathsBitmap.h"
69 #include "FormMathsMatrix.h"
70 #include "FormMathsSpace.h"
71 #include "FormMathsStyle.h"
72 #include "FormNote.h"
73 #include "FormParagraph.h"
74 #include "FormPrint.h"
75 #include "FormRef.h"
76 #include "FormSearch.h"
77 #include "FormSendto.h"
78 #include "FormTabular.h"
79 #include "FormTexinfo.h"
80 #include "FormShowFile.h"
81 #include "GTableCreate.h"
82 #include "FormToc.h"
83 #include "GUrl.h"
84 #include "FormVSpace.h"
85 #include "FormWrap.h"
86
87 #ifdef HAVE_LIBAIKSAURUS
88 #include "ControlThesaurus.h"
89 #include "FormThesaurus.h"
90 #endif
91
92 #include "xformsBC.h"
93 #include "ButtonController.h"
94
95 #include "arrows.xbm"
96 #include "bop.xbm"
97 #include "brel.xbm"
98 #include "deco.xbm"
99 #include "dots.xbm"
100 #include "greek.xbm"
101 #include "misc.xbm"
102 #include "varsz.xbm"
103
104 #include "ams_misc.xbm"
105 #include "ams_arrows.xbm"
106 #include "ams_rel.xbm"
107 #include "ams_nrel.xbm"
108 #include "ams_ops.xbm"
109
110 #include <vector>
111
112 using std::string;
113
114
115 namespace {
116
117 FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
118                                    char const * const * data, int size)
119 {
120         char const * const * const end = data + size;
121         return new FormMathsBitmap(parent, title, std::vector<string>(data, end));
122 }
123
124
125 char const * const dialognames[] = {
126 "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
127 "citation", "document", "error", "errorlist" , "ert", "external", "file",
128 "findreplace", "float", "graphics", "include", "index", "label", "log",
129 "mathpanel", "mathaccents", "matharrows", "mathoperators", "mathrelations",
130 "mathgreek", "mathmisc", "mathdots", "mathbigoperators", "mathamsmisc",
131 "mathamsarrows", "mathamsrelations", "mathamsnegatedrelations",
132 "mathamsoperators", "mathdelimiter", "mathmatrix", "mathspace", "mathstyle",
133 "box", "note", "paragraph", "print", "ref", "sendto", "tabular", "tabularcreate",
134
135 #ifdef HAVE_LIBAIKSAURUS
136 "thesaurus",
137 #endif
138
139 "texinfo", "toc", "url", "vspace", "wrap" };
140
141 char const * const * const end_dialognames =
142         dialognames + (sizeof(dialognames) / sizeof(char *));
143
144 struct cmpCStr {
145         cmpCStr(char const * name) : name_(name) {}
146         bool operator()(char const * other) {
147                 return strcmp(other, name_) == 0;
148         }
149 private:
150         char const * name_;
151 };
152
153 } // namespace anon
154
155
156 bool Dialogs::isValidName(string const & name) const
157 {
158         return std::find_if(dialognames, end_dialognames,
159                             cmpCStr(name.c_str())) != end_dialognames;
160 }
161
162
163 Dialog * Dialogs::build(string const & name)
164 {
165         if (!isValidName(name))
166                 return 0;
167
168         Dialog * dialog = new Dialog(lyxview_, name);
169         dialog->bc().view(new xformsBC(dialog->bc()));
170
171         if (name == "aboutlyx") {
172                 dialog->bc().view(new GBC(dialog->bc()));
173                 dialog->setController(new ControlAboutlyx(*dialog));
174                 dialog->setView(new GAboutlyx(*dialog));
175                 dialog->bc().bp(new OkCancelPolicy);
176         } else if (name == "bibitem") {
177                 dialog->setController(new ControlCommand(*dialog, name));
178                 dialog->setView(new FormBibitem(*dialog));
179                 dialog->bc().bp(new OkCancelReadOnlyPolicy);
180         } else if (name == "bibtex") {
181                 dialog->setController(new ControlBibtex(*dialog));
182                 dialog->setView(new FormBibtex(*dialog));
183                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
184         } else if (name == "box") {
185                 dialog->setController(new ControlBox(*dialog));
186                 dialog->setView(new FormBox(*dialog));
187                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
188         } else if (name == "character") {
189                 dialog->setController(new ControlCharacter(*dialog));
190                 dialog->setView(new FormCharacter(*dialog));
191                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
192         } else if (name == "changes") {
193                 dialog->setController(new ControlChanges(*dialog));
194                 dialog->setView(new FormChanges(*dialog));
195                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
196         } else if (name == "citation") {
197                 dialog->setController(new ControlCitation(*dialog));
198                 dialog->setView(new FormCitation(*dialog));
199                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
200         } else if (name == "document") {
201                 dialog->setController(new ControlDocument(*dialog));
202                 dialog->setView(new FormDocument(*dialog));
203                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
204         } else if (name == "errorlist") {
205                 dialog->setController(new ControlErrorList(*dialog));
206                 dialog->setView(new FormErrorList(*dialog));
207                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
208         } else if (name == "ert") {
209                 dialog->setController(new ControlERT(*dialog));
210                 dialog->setView(new FormERT(*dialog));
211                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
212         } else if (name == "external") {
213                 dialog->setController(new ControlExternal(*dialog));
214                 dialog->setView(new FormExternal(*dialog));
215                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
216         } else if (name == "file") {
217                 dialog->setController(new ControlShowFile(*dialog));
218                 dialog->setView(new FormShowFile(*dialog));
219                 dialog->bc().bp(new OkCancelPolicy);
220         } else if (name == "findreplace") {
221                 dialog->setController(new ControlSearch(*dialog));
222                 dialog->setView(new FormSearch(*dialog));
223                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
224         } else if (name == "float") {
225                 dialog->setController(new ControlFloat(*dialog));
226                 dialog->setView(new FormFloat(*dialog));
227                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
228         } else if (name == "graphics") {
229                 dialog->setController(new ControlGraphics(*dialog));
230                 dialog->setView(new FormGraphics(*dialog));
231                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
232         } else if (name == "include") {
233                 dialog->setController(new ControlInclude(*dialog));
234                 dialog->setView(new FormInclude(*dialog));
235                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
236         } else if (name == "index") {
237                 dialog->bc().view(new GBC(dialog->bc()));
238                 dialog->setController(new ControlCommand(*dialog, name));
239                 dialog->setView(new GText(*dialog,
240                                           _("Index"), _("Keyword:|#K")));
241                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
242         } else if (name == "label") {
243                 dialog->bc().view(new GBC(dialog->bc()));
244                 dialog->setController(new ControlCommand(*dialog, name));
245                 dialog->setView(new GText(*dialog,
246                                           _("Label"), _("Label:|#L")));
247                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
248         } else if (name == "log") {
249                 dialog->setController(new ControlLog(*dialog));
250                 dialog->setView(new FormLog(*dialog));
251                 dialog->bc().bp(new OkCancelPolicy);
252
253         } else if (name == "mathpanel") {
254                 dialog->bc().view(new GBC(dialog->bc()));
255                 dialog->setController(new ControlMath(*dialog));
256                 dialog->setView(new GMathPanel(*dialog));
257                 dialog->bc().bp(new IgnorantPolicy);
258
259         } else if (name == "mathaccents") {
260                 FormMathsBitmap * bitmap =
261                         createFormBitmap(*dialog, _("Maths Decorations & Accents"),
262                                          latex_deco, nr_latex_deco);
263                 bitmap->addBitmap(
264                         BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
265                 bitmap->addBitmap(
266                         BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
267
268                 dialog->setController(new ControlMath(*dialog));
269                 dialog->setView(bitmap);
270                 dialog->bc().bp(new IgnorantPolicy);
271
272         } else if (name == "matharrows") {
273                 FormMathsBitmap * bitmap =
274                         createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
275                 bitmap->addBitmap(
276                         BitmapStore(20, 5, 4, arrow_width,  arrow_height,  arrow_bits, true));
277                 bitmap->addBitmap(
278                         BitmapStore(7,  2, 4, larrow_width, larrow_height, larrow_bits, false));
279                 bitmap->addBitmap(
280                         BitmapStore(4,  2, 2, darrow_width,  darrow_height, darrow_bits, true));
281
282                 dialog->setController(new ControlMath(*dialog));
283                 dialog->setView(bitmap);
284                 dialog->bc().bp(new IgnorantPolicy);
285
286         } else if (name == "mathoperators") {
287                 FormMathsBitmap * bitmap =
288                         createFormBitmap(*dialog, _("Binary Ops"),
289                                          latex_bop, nr_latex_bop);
290                 bitmap->addBitmap(
291                         BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
292
293                 dialog->setController(new ControlMath(*dialog));
294                 dialog->setView(bitmap);
295                 dialog->bc().bp(new IgnorantPolicy);
296
297         } else if (name == "mathrelations") {
298                 FormMathsBitmap * bitmap =
299                         createFormBitmap(*dialog, _("Binary Relations"),
300                                          latex_brel, nr_latex_brel);
301                 bitmap->addBitmap(
302                         BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
303
304                 dialog->setController(new ControlMath(*dialog));
305                 dialog->setView(bitmap);
306                 dialog->bc().bp(new IgnorantPolicy);
307
308         } else if (name == "mathgreek") {
309                 FormMathsBitmap * bitmap =
310                         createFormBitmap(*dialog, _("Greek"),
311                                          latex_greek, nr_latex_greek);
312                 bitmap->addBitmap(
313                         BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
314                 bitmap->addBitmap(
315                         BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
316
317                 dialog->setController(new ControlMath(*dialog));
318                 dialog->setView(bitmap);
319                 dialog->bc().bp(new IgnorantPolicy);
320
321         } else if (name == "mathmisc") {
322                 FormMathsBitmap * bitmap =
323                         createFormBitmap(*dialog, _("Misc"),
324                                          latex_misc, nr_latex_misc);
325                 bitmap->addBitmap(
326                         BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
327                 bitmap->addBitmap(
328                         BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
329                 bitmap->addBitmap(
330                         BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
331                 bitmap->addBitmap(
332                         BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
333
334                 dialog->setController(new ControlMath(*dialog));
335                 dialog->setView(bitmap);
336                 dialog->bc().bp(new IgnorantPolicy);
337
338         } else if (name == "mathdots") {
339                 FormMathsBitmap * bitmap =
340                         createFormBitmap(*dialog, _("Dots"),
341                                          latex_dots, nr_latex_dots);
342                 bitmap->addBitmap(
343                         BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
344
345                 dialog->setController(new ControlMath(*dialog));
346                 dialog->setView(bitmap);
347                 dialog->bc().bp(new IgnorantPolicy);
348
349         } else if (name == "mathbigoperators") {
350                 FormMathsBitmap * bitmap =
351                         createFormBitmap(*dialog, _("Big Operators"),
352                                          latex_varsz, nr_latex_varsz);
353                 bitmap->addBitmap(
354                         BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
355
356                 dialog->setController(new ControlMath(*dialog));
357                 dialog->setView(bitmap);
358                 dialog->bc().bp(new IgnorantPolicy);
359
360         } else if (name == "mathamsmisc") {
361                 FormMathsBitmap * bitmap =
362                         createFormBitmap(*dialog, _("AMS Misc"),
363                                          latex_ams_misc, nr_latex_ams_misc);
364                 bitmap->addBitmap(
365                         BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
366                 bitmap->addBitmap(
367                         BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
368
369                 dialog->setController(new ControlMath(*dialog));
370                 dialog->setView(bitmap);
371                 dialog->bc().bp(new IgnorantPolicy);
372
373         } else if (name == "mathamsarrows") {
374                 FormMathsBitmap * bitmap =
375                         createFormBitmap(*dialog, _("AMS Arrows"),
376                                          latex_ams_arrows, nr_latex_ams_arrows);
377                 bitmap->addBitmap(
378                         BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
379                 bitmap->addBitmap(
380                         BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
381
382                 dialog->setController(new ControlMath(*dialog));
383                 dialog->setView(bitmap);
384                 dialog->bc().bp(new IgnorantPolicy);
385
386         } else if (name == "mathamsrelations") {
387                 FormMathsBitmap * bitmap =
388                         createFormBitmap(*dialog, _("AMS Relations"),
389                                          latex_ams_rel, nr_latex_ams_rel);
390                 bitmap->addBitmap(
391                         BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
392
393                 dialog->setController(new ControlMath(*dialog));
394                 dialog->setView(bitmap);
395                 dialog->bc().bp(new IgnorantPolicy);
396
397         } else if (name == "mathamsnegatedrelations") {
398                 FormMathsBitmap * bitmap =
399                         createFormBitmap(*dialog, _("AMS Negated Rel"),
400                                          latex_ams_nrel, nr_latex_ams_nrel);
401                 bitmap->addBitmap(
402                         BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
403
404                 dialog->setController(new ControlMath(*dialog));
405                 dialog->setView(bitmap);
406                 dialog->bc().bp(new IgnorantPolicy);
407
408         } else if (name == "mathamsoperators") {
409                 FormMathsBitmap * bitmap =
410                         createFormBitmap(*dialog, _("AMS Operators"),
411                                          latex_ams_ops, nr_latex_ams_ops);
412                 bitmap->addBitmap(
413                         BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
414
415                 dialog->setController(new ControlMath(*dialog));
416                 dialog->setView(bitmap);
417                 dialog->bc().bp(new IgnorantPolicy);
418
419         } else if (name == "mathdelimiter") {
420                 dialog->bc().view(new GBC(dialog->bc()));
421                 dialog->setController(new ControlMath(*dialog));
422                 dialog->setView(new GMathDelim(*dialog));
423                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
424         } else if (name == "mathmatrix") {
425                 dialog->setController(new ControlMath(*dialog));
426                 dialog->setView(new FormMathsMatrix(*dialog));
427                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
428         } else if (name == "mathspace") {
429                 dialog->setController(new ControlMath(*dialog));
430                 dialog->setView(new FormMathsSpace(*dialog));
431                 dialog->bc().bp(new IgnorantPolicy);
432         } else if (name == "mathstyle") {
433                 dialog->setController(new ControlMath(*dialog));
434                 dialog->setView(new FormMathsStyle(*dialog));
435                 dialog->bc().bp(new IgnorantPolicy);
436         } else if (name == "note") {
437                 dialog->setController(new ControlNote(*dialog));
438                 dialog->setView(new FormNote(*dialog));
439                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
440         } else if (name == "branch") {
441                 dialog->setController(new ControlBranch(*dialog));
442                 dialog->setView(new FormBranch(*dialog));
443                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
444         } else if (name == "paragraph") {
445                 dialog->setController(new ControlParagraph(*dialog));
446                 dialog->setView(new FormParagraph(*dialog));
447                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
448         } else if (name == "print") {
449                 dialog->setController(new ControlPrint(*dialog));
450                 dialog->setView(new FormPrint(*dialog));
451                 dialog->bc().bp(new OkApplyCancelPolicy);
452         } else if (name == "ref") {
453                 dialog->setController(new ControlRef(*dialog));
454                 dialog->setView(new FormRef(*dialog));
455                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
456         } else if (name == "sendto") {
457                 dialog->setController(new ControlSendto(*dialog));
458                 dialog->setView(new FormSendto(*dialog));
459                 dialog->bc().bp(new OkApplyCancelPolicy);
460         } else if (name == "tabular") {
461                 dialog->setController(new ControlTabular(*dialog));
462                 dialog->setView(new FormTabular(*dialog));
463                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
464         } else if (name == "tabularcreate") {
465                 dialog->bc().view(new GBC(dialog->bc()));
466                 dialog->setController(new ControlTabularCreate(*dialog));
467                 dialog->setView(new GTableCreate(*dialog));
468                 dialog->bc().bp(new IgnorantPolicy);
469         } else if (name == "texinfo") {
470                 dialog->setController(new ControlTexinfo(*dialog));
471                 dialog->setView(new FormTexinfo(*dialog));
472                 dialog->bc().bp(new OkCancelPolicy);
473 #ifdef HAVE_LIBAIKSAURUS
474         } else if (name == "thesaurus") {
475                 dialog->setController(new ControlThesaurus(*dialog));
476                 dialog->setView(new FormThesaurus(*dialog));
477                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
478 #endif
479         } else if (name == "toc") {
480                 dialog->setController(new ControlToc(*dialog));
481                 dialog->setView(new FormToc(*dialog));
482                 dialog->bc().bp(new OkCancelPolicy);
483         } else if (name == "url") {
484                 dialog->bc().view(new GBC(dialog->bc()));
485                 dialog->setController(new ControlCommand(*dialog, name));
486                 dialog->setView(new GUrl(*dialog));
487                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
488         } else if (name == "vspace") {
489                 dialog->setController(new ControlVSpace(*dialog));
490                 dialog->setView(new FormVSpace(*dialog));
491                 dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
492         } else if (name == "wrap") {
493                 dialog->setController(new ControlWrap(*dialog));
494                 dialog->setView(new FormWrap(*dialog));
495                 dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
496         }
497
498         return dialog;
499 }
500
501
502 void Dialogs::toggleTooltips()
503 {
504         Tooltips::toggleEnabled();
505 }
506
507
508 /// Are the tooltips on or off?
509 bool Dialogs::tooltipsEnabled()
510 {
511         return Tooltips::enabled();
512 }