1 #ifndef DIALOGS_OPTIONSPAGE_H
2 #define DIALOGS_OPTIONSPAGE_H
19 explicit OptionPage(QWidget *parentWindow =
nullptr);
22 QWidget *parentWindow()
const;
24 bool hasBeenShown()
const;
27 bool matches(
const QString &searchKeyWord);
28 const QStringList &errors()
const;
32 QStringList &errors();
35 std::unique_ptr<QWidget> m_widget;
36 QWidget *m_parentWindow;
38 bool m_keywordsInitialized;
39 QStringList m_keywords;
48 return m_parentWindow;
58 return m_widget !=
nullptr && m_shown;
100 QWidget *setupWidget()
override;
104 std::unique_ptr<UiClass> m_ui;
110 template <
class UiClass>
128 QWidget *widget =
new QWidget();
130 m_ui.reset(
new UiClass);
132 m_ui->setupUi(widget);
148 #define BEGIN_DECLARE_TYPEDEF_OPTION_PAGE(SomeClass) using SomeClass##Base = ::QtUtilities::OptionPage;
155 #define BEGIN_DECLARE_OPTION_PAGE(SomeClass) \
156 BEGIN_DECLARE_TYPEDEF_OPTION_PAGE(SomeClass) \
157 class QT_UTILITIES_EXPORT SomeClass : public ::QtUtilities::OptionPage { \
159 explicit SomeClass(QWidget *parentWidget = nullptr); \
160 ~SomeClass() override; \
161 bool apply() override; \
162 void reset() override; \
171 #define BEGIN_DECLARE_OPTION_PAGE_CUSTOM_CTOR(SomeClass) \
172 BEGIN_DECLARE_TYPEDEF_OPTION_PAGE(SomeClass) \
173 class QT_UTILITIES_EXPORT SomeClass : public ::QtUtilities::OptionPage { \
175 ~SomeClass() override; \
176 bool apply() override; \
177 void reset() override; \
184 #define BEGIN_DECLARE_TYPEDEF_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
188 using SomeClass##Base = ::QtUtilities::UiFileBasedOptionPage<Ui::SomeClass>;
195 #define BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(SomeClass) \
196 BEGIN_DECLARE_TYPEDEF_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
197 class QT_UTILITIES_EXPORT SomeClass : public ::QtUtilities::UiFileBasedOptionPage<Ui::SomeClass> { \
199 ~SomeClass() override; \
200 bool apply() override; \
201 void reset() override; \
210 #define BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
211 BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(SomeClass) \
213 explicit SomeClass(QWidget *parentWidget = nullptr); \
221 #define END_DECLARE_OPTION_PAGE \
230 #define INSTANTIATE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
231 namespace QtUtilities { \
232 template class UiFileBasedOptionPage<Ui::SomeClass>; \
241 #define INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(SomeNamespace, SomeClass) \
242 namespace QtUtilities { \
243 template class UiFileBasedOptionPage<::SomeNamespace::Ui::SomeClass>; \
251 #define DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
252 namespace QtUtilities { \
256 extern template class UiFileBasedOptionPage<Ui::SomeClass>; \
265 #define DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(SomeNamespace, SomeClass) \
266 namespace SomeNamespace { \
271 namespace QtUtilities { \
272 extern template class UiFileBasedOptionPage<::SomeNamespace::Ui::SomeClass>; \
280 #define DECLARE_SETUP_WIDGETS \
282 QWidget *setupWidget() override; \
291 #define DECLARE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
292 BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
293 END_DECLARE_OPTION_PAGE
300 #define DECLARE_OPTION_PAGE(SomeClass) \
301 BEGIN_DECLARE_OPTION_PAGE(SomeClass) \
302 DECLARE_SETUP_WIDGETS \
303 END_DECLARE_OPTION_PAGE
310 #define DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_SETUP(SomeClass) \
311 BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE(SomeClass) \
312 DECLARE_SETUP_WIDGETS \
313 END_DECLARE_OPTION_PAGE
The OptionPage class is the base class for SettingsDialog pages.
QWidget * parentWindow() const
Returns the parent window of the option page.
virtual bool apply()=0
Applies altered settings.
const QStringList & errors() const
Returns the errors which haven been occurred when applying the changes.
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.
The SettingsDialog class provides a framework for creating settings dialogs with different categories...
UiClass * ui()
Provides the derived class access to the UI class.
UiFileBasedOptionPage(QWidget *parentWindow=nullptr)
Constructs a new UI file based option page.
void reset() override=0
Discards altered settings and resets relevant widgets.
~UiFileBasedOptionPage() override
Destroys the option page.
QWidget * setupWidget() override
Inflates the widget for the option page using the UI class.
bool apply() override=0
Applies altered settings.
#define QT_UTILITIES_EXPORT
Marks the symbol to be exported by the qtutilities library.