BrowserSettings: Add preferred-color-scheme setting
This commit is contained in:
parent
11466c5316
commit
f2b8ae7d86
Notes:
sideshowbarker
2024-07-18 00:39:19 +09:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/SerenityOS/serenity/commit/f2b8ae7d868 Pull-request: https://github.com/SerenityOS/serenity/pull/11072
3 changed files with 80 additions and 1 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue