Qt Utilities 6.12.0
Common Qt related C++ classes and routines used by my applications such as dialogs, widgets and models
Loading...
Searching...
No Matches
optionpage.h
Go to the documentation of this file.
1#ifndef DIALOGS_OPTIONSPAGE_H
2#define DIALOGS_OPTIONSPAGE_H
3
4#include "../global.h"
5
6#include <QObject>
7#include <QWidget>
8
9#include <memory>
10
11namespace QtUtilities {
12
13class SettingsDialog;
14
15class QT_UTILITIES_EXPORT OptionPageWidget : public QWidget {
16 Q_OBJECT
17
18public:
19 explicit OptionPageWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
20
21Q_SIGNALS:
23
24protected:
25 bool event(QEvent *) override;
26};
27
28inline OptionPageWidget::OptionPageWidget(QWidget *parent, Qt::WindowFlags f)
29 : QWidget(parent, f)
30{
31}
32
34 friend class SettingsDialog;
35
36public:
37 explicit OptionPage(QWidget *parentWindow = nullptr);
38 virtual ~OptionPage();
39
40 QWidget *parentWindow() const;
41 QWidget *widget();
42 bool hasBeenShown() const;
43 virtual bool apply() = 0;
44 virtual void reset() = 0;
45 bool matches(const QString &searchKeyWord);
46 const QStringList &errors() const;
47
48protected:
49 virtual QWidget *setupWidget() = 0;
50 QStringList &errors();
51
52private:
53 std::unique_ptr<QWidget> m_widget;
54 QWidget *m_parentWindow;
55 bool m_shown;
56 bool m_keywordsInitialized;
57 QStringList m_keywords;
58 QStringList m_errors;
59};
60
64inline QWidget *OptionPage::parentWindow() const
65{
66 return m_parentWindow;
67}
68
74inline bool OptionPage::hasBeenShown() const
75{
76 return m_widget != nullptr && m_shown;
77}
78
83inline const QStringList &OptionPage::errors() const
84{
85 return m_errors;
86}
87
96inline QStringList &OptionPage::errors()
97{
98 return m_errors;
99}
100
109template <class UiClass> class QT_UTILITIES_EXPORT UiFileBasedOptionPage : public OptionPage {
110public:
111 explicit UiFileBasedOptionPage(QWidget *parentWindow = nullptr);
112 ~UiFileBasedOptionPage() override;
113
114 bool apply() override = 0;
115 void reset() override = 0;
116
117protected:
118 QWidget *setupWidget() override;
119 UiClass *ui();
120
121private:
122 std::unique_ptr<UiClass> m_ui;
123};
124
128template <class UiClass>
130 : OptionPage(parentWindow)
131{
132}
133
138{
139}
140
144template <class UiClass> QWidget *UiFileBasedOptionPage<UiClass>::setupWidget()
145{
146 QWidget *widget = new OptionPageWidget();
147 if (!m_ui) {
148 m_ui.reset(new UiClass);
149 }
150 m_ui->setupUi(widget);
151 return widget;
152}
153
157template <class UiClass> inline UiClass *UiFileBasedOptionPage<UiClass>::ui()
158{
159 return m_ui.get();
160}
161} // namespace QtUtilities
162
166#define BEGIN_DECLARE_TYPEDEF_OPTION_PAGE(SomeClass) using SomeClass##Base = ::QtUtilities::OptionPage;
167
173#define BEGIN_DECLARE_OPTION_PAGE(SomeClass) \
174 BEGIN_DECLARE_TYPEDEF_OPTION_PAGE(SomeClass) \
175 class QT_UTILITIES_EXPORT SomeClass : public ::QtUtilities::OptionPage { \
176 public: \
177 explicit SomeClass(QWidget *parentWidget = nullptr); \
178 ~SomeClass() override; \
179 bool apply() override; \
180 void reset() override; \
181 \
182 private:
183
189#define BEGIN_DECLARE_OPTION_PAGE_CUSTOM_CTOR(SomeClass) \
190 BEGIN_DECLARE_TYPEDEF_OPTION_PAGE(SomeClass) \
191 class QT_UTILITIES_EXPORT SomeClass : public ::QtUtilities::OptionPage { \
192 public: \
193 ~SomeClass() override; \
194 bool apply() override; \
195 void reset() override; \
196 \
197 private:
198
202#define BEGIN_DECLARE_TYPEDEF_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
203 namespace Ui { \
204 class SomeClass; \
205 } \
206 using SomeClass##Base = ::QtUtilities::UiFileBasedOptionPage<Ui::SomeClass>;
207
213#define BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(SomeClass) \
214 BEGIN_DECLARE_TYPEDEF_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
215 class QT_UTILITIES_EXPORT SomeClass : public ::QtUtilities::UiFileBasedOptionPage<Ui::SomeClass> { \
216 public: \
217 ~SomeClass() override; \
218 bool apply() override; \
219 void reset() override; \
220 \
221 private:
222
228#define BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
229 BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(SomeClass) \
230public: \
231 explicit SomeClass(QWidget *parentWidget = nullptr); \
232 \
233private:
234
239#define END_DECLARE_OPTION_PAGE \
240 } \
241 ;
242
248#define INSTANTIATE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
249 namespace QtUtilities { \
250 template class UiFileBasedOptionPage<Ui::SomeClass>; \
251 }
252
259#define INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(SomeNamespace, SomeClass) \
260 namespace QtUtilities { \
261 template class UiFileBasedOptionPage<::SomeNamespace::Ui::SomeClass>; \
262 }
263
269#define DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
270 namespace QtUtilities { \
271 namespace Ui { \
272 class SomeClass; \
273 } \
274 extern template class UiFileBasedOptionPage<Ui::SomeClass>; \
275 }
276
283#define DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(SomeNamespace, SomeClass) \
284 namespace SomeNamespace { \
285 namespace Ui { \
286 class SomeClass; \
287 } \
288 } \
289 namespace QtUtilities { \
290 extern template class UiFileBasedOptionPage<::SomeNamespace::Ui::SomeClass>; \
291 }
292
298#define DECLARE_SETUP_WIDGETS \
299protected: \
300 QWidget *setupWidget() override; \
301 \
302private:
303
309#define DECLARE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
310 BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
311 END_DECLARE_OPTION_PAGE
312
318#define DECLARE_OPTION_PAGE(SomeClass) \
319 BEGIN_DECLARE_OPTION_PAGE(SomeClass) \
320 DECLARE_SETUP_WIDGETS \
321 END_DECLARE_OPTION_PAGE
322
328#define DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_SETUP(SomeClass) \
329 BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
330 DECLARE_SETUP_WIDGETS \
331 END_DECLARE_OPTION_PAGE
332
333#endif // DIALOGS_OPTIONSPAGE_H
OptionPageWidget(QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags())
Definition: optionpage.h:28
The OptionPage class is the base class for SettingsDialog pages.
Definition: optionpage.h:33
QWidget * parentWindow() const
Returns the parent window of the option page.
Definition: optionpage.h:64
virtual bool apply()=0
Applies altered settings.
const QStringList & errors() const
Returns the errors which haven been occurred when applying the changes.
Definition: optionpage.h:83
virtual void reset()=0
Discards altered settings and resets relevant widgets.
virtual QWidget * setupWidget()=0
Creates the widget for the page.
bool hasBeenShown() const
Returns an indication whether the option page has been shown yet.
Definition: optionpage.h:74
The SettingsDialog class provides a framework for creating settings dialogs with different categories...
UiClass * ui()
Provides the derived class access to the UI class.
Definition: optionpage.h:157
UiFileBasedOptionPage(QWidget *parentWindow=nullptr)
Constructs a new UI file based option page.
Definition: optionpage.h:129
void reset() override=0
Discards altered settings and resets relevant widgets.
~UiFileBasedOptionPage() override
Destroys the option page.
Definition: optionpage.h:137
QWidget * setupWidget() override
Inflates the widget for the option page using the UI class.
Definition: optionpage.h:144
bool apply() override=0
Applies altered settings.
#define QT_UTILITIES_EXPORT
Marks the symbol to be exported by the qtutilities library.