Parcourir la source

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.
Sam Atkins il y a 3 ans
Parent
commit
b51d2fee05

+ 22 - 0
Userland/Applications/ThemeEditor/ThemeEditor.gml

@@ -25,6 +25,28 @@
         }
         }
     }
     }
 
 
+    @GUI::GroupBox {
+        layout: @GUI::HorizontalBoxLayout {
+            margins: [16, 8, 8, 8]
+        }
+        shrink_to_fit: true
+        title: "Flags"
+
+        @GUI::ComboBox {
+            name: "flag_combo_box"
+            model_only: true
+            fixed_width: 230
+        }
+
+        @GUI::Widget {
+        }
+
+        @GUI::CheckBox {
+            name: "flag_input"
+            fixed_width: 13
+        }
+    }
+
     @GUI::GroupBox {
     @GUI::GroupBox {
         layout: @GUI::HorizontalBoxLayout {
         layout: @GUI::HorizontalBoxLayout {
             margins: [16, 8, 8, 8]
             margins: [16, 8, 8, 8]

+ 51 - 3
Userland/Applications/ThemeEditor/main.cpp

@@ -14,6 +14,7 @@
 #include <LibGUI/Application.h>
 #include <LibGUI/Application.h>
 #include <LibGUI/BoxLayout.h>
 #include <LibGUI/BoxLayout.h>
 #include <LibGUI/Button.h>
 #include <LibGUI/Button.h>
+#include <LibGUI/CheckBox.h>
 #include <LibGUI/ColorInput.h>
 #include <LibGUI/ColorInput.h>
 #include <LibGUI/ComboBox.h>
 #include <LibGUI/ComboBox.h>
 #include <LibGUI/FilePicker.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> {
 class MetricRoleModel final : public GUI::ItemListModel<Gfx::MetricRole> {
 public:
 public:
     explicit MetricRoleModel(Vector<Gfx::MetricRole> const& data)
     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
     virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override
     {
     {
         if (role == GUI::ModelRole::Display)
         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)
         if (role == GUI::ModelRole::Custom)
             return m_data[(size_t)index.row()];
             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
     virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override
     {
     {
         if (role == GUI::ModelRole::Display)
         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)
         if (role == GUI::ModelRole::Custom)
             return m_data[(size_t)index.row()];
             return m_data[(size_t)index.row()];
 
 
@@ -139,6 +158,11 @@ int main(int argc, char** argv)
     ENUMERATE_COLOR_ROLES(__ENUMERATE_COLOR_ROLE)
     ENUMERATE_COLOR_ROLES(__ENUMERATE_COLOR_ROLE)
 #undef __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;
     Vector<Gfx::MetricRole> metric_roles;
 #define __ENUMERATE_METRIC_ROLE(role) metric_roles.append(Gfx::MetricRole::role);
 #define __ENUMERATE_METRIC_ROLE(role) metric_roles.append(Gfx::MetricRole::role);
     ENUMERATE_METRIC_ROLES(__ENUMERATE_METRIC_ROLE)
     ENUMERATE_METRIC_ROLES(__ENUMERATE_METRIC_ROLE)
@@ -156,6 +180,8 @@ int main(int argc, char** argv)
                                ->add<ThemeEditor::PreviewWidget>(startup_preview_palette);
                                ->add<ThemeEditor::PreviewWidget>(startup_preview_palette);
     auto& color_combo_box = *main_widget.find_descendant_of_type_named<GUI::ComboBox>("color_combo_box");
     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& 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_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& 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");
     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));
     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.set_model(adopt_ref(*new MetricRoleModel(metric_roles)));
     metric_combo_box.on_change = [&](auto&, auto& index) {
     metric_combo_box.on_change = [&](auto&, auto& index) {
         auto role = index.model()->data(index, GUI::ModelRole::Custom).to_metric_role();
         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();
         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));
         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();
         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);
         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());
             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) {
         for (auto role : metric_roles) {
             theme->write_num_entry("Metrics", to_string(role), preview_widget.preview_palette().metric(role));
             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();
     update_window_title();
 
 
-    window->resize(480, 500);
+    window->resize(480, 520);
     window->set_resizable(false);
     window->set_resizable(false);
     window->show();
     window->show();
     window->set_icon(app_icon.bitmap_for_size(16));
     window->set_icon(app_icon.bitmap_for_size(16));