BrowserSettings: Add preferred-color-scheme setting

This commit is contained in:
Sam Atkins 2021-11-25 13:44:05 +00:00 committed by Andreas Kling
parent 11466c5316
commit f2b8ae7d86
Notes: sideshowbarker 2024-07-18 00:39:19 +09:00
3 changed files with 80 additions and 1 deletions

View file

@ -8,6 +8,45 @@
#include <Applications/BrowserSettings/BrowserSettingsWidgetGML.h> #include <Applications/BrowserSettings/BrowserSettingsWidgetGML.h>
#include <LibConfig/Client.h> #include <LibConfig/Client.h>
#include <LibGUI/JsonArrayModel.h> #include <LibGUI/JsonArrayModel.h>
#include <LibGUI/Model.h>
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<ColorScheme> m_color_schemes;
};
BrowserSettingsWidget::BrowserSettingsWidget() BrowserSettingsWidget::BrowserSettingsWidget()
{ {
@ -16,6 +55,19 @@ BrowserSettingsWidget::BrowserSettingsWidget()
m_homepage_url_textbox = find_descendant_of_type_named<GUI::TextBox>("homepage_url_textbox"); m_homepage_url_textbox = find_descendant_of_type_named<GUI::TextBox>("homepage_url_textbox");
m_homepage_url_textbox->set_text(Config::read_string("Browser", "Preferences", "Home", "about:blank")); m_homepage_url_textbox->set_text(Config::read_string("Browser", "Preferences", "Home", "about:blank"));
m_color_scheme_combobox = find_descendant_of_type_named<GUI::ComboBox>("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<GUI::CheckBox>("show_bookmarks_bar_checkbox"); m_show_bookmarks_bar_checkbox = find_descendant_of_type_named<GUI::CheckBox>("show_bookmarks_bar_checkbox");
m_show_bookmarks_bar_checkbox->set_checked(Config::read_bool("Browser", "Preferences", "ShowBookmarksBar", true), GUI::AllowCallback::No); 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()); 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()) { if (!m_enable_search_engine_checkbox->is_checked()) {
Config::write_string("Browser", "Preferences", "SearchEngine", {}); Config::write_string("Browser", "Preferences", "SearchEngine", {});
} else if (m_is_custom_search_engine) { } else if (m_is_custom_search_engine) {

View file

@ -41,13 +41,35 @@
@GUI::GroupBox { @GUI::GroupBox {
title: "Appearance" title: "Appearance"
fixed_height: 64 fixed_height: 104
layout: @GUI::VerticalBoxLayout { layout: @GUI::VerticalBoxLayout {
margins: [16, 8, 8] margins: [16, 8, 8]
spacing: 2 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 { @GUI::Widget {
layout: @GUI::HorizontalBoxLayout { layout: @GUI::HorizontalBoxLayout {
spacing: 16 spacing: 16

View file

@ -22,6 +22,7 @@ private:
BrowserSettingsWidget(); BrowserSettingsWidget();
RefPtr<GUI::TextBox> m_homepage_url_textbox; RefPtr<GUI::TextBox> m_homepage_url_textbox;
RefPtr<GUI::ComboBox> m_color_scheme_combobox;
RefPtr<GUI::CheckBox> m_show_bookmarks_bar_checkbox; RefPtr<GUI::CheckBox> m_show_bookmarks_bar_checkbox;
RefPtr<GUI::CheckBox> m_auto_close_download_windows_checkbox; RefPtr<GUI::CheckBox> m_auto_close_download_windows_checkbox;