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