]> git.lyx.org Git - lyx.git/blob - src/frontends/qt/GuiDialog.h
Follow-up for change a66ee4109e - guard Qt 5.4 code with version check
[lyx.git] / src / frontends / qt / GuiDialog.h
1 // -*- C++ -*-
2 /**
3  * \file GuiDialog.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 #ifndef GUIDIALOG_H
13 #define GUIDIALOG_H
14
15 #include "Dialog.h"
16 #include "ButtonController.h"
17
18 #include <QAbstractButton>
19 #include <QDialog>
20
21
22 namespace lyx {
23 namespace frontend {
24
25 /// Base class for historical LyX dialogs.
26 /**
27   * \warning New dialogs should use the leaner classes \c DialogView or
28   * \c DockView depending on the intent. Eventually, old dialogs should be
29   * converted to \c DialogView too.
30   */
31 class GuiDialog : public QDialog, public Dialog
32 {
33         Q_OBJECT
34
35 public:
36         /// \param lv is the access point for the dialog to the LyX kernel.
37         /// \param name is the identifier given to the dialog by its parent
38         /// container.
39         /// \param title is the window title used for decoration.
40         GuiDialog(GuiView & lv, QString const & name, QString const & title);
41
42         QWidget * asQWidget() override { return this; }
43         QWidget const * asQWidget() const override { return this; }
44
45 public Q_SLOTS:
46         /** \name Buttons
47          *  These methods are publicly accessible because they are invoked
48          *  by the View when the user presses... guess what ;-)
49          */
50         // Restore button clicked
51         void slotRestore();
52         // Restore Defaults button clicked
53         virtual void slotRestoreDefaults() {}
54         // OK button clicked
55         void slotOK();
56         // Apply button clicked
57         void slotApply();
58         // AutoApply checkbox clicked
59         void slotAutoApply();
60         // Close button clicked or closed from WindowManager
61         void slotClose();
62         // A collectiong slot for QDialogButtonBox
63         void slotButtonBox(QAbstractButton *);
64         ///
65         void closeEvent(QCloseEvent * e) override;
66
67 protected Q_SLOTS:
68         void onBufferViewChanged() override {}
69
70 public:
71         /** Check whether we may apply our data.
72          *
73          *  The buttons are disabled if not and (re-)enabled if yes.
74          */
75         void setButtonsValid(bool valid);
76
77         // Set whether to stop the apply process
78         void setApplyStopped(bool stop) { apply_stopped_ = stop; };
79
80         /** \name Dialog Components
81          *  Methods to access the various components making up a dialog.
82          */
83         //@{
84         ButtonController const & bc() const { return bc_; }
85         ButtonController & bc() { return bc_; }
86         //@}
87
88         /// the dialog has changed contents
89         virtual void changed();
90
91         void enableView(bool enable) override;
92
93         /// default: do nothing
94         void applyView() override {}
95         /// default: do nothing
96         virtual void updateContents() {}
97
98 public:
99         /// is the dialog currently valid ?
100         virtual bool isValid() { return true; }
101
102 public:
103
104         /** When applying, it's useful to know whether the dialog is about
105          *  to close or not (no point refreshing the display for example).
106          */
107         bool isClosing() const override { return is_closing_; }
108
109         ///
110         bool needBufferOpen() const override { return isBufferDependent(); }
111
112         /// Update the display of the dialog whilst it is still visible.
113         void updateView() override;
114
115 private:
116         ButtonController bc_;
117         /// are we updating ?
118         bool updating_;
119
120         bool is_closing_;
121
122         /// stop the apply process?
123         bool applyStopped() { return apply_stopped_; };
124         bool apply_stopped_;
125 };
126
127
128 } // namespace frontend
129 } // namespace lyx
130
131 #endif // GUIDIALOG_H