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