#pragma once #include "common/ChatterinoSetting.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include class QFormLayout; namespace chatterino { class GeneralPageView; class SettingWidget : public QWidget { Q_OBJECT explicit SettingWidget(const QString &mainKeyword); public: struct IntInputParams { std::optional min; std::optional max; std::optional singleStep; }; ~SettingWidget() override = default; SettingWidget &operator=(const SettingWidget &) = delete; SettingWidget &operator=(SettingWidget &&) = delete; SettingWidget(const SettingWidget &other) = delete; SettingWidget(SettingWidget &&other) = delete; static SettingWidget *checkbox(const QString &label, BoolSetting &setting); static SettingWidget *inverseCheckbox(const QString &label, BoolSetting &setting); static SettingWidget *customCheckbox(const QString &label, bool initialValue, const std::function &save); static SettingWidget *intInput(const QString &label, IntSetting &setting, IntInputParams params); template static SettingWidget *dropdown(const QString &label, EnumStringSetting &setting); template static SettingWidget *dropdown(const QString &label, EnumSetting &setting); static SettingWidget *colorButton(const QString &label, QStringSetting &setting); static SettingWidget *lineEdit(const QString &label, QStringSetting &setting, const QString &placeholderText = {}); static SettingWidget *fontButton(const QString &label, QStringSetting &familySetting, std::function currentFont, std::function onChange); SettingWidget *setTooltip(QString tooltip); SettingWidget *setDescription(const QString &text); /// Add extra keywords to the widget /// /// All text from the tooltip, description, and label are already keywords SettingWidget *addKeywords(const QStringList &newKeywords); SettingWidget *conditionallyEnabledBy(BoolSetting &setting); void addTo(GeneralPageView &view); void addTo(GeneralPageView &view, QFormLayout *formLayout); private: QWidget *label = nullptr; QWidget *actionWidget = nullptr; QVBoxLayout *vLayout; QHBoxLayout *hLayout; pajlada::Signals::SignalHolder managedConnections; QStringList keywords; }; } // namespace chatterino