]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/FormDialogView.h
remove defaults stuff, let Qt handle no toolbar
[lyx.git] / src / frontends / xforms / FormDialogView.h
1 // -*- C++ -*-
2 /**
3  * \file FormDialogView.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Angus Leeming
8  *
9  * Full author contact details are available in file CREDITS
10  */
11
12 /* A base class for the MCV-ed xforms dialogs.
13  */
14
15 #ifndef FORMDIALOGVIEW_H
16 #define FORMDIALOGVIEW_H
17
18
19 #include "Dialog.h"
20 #include "ButtonPolicies.h"
21 #include "forms_fwd.h"
22
23 #include "LString.h"
24 #include <boost/scoped_ptr.hpp>
25 #include <X11/Xlib.h> // for Pixmap
26
27 class xformsBC;
28 class Tooltips;
29
30
31 /** This class is an XForms GUI base class.
32  */
33 class FormDialogView : public Dialog::View {
34 public:
35         ///
36         FormDialogView(Dialog &, string const &, bool allowResize);
37         ///
38         virtual ~FormDialogView();
39
40         /** Input callback function.
41          *  Invoked only by the xforms callback interface
42          */
43         void InputCB(FL_OBJECT *, long);
44
45         /** Message callback function.
46          *  Invoked only by the xforms callback interface
47          */
48         void MessageCB(FL_OBJECT *, int event);
49
50         /** Prehandler callback function.
51          *  Invoked only by the xforms callback interface
52          */
53         void PrehandlerCB(FL_OBJECT * ob, int event, int key);
54
55         ///
56         Tooltips & tooltips();
57
58 protected:
59         /// Build the dialog
60         virtual void build() = 0;
61         /// Hide the dialog.
62         virtual void hide();
63         /// Create the dialog if necessary, update it and display it.
64         virtual void show();
65         ///
66         virtual bool isVisible() const;
67
68         /** Prepare the way to:
69          *  1. display feedback as the mouse moves over ob. This feedback will
70          *  typically be rather more verbose than just a tooltip.
71          *  2. activate the button controller after a paste with the middle
72          *  mouse button.
73          */
74         static void setPrehandler(FL_OBJECT * ob);
75
76         /** Pass the class a pointer to the message_widget so that it can
77             post the message */
78         void setMessageWidget(FL_OBJECT * message_widget);
79
80         /** Send the warning message from the daughter class to the
81             message_widget direct. The message will persist till the mouse
82             movesto a new object. */
83         void postWarning(string const & warning);
84         /// Reset the message_widget_
85         void clearMessage();
86
87         ///
88         xformsBC & bcview();
89
90 private:
91         /// Pointer to the actual instantiation of xform's form
92         virtual FL_FORM * form() const = 0;
93         /// Filter the inputs on callback from xforms
94         virtual ButtonPolicy::SMInput input(FL_OBJECT *, long);
95
96         /** Redraw the form (on receipt of a Signal indicating, for example,
97          *  that the xform colors have been re-mapped).
98          */
99         virtual void redraw();
100
101         /** Called on the first show() request, initialising various bits and
102          *  pieces.
103          */
104         void prepare_to_show();
105
106         /** Get the feedback message for ob.
107             Called if warning_posted_ == false. */
108         virtual string const getFeedback(FL_OBJECT * /* ob */)
109                 { return string(); }
110
111         /// Post the feedback message for ob to message_widget_
112         void postMessage(string const & message);
113
114         /** Variable used to decide whether to remove the existing feedback
115             message or not (if it is in fact a warning) */
116         bool warning_posted_;
117         /// The widget to display the feedback
118         FL_OBJECT * message_widget_;
119
120         /// The dialog's minimum allowable dimensions.
121         int minw_;
122         ///
123         int minh_;
124         /// Can the dialog be resized after it has been created?
125         bool allow_resize_;
126         /// dialog title, displayed by the window manager.
127         string title_;
128         /// Passed to the window manager to give a pretty little symbol ;-)
129         Pixmap icon_pixmap_;
130         ///
131         Pixmap icon_mask_;
132         ///
133         Tooltips * tooltips_;
134 };
135
136
137 template <class FL_dialog>
138 class FormView: public FormDialogView {
139 protected:
140         ///
141         FormView(Dialog &, string const &, bool allowResize=true);
142         /// Pointer to the actual instantiation of xform's form
143         virtual FL_FORM * form() const;
144         /// Real GUI implementation.
145         boost::scoped_ptr<FL_dialog> dialog_;
146 };
147
148
149 template <class FL_dialog>
150 FormView<FL_dialog>::FormView(Dialog & parent, string const & t,
151                               bool allowResize)
152         : FormDialogView(parent, t, allowResize)
153 {}
154
155
156 template <class FL_dialog>
157 FL_FORM * FormView<FL_dialog>::form() const
158 {
159         return dialog_.get() ? dialog_->form : 0;
160 }
161
162
163 template <class Controller, class Base>
164 class FormController: public Base {
165 public:
166         /// The parent controller
167         Controller & controller();
168         ///
169         Controller const & controller() const;
170
171 protected:
172         ///
173         FormController(Dialog &, string const &, bool allowResize = true);
174 };
175
176
177 template <class Controller, class Base>
178 FormController<Controller, Base>::FormController(Dialog & p,
179                                                  string const & t, bool resize)
180         : Base(p, t, resize)
181 {}
182
183
184 template <class Controller, class Base>
185 Controller & FormController<Controller, Base>::controller()
186 {
187         return static_cast<Controller &>(getController());
188 }
189
190
191 template <class Controller, class Base>
192 Controller const & FormController<Controller, Base>::controller() const
193 {
194         return static_cast<Controller const &>(getController());
195 }
196
197
198 #endif // FORMDIALOGVIEW_H