diff --git a/Userland/Applications/BrowserSettings/main.cpp b/Userland/Applications/BrowserSettings/main.cpp index 965eb16291a..ff9a9304bcd 100644 --- a/Userland/Applications/BrowserSettings/main.cpp +++ b/Userland/Applications/BrowserSettings/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -28,8 +28,8 @@ ErrorOr serenity_main(Main::Arguments arguments) auto window = TRY(GUI::SettingsWindow::create("Browser Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); window->set_icon(app_icon.bitmap_for_size(16)); - (void)TRY(window->add_tab("Browser")); - (void)TRY(window->add_tab("Content Filtering")); + (void)TRY(window->add_tab("Browser", "browser")); + (void)TRY(window->add_tab("Content Filtering", "content-filtering")); window->show(); return app->exec(); diff --git a/Userland/Applications/ClockSettings/main.cpp b/Userland/Applications/ClockSettings/main.cpp index 72e81ea9444..eaa0b26287d 100644 --- a/Userland/Applications/ClockSettings/main.cpp +++ b/Userland/Applications/ClockSettings/main.cpp @@ -29,8 +29,8 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-analog-clock"); // FIXME: Create a ClockSettings icon. auto window = TRY(GUI::SettingsWindow::create("Clock Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); - (void)TRY(window->add_tab("Clock")); - (void)TRY(window->add_tab("Time Zone")); + (void)TRY(window->add_tab("Clock", "clock")); + (void)TRY(window->add_tab("Time Zone", "time-zone")); window->set_icon(app_icon.bitmap_for_size(16)); window->resize(540, 570); diff --git a/Userland/Applications/DisplaySettings/main.cpp b/Userland/Applications/DisplaySettings/main.cpp index 154d9da3939..b4bfcc0f7e6 100644 --- a/Userland/Applications/DisplaySettings/main.cpp +++ b/Userland/Applications/DisplaySettings/main.cpp @@ -1,7 +1,7 @@ /* * Copyright (c) 2019-2020, Jesse Buhagiar * Copyright (c) 2021, Andreas Kling - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -30,11 +30,11 @@ ErrorOr serenity_main(Main::Arguments arguments) bool background_settings_changed = false; auto window = TRY(GUI::SettingsWindow::create("Display Settings")); - (void)TRY(window->add_tab("Background", background_settings_changed)); - (void)TRY(window->add_tab("Themes", background_settings_changed)); - (void)TRY(window->add_tab("Fonts")); - (void)TRY(window->add_tab("Monitor")); - (void)TRY(window->add_tab("Workspaces")); + (void)TRY(window->add_tab("Background", "background", background_settings_changed)); + (void)TRY(window->add_tab("Themes", "themes", background_settings_changed)); + (void)TRY(window->add_tab("Fonts", "fonts")); + (void)TRY(window->add_tab("Monitor", "monitor")); + (void)TRY(window->add_tab("Workspaces", "workspaces")); window->set_icon(app_icon.bitmap_for_size(16)); diff --git a/Userland/Applications/KeyboardSettings/main.cpp b/Userland/Applications/KeyboardSettings/main.cpp index c6d0faf3379..acc4f2076c2 100644 --- a/Userland/Applications/KeyboardSettings/main.cpp +++ b/Userland/Applications/KeyboardSettings/main.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2020, Hüseyin Aslıtürk - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -31,7 +31,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto window = TRY(GUI::SettingsWindow::create("Keyboard Settings")); window->set_icon(app_icon.bitmap_for_size(16)); - auto keyboard_settings_widget = TRY(window->add_tab("Keyboard")); + auto keyboard_settings_widget = TRY(window->add_tab("Keyboard", "keyboard")); window->on_active_window_change = [&](bool is_active_window) { keyboard_settings_widget->window_activated(is_active_window); diff --git a/Userland/Applications/MailSettings/main.cpp b/Userland/Applications/MailSettings/main.cpp index aa86bb2dd8a..3716c6abb0e 100644 --- a/Userland/Applications/MailSettings/main.cpp +++ b/Userland/Applications/MailSettings/main.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2021, the SerenityOS developers. - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -28,7 +28,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-mail"); auto window = TRY(GUI::SettingsWindow::create("Mail Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); - (void)TRY(window->add_tab("Mail")); + (void)TRY(window->add_tab("Mail", "mail")); window->set_icon(app_icon.bitmap_for_size(16)); window->show(); diff --git a/Userland/Applications/MouseSettings/main.cpp b/Userland/Applications/MouseSettings/main.cpp index 8d8d91c3087..18fbc2dc2ce 100644 --- a/Userland/Applications/MouseSettings/main.cpp +++ b/Userland/Applications/MouseSettings/main.cpp @@ -2,7 +2,7 @@ * Copyright (c) 2020, Idan Horowitz * Copyright (c) 2021, the SerenityOS developers. * Copyright (c) 2021, Andreas Kling - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -26,8 +26,8 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app_icon = GUI::Icon::default_icon("app-mouse"); auto window = TRY(GUI::SettingsWindow::create("Mouse Settings", GUI::SettingsWindow::ShowDefaultsButton::Yes)); - (void)TRY(window->add_tab("Mouse")); - (void)TRY(window->add_tab("Cursor Theme")); + (void)TRY(window->add_tab("Mouse", "mouse")); + (void)TRY(window->add_tab("Cursor Theme", "cursor-theme")); window->set_icon(app_icon.bitmap_for_size(16)); window->show(); diff --git a/Userland/Applications/TerminalSettings/main.cpp b/Userland/Applications/TerminalSettings/main.cpp index 865a08d085e..655aeee61e3 100644 --- a/Userland/Applications/TerminalSettings/main.cpp +++ b/Userland/Applications/TerminalSettings/main.cpp @@ -28,8 +28,8 @@ ErrorOr serenity_main(Main::Arguments arguments) auto window = TRY(GUI::SettingsWindow::create("Terminal Settings")); window->set_icon(app_icon.bitmap_for_size(16)); - (void)TRY(window->add_tab("Terminal")); - (void)TRY(window->add_tab("View")); + (void)TRY(window->add_tab("Terminal", "terminal")); + (void)TRY(window->add_tab("View", "view")); window->show(); return app->exec(); diff --git a/Userland/Libraries/LibGUI/SettingsWindow.cpp b/Userland/Libraries/LibGUI/SettingsWindow.cpp index 84d24bab398..2a416872a41 100644 --- a/Userland/Libraries/LibGUI/SettingsWindow.cpp +++ b/Userland/Libraries/LibGUI/SettingsWindow.cpp @@ -2,7 +2,7 @@ * Copyright (c) 2020, Idan Horowitz * Copyright (c) 2021-2022, the SerenityOS developers. * Copyright (c) 2021, Andreas Kling - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -41,9 +41,9 @@ ErrorOr> SettingsWindow::create(String title, Show window->m_reset_button = TRY(button_container->try_add("Defaults")); window->m_reset_button->set_fixed_width(75); window->m_reset_button->on_click = [window = window->make_weak_ptr()](auto) mutable { - for (auto& tab : window->m_tabs) { - tab.reset_default_values(); - tab.apply_settings(); + for (auto& [id, tab] : window->m_tabs) { + tab->reset_default_values(); + tab->apply_settings(); } }; } @@ -53,24 +53,24 @@ ErrorOr> SettingsWindow::create(String title, Show window->m_ok_button = TRY(button_container->try_add("OK")); window->m_ok_button->set_fixed_width(75); window->m_ok_button->on_click = [window = window->make_weak_ptr()](auto) mutable { - for (auto& tab : window->m_tabs) - tab.apply_settings(); + for (auto& [id, tab] : window->m_tabs) + tab->apply_settings(); GUI::Application::the()->quit(); }; window->m_cancel_button = TRY(button_container->try_add("Cancel")); window->m_cancel_button->set_fixed_width(75); window->m_cancel_button->on_click = [window = window->make_weak_ptr()](auto) mutable { - for (auto& tab : window->m_tabs) - tab.cancel_settings(); + for (auto& [id, tab] : window->m_tabs) + tab->cancel_settings(); GUI::Application::the()->quit(); }; window->m_apply_button = TRY(button_container->try_add("Apply")); window->m_apply_button->set_fixed_width(75); window->m_apply_button->on_click = [window = window->make_weak_ptr()](auto) mutable { - for (auto& tab : window->m_tabs) - tab.apply_settings(); + for (auto& [id, tab] : window->m_tabs) + tab->apply_settings(); }; return window; diff --git a/Userland/Libraries/LibGUI/SettingsWindow.h b/Userland/Libraries/LibGUI/SettingsWindow.h index 766ccdbdcdf..4232396efc0 100644 --- a/Userland/Libraries/LibGUI/SettingsWindow.h +++ b/Userland/Libraries/LibGUI/SettingsWindow.h @@ -1,13 +1,14 @@ /* * Copyright (c) 2020, Idan Horowitz * Copyright (c) 2021-2022, the SerenityOS developers. - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once +#include #include #include #include @@ -34,10 +35,10 @@ public: virtual ~SettingsWindow() override = default; template - ErrorOr> add_tab(String title, Args&&... args) + ErrorOr> add_tab(String title, StringView id, Args&&... args) { auto tab = TRY(m_tab_widget->try_add_tab(move(title), forward(args)...)); - TRY(m_tabs.try_append(tab)); + TRY(m_tabs.try_set(id, tab)); return tab; } @@ -45,7 +46,7 @@ private: SettingsWindow() = default; RefPtr m_tab_widget; - NonnullRefPtrVector m_tabs; + HashMap> m_tabs; RefPtr m_ok_button; RefPtr m_cancel_button;