]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/ButtonController.h
New ButtonPolicy for dialogs with an auto-apply option.
[lyx.git] / src / frontends / qt4 / ButtonController.h
1 // -*- C++ -*-
2 /**
3  * \file ButtonController.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Allan Rae
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #ifndef BUTTONCONTROLLER_H
13 #define BUTTONCONTROLLER_H
14
15 #include "ButtonPolicy.h"
16
17 class QWidget;
18 class QPushButton;
19 class QLineEdit;
20 class QCheckBox;
21
22 namespace lyx {
23 namespace frontend {
24
25 /** General purpose button controller for up to four buttons.
26     Controls the activation of the OK, Apply and Cancel buttons.
27     Actually supports 4 buttons in all and it's up to the user to decide on
28     the activation policy and which buttons correspond to which output of the
29     state machine.
30 */
31
32
33 /** \c ButtonController controls the activation of the OK, Apply and
34  *  Cancel buttons.
35  *
36  * It actually supports 4 buttons in all and it's up to the user to decide on
37  * the activation policy and which buttons correspond to which output of the
38  * state machine.
39  */
40
41 class ButtonController
42 {
43 public:
44         ButtonController();
45         ~ButtonController();
46
47         //@{
48         /** Methods to set and get the ButtonPolicy.
49          *  \param ptr is owned by the ButtonController.
50          */
51         void setPolicy(ButtonPolicy::Policy policy);
52         ButtonPolicy const & policy() const;
53         ButtonPolicy & policy();
54         //@}
55
56         ///
57         void input(ButtonPolicy::SMInput);
58
59         //@{
60         /// Tell the BC that a particular button has been pressed.
61         void ok();
62         void apply();
63         void cancel();
64         void restore();
65         void autoApply();
66         //@}
67
68         /// Tell the BC that the dialog is being hidden
69         void hide();
70
71         /**Refresh the activation state of the Ok, Apply, Close and
72          * Restore buttons.
73          */
74         void refresh() const;
75
76         /** Refresh the activation state of all the widgets under the control
77          *  of the BC to reflect the read-only status of the underlying buffer.
78          */
79         void refreshReadOnly() const;
80
81         /** Passthrough function -- returns its input value
82          *  Tell the BC about the read-only status of the underlying buffer.
83          */
84         bool setReadOnly(bool);
85
86         /** \param validity Tell the BC that the data is, or is not, valid.
87          *  Sets the activation state of the buttons immediately.
88          */
89         void setValid(bool);
90
91         //
92         // View
93         //
94
95         //@{
96         /** Store pointers to these widgets.
97          */
98         void setOK(QPushButton * obj);
99         void setApply(QPushButton * obj);
100         void setCancel(QPushButton * obj);
101         void setRestore(QPushButton * obj);
102         void setAutoApply(QCheckBox * obj);
103         //@}
104
105         /** Add a pointer to the list of widgets whose activation
106          *  state is dependent upon the read-only status of the
107          *  underlying buffer.
108          */
109         void addReadOnly(QWidget * obj);
110
111         /** Add a widget to the list of all widgets whose validity should
112          *  be checked explicitly when the buttons are refreshed.
113          */
114         void addCheckedLineEdit(QLineEdit * input, QWidget * label = 0);
115
116 private:
117         /// noncopyable
118         ButtonController(ButtonController const &);
119         void operator=(ButtonController const &);
120         
121         /// pimpl
122         class Private;
123         Private * d;
124 };
125
126 } // namespace frontend
127 } // namespace lyx
128
129 #endif // BUTTONCONTROLLER_H