Sceneview
 All Classes Functions Variables Enumerations Enumerator Groups Pages
param_widget.hpp
1 // Copyright [2015] Albert Huang
2 
3 #ifndef SCENEVIEW_PARAM_WIDGET_HPP__
4 #define SCENEVIEW_PARAM_WIDGET_HPP__
5 
6 #include <map>
7 #include <utility>
8 #include <vector>
9 
10 #include <QWidget>
11 #include <QVBoxLayout>
12 #include <QVariant>
13 
14 class QCheckBox;
15 class QSpinBox;
16 class QSlider;
17 
18 namespace sv {
19 
26 class ParamWidget : public QWidget {
27  Q_OBJECT
28 
29  public:
30  enum DisplayHint {
31  kComboBox,
32  kCheckBox,
33  kSlider,
34  kSpinBox
35  };
36 
37  typedef std::pair<QString, int> EnumItem;
38  typedef std::vector<EnumItem> EnumVector;
39 
40  explicit ParamWidget(QWidget* parent = nullptr);
41 
42  struct BoolItem {
43  QString name;
44  bool initially_checked;
45  };
46 
58  void AddEnum(const QString& name,
59  const EnumVector& items,
60  int initial_value,
61  DisplayHint display_hint);
62 
73  void AddBoolean(const QString& name, bool initial_value,
74  DisplayHint display_hint);
75 
91  void AddBooleans(const std::vector<BoolItem>& to_add,
92  DisplayHint display_hint);
93 
106  void AddInt(const QString& name,
107  int min, int max, int step,
108  int initial_value,
109  DisplayHint display_hint);
110 
123  void AddDouble(const QString& name,
124  double min, double max, double step,
125  double initial_value,
126  DisplayHint display_hint);
127 
135  void AddPushButton(const QString& name);
136 
144  void AddPushButtons(const std::vector<QString>& names);
145 
149  void AddString(const QString& name, const QString& initial_value);
150 
151  int GetEnum(const QString& name);
152 
153  QString GetEnumString(const QString& name);
154 
155  bool GetBool(const QString& name);
156 
157  int GetInt(const QString& name);
158 
159  double GetDouble(const QString& name);
160 
161  QString GetString(const QString& name);
162 
163  void SetEnum(const QString& name, int val);
164 
165  void SetBool(const QString& name, bool val);
166 
167  void SetInt(const QString& name, int val);
168 
169  void SetDouble(const QString& name, double val);
170 
171  void SetString(const QString& name, const QString& val);
172 
173  void SetPrecision(const QString& name, int digits, int decimal_places);
174 
175  void SetEnabled(const QString& name, bool enabled);
176 
177  QVariant SaveState();
178 
179  void LoadState(const QVariant& variant);
180 
181  signals:
182  void ParamChanged(const QString& name);
183 
184  private:
185  enum ParamType {
186  kParamEnum,
187  kParamBool,
188  kParamInt,
189  kParamDouble,
190  kParamButton
191  };
192 
193  void ExpectNameNotFound(const QString& name);
194 
195  void AddLabeledRow(const QString& name, QWidget* widget);
196 
197  QWidget* GetWidget(const QString& name);
198 
199  QVBoxLayout* layout_;
200 
201  std::map<QString, QWidget*> widgets_;
202 };
203 
204 } // namespace sv
205 
206 #endif // SCENEVIEW_PARAM_WIDGET_HPP__
void AddPushButton(const QString &name)
Adds a push button.
void AddEnum(const QString &name, const EnumVector &items, int initial_value, DisplayHint display_hint)
Adds an enum parameter.
void AddBooleans(const std::vector< BoolItem > &to_add, DisplayHint display_hint)
Adds one or more boolean parameters all in the same row.
Definition: param_widget.hpp:42
void AddDouble(const QString &name, double min, double max, double step, double initial_value, DisplayHint display_hint)
Adds a double parameter.
void AddString(const QString &name, const QString &initial_value)
Add a freeform text entry.
A convenience widget to enable quickly exposing tunable parameters.
Definition: param_widget.hpp:26
void AddBoolean(const QString &name, bool initial_value, DisplayHint display_hint)
Adds a boolean parameter.
void AddPushButtons(const std::vector< QString > &names)
Adds one or more push buttons all in the same row.
void AddInt(const QString &name, int min, int max, int step, int initial_value, DisplayHint display_hint)
Adds an int parameter.