Skip to content

Commit b51d2fe

Browse files
AtkinsSJawesomekling
authored andcommitted
ThemeEditor: Add support for FlagRoles
The GUI for this is a bit odd, especially since we only have one flag, but otherwise adding new flags would require modifying ThemeEditor. At least it is consistent with the other theme properties.
1 parent f22043a commit b51d2fe

File tree

2 files changed

+73
-3
lines changed

2 files changed

+73
-3
lines changed

Userland/Applications/ThemeEditor/ThemeEditor.gml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,28 @@
2525
}
2626
}
2727

28+
@GUI::GroupBox {
29+
layout: @GUI::HorizontalBoxLayout {
30+
margins: [16, 8, 8, 8]
31+
}
32+
shrink_to_fit: true
33+
title: "Flags"
34+
35+
@GUI::ComboBox {
36+
name: "flag_combo_box"
37+
model_only: true
38+
fixed_width: 230
39+
}
40+
41+
@GUI::Widget {
42+
}
43+
44+
@GUI::CheckBox {
45+
name: "flag_input"
46+
fixed_width: 13
47+
}
48+
}
49+
2850
@GUI::GroupBox {
2951
layout: @GUI::HorizontalBoxLayout {
3052
margins: [16, 8, 8, 8]

Userland/Applications/ThemeEditor/main.cpp

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <LibGUI/Application.h>
1515
#include <LibGUI/BoxLayout.h>
1616
#include <LibGUI/Button.h>
17+
#include <LibGUI/CheckBox.h>
1718
#include <LibGUI/ColorInput.h>
1819
#include <LibGUI/ComboBox.h>
1920
#include <LibGUI/FilePicker.h>
@@ -44,6 +45,24 @@ class ColorRoleModel final : public GUI::ItemListModel<Gfx::ColorRole> {
4445
}
4546
};
4647

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+
4766
class MetricRoleModel final : public GUI::ItemListModel<Gfx::MetricRole> {
4867
public:
4968
explicit MetricRoleModel(Vector<Gfx::MetricRole> const& data)
@@ -54,7 +73,7 @@ class MetricRoleModel final : public GUI::ItemListModel<Gfx::MetricRole> {
5473
virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override
5574
{
5675
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()]);
5877
if (role == GUI::ModelRole::Custom)
5978
return m_data[(size_t)index.row()];
6079

@@ -72,7 +91,7 @@ class PathRoleModel final : public GUI::ItemListModel<Gfx::PathRole> {
7291
virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override
7392
{
7493
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()]);
7695
if (role == GUI::ModelRole::Custom)
7796
return m_data[(size_t)index.row()];
7897

@@ -139,6 +158,11 @@ int main(int argc, char** argv)
139158
ENUMERATE_COLOR_ROLES(__ENUMERATE_COLOR_ROLE)
140159
#undef __ENUMERATE_COLOR_ROLE
141160

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+
142166
Vector<Gfx::MetricRole> metric_roles;
143167
#define __ENUMERATE_METRIC_ROLE(role) metric_roles.append(Gfx::MetricRole::role);
144168
ENUMERATE_METRIC_ROLES(__ENUMERATE_METRIC_ROLE)
@@ -156,6 +180,8 @@ int main(int argc, char** argv)
156180
->add<ThemeEditor::PreviewWidget>(startup_preview_palette);
157181
auto& color_combo_box = *main_widget.find_descendant_of_type_named<GUI::ComboBox>("color_combo_box");
158182
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");
159185
auto& metric_combo_box = *main_widget.find_descendant_of_type_named<GUI::ComboBox>("metric_combo_box");
160186
auto& metric_input = *main_widget.find_descendant_of_type_named<GUI::SpinBox>("metric_input");
161187
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)
177203
};
178204
color_input.set_color(startup_preview_palette.color(Gfx::ColorRole::Window));
179205

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+
180221
metric_combo_box.set_model(adopt_ref(*new MetricRoleModel(metric_roles)));
181222
metric_combo_box.on_change = [&](auto&, auto& index) {
182223
auto role = index.model()->data(index, GUI::ModelRole::Custom).to_metric_role();
@@ -231,6 +272,9 @@ int main(int argc, char** argv)
231272
auto selected_color_role = color_combo_box.model()->index(color_combo_box.selected_index()).data(GUI::ModelRole::Custom).to_color_role();
232273
color_input.set_color(preview_widget.preview_palette().color(selected_color_role));
233274

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+
234278
auto selected_metric_role = metric_combo_box.model()->index(metric_combo_box.selected_index()).data(GUI::ModelRole::Custom).to_metric_role();
235279
metric_input.set_value(preview_widget.preview_palette().metric(selected_metric_role), GUI::AllowCallback::No);
236280

@@ -250,6 +294,10 @@ int main(int argc, char** argv)
250294
theme->write_entry("Colors", to_string(role), preview_widget.preview_palette().color(role).to_string());
251295
}
252296

297+
for (auto role : flag_roles) {
298+
theme->write_bool_entry("Flags", to_string(role), preview_widget.preview_palette().flag(role));
299+
}
300+
253301
for (auto role : metric_roles) {
254302
theme->write_num_entry("Metrics", to_string(role), preview_widget.preview_palette().metric(role));
255303
}
@@ -289,7 +337,7 @@ int main(int argc, char** argv)
289337

290338
update_window_title();
291339

292-
window->resize(480, 500);
340+
window->resize(480, 520);
293341
window->set_resizable(false);
294342
window->show();
295343
window->set_icon(app_icon.bitmap_for_size(16));

0 commit comments

Comments
 (0)