Chatterino
SettingsPage.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <QCheckBox>
4 #include <QComboBox>
5 #include <QLineEdit>
6 #include <QSpinBox>
7 #include <pajlada/signals/signal.hpp>
8 
10 
11 #include <QLabel>
12 #include <QPainter>
13 #include <QPushButton>
14 
15 #define SETTINGS_PAGE_WIDGET_BOILERPLATE(type, parent) \
16  class type : public parent \
17  { \
18  using parent::parent; \
19  \
20  public: \
21  bool greyedOut{}; \
22  \
23  protected: \
24  void paintEvent(QPaintEvent *e) override \
25  { \
26  parent::paintEvent(e); \
27  \
28  if (this->greyedOut) \
29  { \
30  QPainter painter(this); \
31  QColor color = QColor("#222222"); \
32  color.setAlphaF(0.7); \
33  painter.fillRect(this->rect(), color); \
34  } \
35  } \
36  };
37 
38 namespace chatterino {
39 
40 // S* widgets are the same as their Q* counterparts,
41 // but they can be greyed out and will be if you search.
42 SETTINGS_PAGE_WIDGET_BOILERPLATE(SCheckBox, QCheckBox)
44 SETTINGS_PAGE_WIDGET_BOILERPLATE(SComboBox, QComboBox)
45 SETTINGS_PAGE_WIDGET_BOILERPLATE(SPushButton, QPushButton)
46 
47 class SettingsDialogTab;
48 
49 class SettingsPage : public QFrame
50 {
51  Q_OBJECT
52 
53 public:
54  SettingsPage();
55 
56  virtual bool filterElements(const QString &query);
57 
58  SettingsDialogTab *tab() const;
59  void setTab(SettingsDialogTab *tab);
60 
61  void cancel();
62 
63  QCheckBox *createCheckBox(const QString &text,
64  pajlada::Settings::Setting<bool> &setting);
65  QComboBox *createComboBox(const QStringList &items,
66  pajlada::Settings::Setting<QString> &setting);
67  QLineEdit *createLineEdit(pajlada::Settings::Setting<QString> &setting);
68  QSpinBox *createSpinBox(pajlada::Settings::Setting<int> &setting,
69  int min = 0, int max = 2500);
70 
71  virtual void onShow()
72  {
73  }
74 
75 protected:
77  pajlada::Signals::NoArgSignal onCancel_;
78  pajlada::Signals::SignalHolder managedConnections_;
79 };
80 
81 } // namespace chatterino
virtual bool filterElements(const QString &query)
Definition: SettingsPage.cpp:71
void setTab(SettingsDialogTab *tab)
Definition: SettingsPage.cpp:81
pajlada::Signals::NoArgSignal onCancel_
Definition: SettingsPage.hpp:77
SettingsDialogTab * tab() const
Definition: SettingsPage.cpp:76
Definition: Application.cpp:48
Definition: SettingsPage.hpp:49
SettingsDialogTab * tab_
Definition: SettingsPage.hpp:76
QSpinBox * createSpinBox(pajlada::Settings::Setting< int > &setting, int min=0, int max=2500)
Definition: SettingsPage.cpp:152
virtual void onShow()
Definition: SettingsPage.hpp:71
QComboBox * createComboBox(const QStringList &items, pajlada::Settings::Setting< QString > &setting)
Definition: SettingsPage.cpp:113
QLineEdit * createLineEdit(pajlada::Settings::Setting< QString > &setting)
Definition: SettingsPage.cpp:136
SettingsPage()
Definition: SettingsPage.cpp:67
void cancel()
Definition: SettingsPage.cpp:86
QCheckBox * createCheckBox(const QString &text, pajlada::Settings::Setting< bool > &setting)
Definition: SettingsPage.cpp:91
pajlada::Signals::SignalHolder managedConnections_
Definition: SettingsPage.hpp:78
Definition: SettingsDialogTab.hpp:21
#define SETTINGS_PAGE_WIDGET_BOILERPLATE(type, parent)
Definition: SettingsPage.hpp:15