mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:18:11 +00:00
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.
This commit is contained in:
parent
f22043a225
commit
b51d2fee05
2 changed files with 73 additions and 3 deletions
|
@ -14,6 +14,7 @@
|
|||
#include <LibGUI/Application.h>
|
||||
#include <LibGUI/BoxLayout.h>
|
||||
#include <LibGUI/Button.h>
|
||||
#include <LibGUI/CheckBox.h>
|
||||
#include <LibGUI/ColorInput.h>
|
||||
#include <LibGUI/ComboBox.h>
|
||||
#include <LibGUI/FilePicker.h>
|
||||
|
@ -44,6 +45,24 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class FlagRoleModel final : public GUI::ItemListModel<Gfx::FlagRole> {
|
||||
public:
|
||||
explicit FlagRoleModel(Vector<Gfx::FlagRole> const& data)
|
||||
: ItemListModel<Gfx::FlagRole>(data)
|
||||
{
|
||||
}
|
||||
|
||||
virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override
|
||||
{
|
||||
if (role == GUI::ModelRole::Display)
|
||||
return Gfx::to_string(m_data[(size_t)index.row()]);
|
||||
if (role == GUI::ModelRole::Custom)
|
||||
return m_data[(size_t)index.row()];
|
||||
|
||||
return ItemListModel::data(index, role);
|
||||
}
|
||||
};
|
||||
|
||||
class MetricRoleModel final : public GUI::ItemListModel<Gfx::MetricRole> {
|
||||
public:
|
||||
explicit MetricRoleModel(Vector<Gfx::MetricRole> const& data)
|
||||
|
@ -54,7 +73,7 @@ public:
|
|||
virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override
|
||||
{
|
||||
if (role == GUI::ModelRole::Display)
|
||||
return Gfx::to_string(static_cast<Gfx::MetricRole>(m_data[(size_t)index.row()]));
|
||||
return Gfx::to_string(m_data[(size_t)index.row()]);
|
||||
if (role == GUI::ModelRole::Custom)
|
||||
return m_data[(size_t)index.row()];
|
||||
|
||||
|
@ -72,7 +91,7 @@ public:
|
|||
virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override
|
||||
{
|
||||
if (role == GUI::ModelRole::Display)
|
||||
return Gfx::to_string(static_cast<Gfx::PathRole>(m_data[(size_t)index.row()]));
|
||||
return Gfx::to_string(m_data[(size_t)index.row()]);
|
||||
if (role == GUI::ModelRole::Custom)
|
||||
return m_data[(size_t)index.row()];
|
||||
|
||||
|
@ -139,6 +158,11 @@ int main(int argc, char** argv)
|
|||
ENUMERATE_COLOR_ROLES(__ENUMERATE_COLOR_ROLE)
|
||||
#undef __ENUMERATE_COLOR_ROLE
|
||||
|
||||
Vector<Gfx::FlagRole> flag_roles;
|
||||
#define __ENUMERATE_FLAG_ROLE(role) flag_roles.append(Gfx::FlagRole::role);
|
||||
ENUMERATE_FLAG_ROLES(__ENUMERATE_FLAG_ROLE)
|
||||
#undef __ENUMERATE_FLAG_ROLE
|
||||
|
||||
Vector<Gfx::MetricRole> metric_roles;
|
||||
#define __ENUMERATE_METRIC_ROLE(role) metric_roles.append(Gfx::MetricRole::role);
|
||||
ENUMERATE_METRIC_ROLES(__ENUMERATE_METRIC_ROLE)
|
||||
|
@ -156,6 +180,8 @@ int main(int argc, char** argv)
|
|||
->add<ThemeEditor::PreviewWidget>(startup_preview_palette);
|
||||
auto& color_combo_box = *main_widget.find_descendant_of_type_named<GUI::ComboBox>("color_combo_box");
|
||||
auto& color_input = *main_widget.find_descendant_of_type_named<GUI::ColorInput>("color_input");
|
||||
auto& flag_combo_box = *main_widget.find_descendant_of_type_named<GUI::ComboBox>("flag_combo_box");
|
||||
auto& flag_input = *main_widget.find_descendant_of_type_named<GUI::CheckBox>("flag_input");
|
||||
auto& metric_combo_box = *main_widget.find_descendant_of_type_named<GUI::ComboBox>("metric_combo_box");
|
||||
auto& metric_input = *main_widget.find_descendant_of_type_named<GUI::SpinBox>("metric_input");
|
||||
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)
|
|||
};
|
||||
color_input.set_color(startup_preview_palette.color(Gfx::ColorRole::Window));
|
||||
|
||||
flag_combo_box.set_model(adopt_ref(*new FlagRoleModel(flag_roles)));
|
||||
flag_combo_box.on_change = [&](auto&, auto& index) {
|
||||
auto role = index.model()->data(index, GUI::ModelRole::Custom).to_flag_role();
|
||||
flag_input.set_checked(preview_widget.preview_palette().flag(role), GUI::AllowCallback::No);
|
||||
};
|
||||
flag_combo_box.set_selected_index((size_t)Gfx::FlagRole::IsDark - 1);
|
||||
|
||||
flag_input.on_checked = [&](bool checked) {
|
||||
auto role = flag_combo_box.model()->index(flag_combo_box.selected_index()).data(GUI::ModelRole::Custom).to_flag_role();
|
||||
auto preview_palette = preview_widget.preview_palette();
|
||||
preview_palette.set_flag(role, checked);
|
||||
preview_widget.set_preview_palette(preview_palette);
|
||||
};
|
||||
flag_input.set_checked(startup_preview_palette.flag(Gfx::FlagRole::IsDark), GUI::AllowCallback::No);
|
||||
|
||||
metric_combo_box.set_model(adopt_ref(*new MetricRoleModel(metric_roles)));
|
||||
metric_combo_box.on_change = [&](auto&, auto& index) {
|
||||
auto role = index.model()->data(index, GUI::ModelRole::Custom).to_metric_role();
|
||||
|
@ -231,6 +272,9 @@ int main(int argc, char** argv)
|
|||
auto selected_color_role = color_combo_box.model()->index(color_combo_box.selected_index()).data(GUI::ModelRole::Custom).to_color_role();
|
||||
color_input.set_color(preview_widget.preview_palette().color(selected_color_role));
|
||||
|
||||
auto selected_flag_role = flag_combo_box.model()->index(flag_combo_box.selected_index()).data(GUI::ModelRole::Custom).to_flag_role();
|
||||
flag_input.set_checked(preview_widget.preview_palette().flag(selected_flag_role), GUI::AllowCallback::No);
|
||||
|
||||
auto selected_metric_role = metric_combo_box.model()->index(metric_combo_box.selected_index()).data(GUI::ModelRole::Custom).to_metric_role();
|
||||
metric_input.set_value(preview_widget.preview_palette().metric(selected_metric_role), GUI::AllowCallback::No);
|
||||
|
||||
|
@ -250,6 +294,10 @@ int main(int argc, char** argv)
|
|||
theme->write_entry("Colors", to_string(role), preview_widget.preview_palette().color(role).to_string());
|
||||
}
|
||||
|
||||
for (auto role : flag_roles) {
|
||||
theme->write_bool_entry("Flags", to_string(role), preview_widget.preview_palette().flag(role));
|
||||
}
|
||||
|
||||
for (auto role : metric_roles) {
|
||||
theme->write_num_entry("Metrics", to_string(role), preview_widget.preview_palette().metric(role));
|
||||
}
|
||||
|
@ -289,7 +337,7 @@ int main(int argc, char** argv)
|
|||
|
||||
update_window_title();
|
||||
|
||||
window->resize(480, 500);
|
||||
window->resize(480, 520);
|
||||
window->set_resizable(false);
|
||||
window->show();
|
||||
window->set_icon(app_icon.bitmap_for_size(16));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue