#pragma once #include #include #include #include #include #include "singletons/Settings.hpp" #define SETTINGS_PAGE_WIDGET_BOILERPLATE(type, parent) \ class type : public parent \ { \ using parent::parent; \ \ public: \ bool greyedOut{}; \ \ protected: \ void paintEvent(QPaintEvent *e) override \ { \ parent::paintEvent(e); \ \ if (this->greyedOut) \ { \ QPainter painter(this); \ QColor color = QColor("#222222"); \ color.setAlphaF(0.7); \ painter.fillRect(this->rect(), color); \ } \ } \ }; namespace chatterino { SETTINGS_PAGE_WIDGET_BOILERPLATE(SCheckBox, QCheckBox) SETTINGS_PAGE_WIDGET_BOILERPLATE(SLabel, QLabel) SETTINGS_PAGE_WIDGET_BOILERPLATE(SComboBox, QComboBox) class SettingsDialogTab; class SettingsPage : public QFrame { Q_OBJECT public: SettingsPage(const QString &name, const QString &iconResource); const QString &getName(); const QString &getIconResource(); virtual void filterElements(const QString &query); SettingsDialogTab *tab() const; void setTab(SettingsDialogTab *tab); void cancel(); QCheckBox *createCheckBox(const QString &text, pajlada::Settings::Setting &setting); QComboBox *createComboBox(const QStringList &items, pajlada::Settings::Setting &setting); QLineEdit *createLineEdit(pajlada::Settings::Setting &setting); QSpinBox *createSpinBox(pajlada::Settings::Setting &setting, int min = 0, int max = 2500); virtual void onShow() { } protected: QString name_; QString iconResource_; SettingsDialogTab *tab_; pajlada::Signals::NoArgSignal onCancel_; std::vector managedConnections_; }; } // namespace chatterino