]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/Dialogs.C
Remove old splash dialog(s).
[lyx.git] / src / frontends / xforms / Dialogs.C
1 /* This file is part of
2  * ======================================================
3  *
4  *           LyX, The Document Processor
5  *
6  *           Copyright 1995 Matthias Ettrich
7  *           Copyright 1995-2001 The LyX Team.
8  *
9  * ======================================================
10  */
11
12 #include <config.h>
13
14 #ifdef __GNUG__
15 #pragma implementation
16 #endif
17
18 #include "Dialogs.h"
19 #include "BufferView.h"
20
21 #include "xformsBC.h"
22
23 #include "ControlAboutlyx.h"
24 #include "ControlBibitem.h"
25 #include "ControlBibtex.h"
26 #include "ControlCharacter.h"
27 #include "ControlCitation.h"
28 #include "ControlError.h"
29 #include "ControlERT.h"
30 #include "ControlExternal.h"
31 #include "ControlFloat.h"
32 #include "ControlGraphics.h"
33 #include "insets/insetgraphicsParams.h"
34 #include "ControlInclude.h"
35 #include "ControlIndex.h"
36 #include "ControlLog.h"
37 #include "ControlMinipage.h"
38 #include "ControlPreamble.h"
39 #include "ControlPrint.h"
40 #include "ControlRef.h"
41 #include "ControlSearch.h"
42 #include "ControlSpellchecker.h"
43 #include "ControlTabularCreate.h"
44 #include "ControlThesaurus.h"
45 #include "ControlToc.h"
46 #include "ControlUrl.h"
47 #include "ControlVCLog.h"
48
49 #include "GUI.h"
50
51 #include "combox.h"       // needed for clean destruction of boost::scoped_ptr
52 #include "form_aboutlyx.h"
53 #include "form_bibitem.h"
54 #include "form_bibtex.h"
55 #include "form_browser.h"
56 #include "form_character.h"
57 #include "form_citation.h"
58 #include "form_error.h"
59 #include "form_ert.h"
60 #include "form_external.h"
61 #include "form_float.h"
62 #include "form_graphics.h"
63 #include "form_include.h"
64 #include "form_index.h"
65 #include "form_minipage.h"
66 #include "form_preamble.h"
67 #include "form_print.h"
68 #include "form_ref.h"
69 #include "form_search.h"
70 #include "form_spellchecker.h"
71 #include "form_tabular_create.h"
72 #include "form_thesaurus.h"
73 #include "form_toc.h"
74 #include "form_url.h"
75
76 #include "FormAboutlyx.h"
77 #include "FormBibitem.h"
78 #include "FormBibtex.h"
79 #include "FormCharacter.h"
80 #include "FormCitation.h"
81 #include "FormError.h"
82 #include "FormERT.h"
83 #include "FormExternal.h"
84 #include "FormFloat.h"
85 #include "FormGraphics.h"
86 #include "FormInclude.h"
87 #include "FormIndex.h"
88 #include "FormLog.h"
89 #include "FormMinipage.h"
90 #include "FormPreamble.h"
91 #include "FormPrint.h"
92 #include "FormRef.h"
93 #include "FormSearch.h"
94 #include "FormSpellchecker.h"
95 #include "FormTabularCreate.h"
96 #include "FormThesaurus.h" 
97 #include "FormToc.h"
98 #include "FormUrl.h"
99 #include "FormVCLog.h"
100
101 #include "FormDocument.h"
102 #include "FormMathsPanel.h"
103 #include "FormParagraph.h"
104 #include "FormPreferences.h"
105 #include "FormTabular.h"
106
107 // Signal enabling all visible dialogs to be redrawn if so desired.
108 // E.g., when the GUI colours have been remapped.
109 SigC::Signal0<void> Dialogs::redrawGUI;
110
111 Dialogs::Dialogs(LyXView * lv)
112 {
113         add(new GUIAboutlyx<FormAboutlyx, xformsBC>(*lv, *this));
114         add(new GUIBibitem<FormBibitem, xformsBC>(*lv, *this));
115         add(new GUIBibtex<FormBibtex, xformsBC>(*lv, *this));
116         add(new GUICharacter<FormCharacter, xformsBC>(*lv, *this));
117         add(new GUICitation<FormCitation, xformsBC>(*lv, *this));
118         add(new GUIError<FormError, xformsBC>(*lv, *this));
119         add(new GUIERT<FormERT, xformsBC>(*lv, *this));
120         add(new GUIExternal<FormExternal, xformsBC>(*lv, *this));
121         add(new GUIGraphics<FormGraphics, xformsBC>(*lv, *this));
122         add(new GUIInclude<FormInclude, xformsBC>(*lv, *this));
123         add(new GUIIndex<FormIndex, xformsBC>(*lv, *this));
124         add(new GUILog<FormLog, xformsBC>(*lv, *this));
125         add(new GUIMinipage<FormMinipage, xformsBC>(*lv, *this));
126         add(new GUIFloat<FormFloat, xformsBC>(*lv, *this));
127         add(new GUIPreamble<FormPreamble, xformsBC>(*lv, *this));
128         add(new GUIPrint<FormPrint, xformsBC>(*lv, *this));
129         add(new GUIRef<FormRef, xformsBC>(*lv, *this));
130         add(new GUISearch<FormSearch, xformsBC>(*lv, *this));
131         add(new GUISpellchecker<FormSpellchecker, xformsBC>(*lv, *this));
132         add(new GUITabularCreate<FormTabularCreate, xformsBC>(*lv, *this));
133 #ifdef HAVE_LIBAIKSAURUS
134         add(new GUIThesaurus<FormThesaurus, xformsBC>(*lv, *this));
135 #endif
136         add(new GUIToc<FormToc, xformsBC>(*lv, *this));
137         add(new GUIUrl<FormUrl, xformsBC>(*lv, *this));
138         add(new GUIVCLog<FormVCLog, xformsBC>(*lv, *this));
139
140         add(new FormDocument(lv, this));
141         add(new FormMathsPanel(lv, this));
142         add(new FormParagraph(lv, this));
143         add(new FormPreferences(lv, this));
144         add(new FormTabular(lv, this));
145         
146         // reduce the number of connections needed in
147         // dialogs by a simple connection here.
148         hideAll.connect(hideBufferDependent.slot());
149 }
150
151 /*****************************************************************************
152
153 Q.  WHY does Dialogs::Dialogs pass `this' to dialog constructors?
154
155 A.  To avoid a segfault.
156     The dialog constructors need to connect to their
157     respective showSomeDialog signal(*) but in order to do
158     that they need to get the address of the Dialogs instance
159     from LyXView::getDialogs().  However, since the Dialogs
160     instance is still being constructed at that time
161     LyXView::getDialogs() will *not* return the correct
162     address because it hasn't finished being constructed.
163     A Catch-22 situation (or is that the chicken and the egg...).
164     So to get around the problem we pass the address of
165     the newly created Dialogs instance using `this'.
166
167 (*) -- I'm using signals exclusively to guarantee that the gui code
168        remains hidden from the rest of the system.  In fact the only 
169        header related to dialogs that anything in the non-gui-specific
170        code gets to see is Dialogs.h!  Even Dialogs.h doesn't know what a 
171        FormCopyright class looks like or that its even going to be used!
172
173        No other gui dialog headers are seen outside of the gui-specific
174        directories!  This ensures that the gui is completely separate from
175        the rest of LyX.  All this through the use of a few simple signals.
176        BUT, the price is that during construction we need to connect the
177        implementations show() method to the showSomeDialog signal and this
178        requires that we have an instance of Dialogs and the problem mentioned
179        above.
180
181        Almost all other dialogs should be able to operate using the same style
182        of signalling used for Copyright.  Exceptions should be handled
183        by adding a specific show or update signal.  For example, spellchecker
184        needs to set the next suspect word and its options/replacements so we
185        need a:
186                  Signal0<void> updateSpellChecker;
187
188        Since we would have to have a
189                  Signal0<void> showSpellChecker;
190
191        in order to just see the spellchecker and let the user push the [Start]
192        button then the updateSpellChecker signal will make the SpellChecker
193        dialog get the new word and replacements list from LyX.  If you really,
194        really wanted to you could define a signal that would pass the new
195        word and replacements:
196                  Signal2<void, string, vector<string> > updateSpellChecker;
197
198        (or something similar) but, why bother when the spellchecker can get
199        it anyway with a LyXFunc call or two.  Besides if someone extends
200        what a dialog does then they also have to change code in the rest of 
201        LyX to pass more parameters or get the extra info via a function 
202        call anyway.  Thus reducing the independence of the two code bases.
203
204        We don't need a separate update signal for each dialog because most of 
205        them will be changed only when the buffer is changed (either by closing
206        the current open buffer or switching to another buffer in the current
207        LyXView -- different BufferView same LyXView or same BufferView same
208        LyXView).
209
210        So we minimise signals but maximise independence and programming 
211        simplicity, understandability and maintainability.  It's also
212        extremely easy to add support for Qt or gtk-- because they use
213        signals already. Guis that use callbacks, like xforms, must have their
214        code wrapped up like that in the form_copyright.[Ch] which is awkward
215        but will at least allow multiple instances of the same dialog.
216
217        LyXFuncs will be used for requesting/setting LyX internal info.  This
218        will ensure that scripts or LyXServer-connected applications can all
219        have access to the same calls as the internal user-interface.
220
221 ******************************************************************************/