]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/ButtonController.h
Support for command argument placement after the workarea argument
[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         void setPolicy(ButtonPolicy::Policy policy);
50         ButtonPolicy const & policy() const;
51         ButtonPolicy & policy();
52         //@}
53
54         ///
55         void input(ButtonPolicy::SMInput);
56
57         //@{
58         /// Tell the BC that a particular button has been pressed.
59         void ok();
60         void apply();
61         void cancel();
62         void restore();
63         void autoApply();
64         //@}
65
66         /// Tell the BC that the dialog is being hidden
67         void hide();
68
69         /**Refresh the activation state of the Ok, Apply, Close and
70          * Restore buttons.
71          */
72         void refresh() const;
73
74         /** Refresh the activation state of all the widgets under the control
75          *  of the BC to reflect the read-only status of the underlying buffer.
76          */
77         void refreshReadOnly() const;
78
79         /** Passthrough function -- returns its input value
80          *  Tell the BC about the read-only status of the underlying buffer.
81          */
82         bool setReadOnly(bool);
83
84         /**
85          *  Sets the activation state of the buttons immediately.
86          * \param validity Tell the BC that the data is, or is not, valid.
87          */
88         void setValid(bool);
89
90         //
91         // View
92         //
93
94         //@{
95         /// Store pointers to these widgets.
96         void setOK(QPushButton * obj);
97         void setApply(QPushButton * obj);
98         void setCancel(QPushButton * obj);
99         void setRestore(QPushButton * obj);
100         void setAutoApply(QCheckBox * obj);
101         //@}
102
103         /** Add a pointer to the list of widgets whose activation
104          *  state is dependent upon the read-only status of the
105          *  underlying buffer.
106          */
107         void addReadOnly(QWidget * obj);
108
109         /** Add a widget to the list of all widgets whose validity should
110          *  be checked explicitly when the buttons are refreshed.
111          */
112         void addCheckedLineEdit(QLineEdit * input, QWidget * label = 0);
113
114 private:
115         /// noncopyable
116         ButtonController(ButtonController const &);
117         void operator=(ButtonController const &);
118         
119         /// pimpl
120         class Private;
121         Private * d;
122 };
123
124 } // namespace frontend
125 } // namespace lyx
126
127 #endif // BUTTONCONTROLLER_H