diff --git a/Userland/Applications/BrowserSettings/BrowserSettingsWidget.cpp b/Userland/Applications/BrowserSettings/BrowserSettingsWidget.cpp index d451552798..9e20bb1294 100644 --- a/Userland/Applications/BrowserSettings/BrowserSettingsWidget.cpp +++ b/Userland/Applications/BrowserSettings/BrowserSettingsWidget.cpp @@ -8,6 +8,45 @@ #include #include #include +#include + +struct ColorScheme { + String title; + String setting_value; +}; + +class ColorSchemeModel final : public GUI::Model { + +public: + ColorSchemeModel() + { + m_color_schemes.empend("Follow system theme", "auto"); + m_color_schemes.empend("Dark", "dark"); + m_color_schemes.empend("Light", "light"); + } + + virtual ~ColorSchemeModel() = default; + + virtual int row_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return 3; } + virtual int column_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return 2; } + + virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override + { + if (role == GUI::ModelRole::TextAlignment) + return Gfx::TextAlignment::CenterLeft; + if (role == GUI::ModelRole::Display) { + if (index.column() == 0) + return m_color_schemes[index.row()].title; + else + return m_color_schemes[index.row()].setting_value; + } + + return {}; + } + +private: + Vector m_color_schemes; +}; BrowserSettingsWidget::BrowserSettingsWidget() { @@ -16,6 +55,19 @@ BrowserSettingsWidget::BrowserSettingsWidget() m_homepage_url_textbox = find_descendant_of_type_named("homepage_url_textbox"); m_homepage_url_textbox->set_text(Config::read_string("Browser", "Preferences", "Home", "about:blank")); + m_color_scheme_combobox = find_descendant_of_type_named("color_scheme_combobox"); + m_color_scheme_combobox->set_only_allow_values_from_model(true); + m_color_scheme_combobox->set_model(adopt_ref(*new ColorSchemeModel())); + m_color_scheme_combobox->set_selected_index(0); + auto selected_color_scheme = Config::read_string("Browser", "Preferences", "ColorScheme", "auto"); + for (int item_index = 0; item_index < m_color_scheme_combobox->model()->row_count(); ++item_index) { + auto scheme = m_color_scheme_combobox->model()->index(item_index, 1).data().to_string(); + if (scheme == selected_color_scheme) { + m_color_scheme_combobox->set_selected_index(item_index); + break; + } + } + m_show_bookmarks_bar_checkbox = find_descendant_of_type_named("show_bookmarks_bar_checkbox"); m_show_bookmarks_bar_checkbox->set_checked(Config::read_bool("Browser", "Preferences", "ShowBookmarksBar", true), GUI::AllowCallback::No); @@ -94,6 +146,10 @@ void BrowserSettingsWidget::apply_settings() Config::write_bool("Browser", "Preferences", "ShowBookmarksBar", m_show_bookmarks_bar_checkbox->is_checked()); + auto color_scheme_index = m_color_scheme_combobox->selected_index(); + auto color_scheme = m_color_scheme_combobox->model()->index(color_scheme_index, 1).data().to_string(); + Config::write_string("Browser", "Preferences", "ColorScheme", color_scheme); + if (!m_enable_search_engine_checkbox->is_checked()) { Config::write_string("Browser", "Preferences", "SearchEngine", {}); } else if (m_is_custom_search_engine) { diff --git a/Userland/Applications/BrowserSettings/BrowserSettingsWidget.gml b/Userland/Applications/BrowserSettings/BrowserSettingsWidget.gml index 88a8b8708b..a63df94f04 100644 --- a/Userland/Applications/BrowserSettings/BrowserSettingsWidget.gml +++ b/Userland/Applications/BrowserSettings/BrowserSettingsWidget.gml @@ -41,13 +41,35 @@ @GUI::GroupBox { title: "Appearance" - fixed_height: 64 + fixed_height: 104 layout: @GUI::VerticalBoxLayout { margins: [16, 8, 8] spacing: 2 } + @GUI::Widget { + layout: @GUI::HorizontalBoxLayout { + spacing: 16 + } + + @GUI::Label { + fixed_width: 32 + fixed_height: 32 + name: "appearance_image_label" + } + + @GUI::Label { + text: "Color scheme:" + text_alignment: "CenterLeft" + fixed_width: 110 + } + + @GUI::ComboBox { + name: "color_scheme_combobox" + } + } + @GUI::Widget { layout: @GUI::HorizontalBoxLayout { spacing: 16 diff --git a/Userland/Applications/BrowserSettings/BrowserSettingsWidget.h b/Userland/Applications/BrowserSettings/BrowserSettingsWidget.h index 34725778c7..6fe9796f04 100644 --- a/Userland/Applications/BrowserSettings/BrowserSettingsWidget.h +++ b/Userland/Applications/BrowserSettings/BrowserSettingsWidget.h @@ -22,6 +22,7 @@ private: BrowserSettingsWidget(); RefPtr m_homepage_url_textbox; + RefPtr m_color_scheme_combobox; RefPtr m_show_bookmarks_bar_checkbox; RefPtr m_auto_close_download_windows_checkbox;