118 lines
2.4 KiB
C++
118 lines
2.4 KiB
C++
#ifndef OPTIONSPAGE_H
|
|
#define OPTIONSPAGE_H
|
|
|
|
#include <c++utilities/application/global.h>
|
|
|
|
#include <QObject>
|
|
#include <QWidget>
|
|
|
|
#include <memory>
|
|
|
|
namespace Dialogs {
|
|
|
|
class LIB_EXPORT OptionPage
|
|
{
|
|
public:
|
|
explicit OptionPage(QWidget *parentWindow = nullptr);
|
|
virtual ~OptionPage();
|
|
|
|
QWidget *parentWindow() const;
|
|
virtual QString displayName() const = 0;
|
|
QWidget *widget();
|
|
bool hasBeenShown() const;
|
|
virtual bool apply() = 0;
|
|
virtual void reset() = 0;
|
|
bool matches(const QString &searchKeyWord);
|
|
|
|
protected:
|
|
virtual QWidget *setupWidget() = 0;
|
|
|
|
private:
|
|
std::unique_ptr<QWidget> m_widget;
|
|
QWidget *m_parentWindow;
|
|
bool m_shown;
|
|
bool m_keywordsInitialized;
|
|
QStringList m_keywords;
|
|
};
|
|
|
|
/*!
|
|
* \brief Returns the parent window of the option page.
|
|
*/
|
|
inline QWidget *OptionPage::parentWindow() const
|
|
{
|
|
return m_parentWindow;
|
|
}
|
|
|
|
/*!
|
|
* \brief Returns an indication whether the option page has been shown yet.
|
|
*/
|
|
inline bool OptionPage::hasBeenShown() const
|
|
{
|
|
return m_widget != nullptr && m_shown;
|
|
}
|
|
|
|
/*!
|
|
* \class Dialogs::UiFileBasedOptionPage
|
|
* \brief The UiFileBasedOptionPage class is the base class for SettingsDialog pages using UI files
|
|
* to describe the widget tree.
|
|
*
|
|
* \tparam UiClass Specifies the UI class generated by uic.
|
|
*/
|
|
template <class UiClass>
|
|
class LIB_EXPORT UiFileBasedOptionPage : public OptionPage
|
|
{
|
|
public:
|
|
explicit UiFileBasedOptionPage(QWidget *parentWindow = nullptr);
|
|
virtual ~UiFileBasedOptionPage();
|
|
|
|
virtual QString displayName() const = 0;
|
|
virtual bool apply() = 0;
|
|
virtual void reset() = 0;
|
|
|
|
protected:
|
|
virtual QWidget *setupWidget();
|
|
UiClass *ui();
|
|
|
|
private:
|
|
std::unique_ptr<UiClass> m_ui;
|
|
};
|
|
|
|
/*!
|
|
* \brief Constructs a new UI file based option page.
|
|
*/
|
|
template <class UiClass>
|
|
UiFileBasedOptionPage<UiClass>::UiFileBasedOptionPage(QWidget *parentWindow) :
|
|
OptionPage(parentWindow)
|
|
{}
|
|
|
|
/*!
|
|
* \brief Destroys the option page.
|
|
*/
|
|
template <class UiClass>
|
|
UiFileBasedOptionPage<UiClass>::~UiFileBasedOptionPage()
|
|
{}
|
|
|
|
/*!
|
|
* \brief Sets up the widget for the option page using the UI class.
|
|
*/
|
|
template <class UiClass>
|
|
QWidget *UiFileBasedOptionPage<UiClass>::setupWidget()
|
|
{
|
|
QWidget *widget = new QWidget();
|
|
if(!m_ui) {
|
|
m_ui.reset(new UiClass);
|
|
}
|
|
m_ui->setupUi(widget);
|
|
return widget;
|
|
}
|
|
|
|
template <class UiClass>
|
|
inline UiClass *UiFileBasedOptionPage<UiClass>::ui()
|
|
{
|
|
return m_ui.get();
|
|
}
|
|
|
|
}
|
|
|
|
#endif // OPTIONSPAGE_H
|