14
14
#include < LibGUI/Application.h>
15
15
#include < LibGUI/BoxLayout.h>
16
16
#include < LibGUI/Button.h>
17
+ #include < LibGUI/CheckBox.h>
17
18
#include < LibGUI/ColorInput.h>
18
19
#include < LibGUI/ComboBox.h>
19
20
#include < LibGUI/FilePicker.h>
@@ -44,6 +45,24 @@ class ColorRoleModel final : public GUI::ItemListModel<Gfx::ColorRole> {
44
45
}
45
46
};
46
47
48
+ class FlagRoleModel final : public GUI::ItemListModel<Gfx::FlagRole> {
49
+ public:
50
+ explicit FlagRoleModel (Vector<Gfx::FlagRole> const & data)
51
+ : ItemListModel<Gfx::FlagRole>(data)
52
+ {
53
+ }
54
+
55
+ virtual GUI::Variant data (GUI::ModelIndex const & index, GUI::ModelRole role) const override
56
+ {
57
+ if (role == GUI::ModelRole::Display)
58
+ return Gfx::to_string (m_data[(size_t )index.row ()]);
59
+ if (role == GUI::ModelRole::Custom)
60
+ return m_data[(size_t )index.row ()];
61
+
62
+ return ItemListModel::data (index, role);
63
+ }
64
+ };
65
+
47
66
class MetricRoleModel final : public GUI::ItemListModel<Gfx::MetricRole> {
48
67
public:
49
68
explicit MetricRoleModel (Vector<Gfx::MetricRole> const & data)
@@ -54,7 +73,7 @@ class MetricRoleModel final : public GUI::ItemListModel<Gfx::MetricRole> {
54
73
virtual GUI::Variant data (GUI::ModelIndex const & index, GUI::ModelRole role) const override
55
74
{
56
75
if (role == GUI::ModelRole::Display)
57
- return Gfx::to_string (static_cast <Gfx::MetricRole>( m_data[(size_t )index.row ()]) );
76
+ return Gfx::to_string (m_data[(size_t )index.row ()]);
58
77
if (role == GUI::ModelRole::Custom)
59
78
return m_data[(size_t )index.row ()];
60
79
@@ -72,7 +91,7 @@ class PathRoleModel final : public GUI::ItemListModel<Gfx::PathRole> {
72
91
virtual GUI::Variant data (GUI::ModelIndex const & index, GUI::ModelRole role) const override
73
92
{
74
93
if (role == GUI::ModelRole::Display)
75
- return Gfx::to_string (static_cast <Gfx::PathRole>( m_data[(size_t )index.row ()]) );
94
+ return Gfx::to_string (m_data[(size_t )index.row ()]);
76
95
if (role == GUI::ModelRole::Custom)
77
96
return m_data[(size_t )index.row ()];
78
97
@@ -139,6 +158,11 @@ int main(int argc, char** argv)
139
158
ENUMERATE_COLOR_ROLES (__ENUMERATE_COLOR_ROLE)
140
159
#undef __ENUMERATE_COLOR_ROLE
141
160
161
+ Vector<Gfx::FlagRole> flag_roles;
162
+ #define __ENUMERATE_FLAG_ROLE (role ) flag_roles.append(Gfx::FlagRole::role);
163
+ ENUMERATE_FLAG_ROLES (__ENUMERATE_FLAG_ROLE)
164
+ #undef __ENUMERATE_FLAG_ROLE
165
+
142
166
Vector<Gfx::MetricRole> metric_roles;
143
167
#define __ENUMERATE_METRIC_ROLE (role ) metric_roles.append(Gfx::MetricRole::role);
144
168
ENUMERATE_METRIC_ROLES (__ENUMERATE_METRIC_ROLE)
@@ -156,6 +180,8 @@ int main(int argc, char** argv)
156
180
->add <ThemeEditor::PreviewWidget>(startup_preview_palette);
157
181
auto & color_combo_box = *main_widget.find_descendant_of_type_named <GUI::ComboBox>(" color_combo_box" );
158
182
auto & color_input = *main_widget.find_descendant_of_type_named <GUI::ColorInput>(" color_input" );
183
+ auto & flag_combo_box = *main_widget.find_descendant_of_type_named <GUI::ComboBox>(" flag_combo_box" );
184
+ auto & flag_input = *main_widget.find_descendant_of_type_named <GUI::CheckBox>(" flag_input" );
159
185
auto & metric_combo_box = *main_widget.find_descendant_of_type_named <GUI::ComboBox>(" metric_combo_box" );
160
186
auto & metric_input = *main_widget.find_descendant_of_type_named <GUI::SpinBox>(" metric_input" );
161
187
auto & path_combo_box = *main_widget.find_descendant_of_type_named <GUI::ComboBox>(" path_combo_box" );
@@ -177,6 +203,21 @@ int main(int argc, char** argv)
177
203
};
178
204
color_input.set_color (startup_preview_palette.color (Gfx::ColorRole::Window));
179
205
206
+ flag_combo_box.set_model (adopt_ref (*new FlagRoleModel (flag_roles)));
207
+ flag_combo_box.on_change = [&](auto &, auto & index) {
208
+ auto role = index.model ()->data (index, GUI::ModelRole::Custom).to_flag_role ();
209
+ flag_input.set_checked (preview_widget.preview_palette ().flag (role), GUI::AllowCallback::No);
210
+ };
211
+ flag_combo_box.set_selected_index ((size_t )Gfx::FlagRole::IsDark - 1 );
212
+
213
+ flag_input.on_checked = [&](bool checked) {
214
+ auto role = flag_combo_box.model ()->index (flag_combo_box.selected_index ()).data (GUI::ModelRole::Custom).to_flag_role ();
215
+ auto preview_palette = preview_widget.preview_palette ();
216
+ preview_palette.set_flag (role, checked);
217
+ preview_widget.set_preview_palette (preview_palette);
218
+ };
219
+ flag_input.set_checked (startup_preview_palette.flag (Gfx::FlagRole::IsDark), GUI::AllowCallback::No);
220
+
180
221
metric_combo_box.set_model (adopt_ref (*new MetricRoleModel (metric_roles)));
181
222
metric_combo_box.on_change = [&](auto &, auto & index) {
182
223
auto role = index.model ()->data (index, GUI::ModelRole::Custom).to_metric_role ();
@@ -231,6 +272,9 @@ int main(int argc, char** argv)
231
272
auto selected_color_role = color_combo_box.model ()->index (color_combo_box.selected_index ()).data (GUI::ModelRole::Custom).to_color_role ();
232
273
color_input.set_color (preview_widget.preview_palette ().color (selected_color_role));
233
274
275
+ auto selected_flag_role = flag_combo_box.model ()->index (flag_combo_box.selected_index ()).data (GUI::ModelRole::Custom).to_flag_role ();
276
+ flag_input.set_checked (preview_widget.preview_palette ().flag (selected_flag_role), GUI::AllowCallback::No);
277
+
234
278
auto selected_metric_role = metric_combo_box.model ()->index (metric_combo_box.selected_index ()).data (GUI::ModelRole::Custom).to_metric_role ();
235
279
metric_input.set_value (preview_widget.preview_palette ().metric (selected_metric_role), GUI::AllowCallback::No);
236
280
@@ -250,6 +294,10 @@ int main(int argc, char** argv)
250
294
theme->write_entry (" Colors" , to_string (role), preview_widget.preview_palette ().color (role).to_string ());
251
295
}
252
296
297
+ for (auto role : flag_roles) {
298
+ theme->write_bool_entry (" Flags" , to_string (role), preview_widget.preview_palette ().flag (role));
299
+ }
300
+
253
301
for (auto role : metric_roles) {
254
302
theme->write_num_entry (" Metrics" , to_string (role), preview_widget.preview_palette ().metric (role));
255
303
}
@@ -289,7 +337,7 @@ int main(int argc, char** argv)
289
337
290
338
update_window_title ();
291
339
292
- window->resize (480 , 500 );
340
+ window->resize (480 , 520 );
293
341
window->set_resizable (false );
294
342
window->show ();
295
343
window->set_icon (app_icon.bitmap_for_size (16 ));
0 commit comments