diff --git a/Base/res/icons/cards/ladyball-deck.png b/Base/res/icons/cards/ladyball-deck.png new file mode 100644 index 0000000000..8a74a3b184 Binary files /dev/null and b/Base/res/icons/cards/ladyball-deck.png differ diff --git a/Base/res/icons/cards/yak-deck.png b/Base/res/icons/cards/yak-deck.png new file mode 100644 index 0000000000..cbdac33b31 Binary files /dev/null and b/Base/res/icons/cards/yak-deck.png differ diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.cpp b/Userland/Applications/GamesSettings/CardSettingsWidget.cpp index cf13e413f3..edb7914dd4 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.cpp +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.cpp @@ -7,6 +7,9 @@ #include "CardSettingsWidget.h" #include #include +#include + +static constexpr StringView default_card_back_image_path = "/res/icons/cards/buggie-deck.png"sv; CardSettingsWidget::CardSettingsWidget() { @@ -16,14 +19,43 @@ CardSettingsWidget::CardSettingsWidget() auto background_color = Gfx::Color::from_string(Config::read_string("Games"sv, "Cards"sv, "BackgroundColor"sv)).value_or(Gfx::Color::from_rgb(0x008000)); m_background_color_input->set_color(background_color, GUI::AllowCallback::No); m_background_color_input->on_change = [&]() { set_modified(true); }; + + m_card_back_image_view = find_descendant_of_type_named("cards_back_image"); + m_card_back_image_view->set_model(GUI::FileSystemModel::create("/res/icons/cards")); + m_card_back_image_view->set_model_column(GUI::FileSystemModel::Column::Name); + if (!set_card_back_image_path(Config::read_string("Games"sv, "Cards"sv, "CardBackImage"sv))) + set_card_back_image_path(default_card_back_image_path); + m_card_back_image_view->on_selection_change = [&]() { + if (m_card_back_image_view->selection().is_empty()) + return; + set_modified(true); + }; } void CardSettingsWidget::apply_settings() { Config::write_string("Games"sv, "Cards"sv, "BackgroundColor"sv, m_background_color_input->text()); + Config::write_string("Games"sv, "Cards"sv, "CardBackImage"sv, card_back_image_path()); } void CardSettingsWidget::reset_default_values() { m_background_color_input->set_color(Gfx::Color::from_rgb(0x008000)); + set_card_back_image_path(default_card_back_image_path); +} + +bool CardSettingsWidget::set_card_back_image_path(String const& path) +{ + auto index = static_cast(m_card_back_image_view->model())->index(path, m_card_back_image_view->model_column()); + if (index.is_valid()) { + m_card_back_image_view->set_cursor(index, GUI::AbstractView::SelectionUpdate::Set); + return true; + } + return false; +} + +String CardSettingsWidget::card_back_image_path() const +{ + auto card_back_image_index = m_card_back_image_view->selection().first(); + return static_cast(m_card_back_image_view->model())->full_path(card_back_image_index); } diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.gml b/Userland/Applications/GamesSettings/CardSettingsWidget.gml index 6cc6a6e2dd..a40621564c 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.gml +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.gml @@ -16,4 +16,15 @@ has_alpha_channel: false } } + + @GUI::GroupBox { + title: "Card Back" + layout: @GUI::VerticalBoxLayout { + margins: [8] + } + + @GUI::IconView { + name: "cards_back_image" + } + } } diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.h b/Userland/Applications/GamesSettings/CardSettingsWidget.h index 503a445eed..2d828a2a0f 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.h +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.h @@ -7,6 +7,7 @@ #pragma once #include +#include #include class CardSettingsWidget final : public GUI::SettingsWindow::Tab { @@ -20,5 +21,9 @@ public: private: CardSettingsWidget(); + bool set_card_back_image_path(String const&); + String card_back_image_path() const; + RefPtr m_background_color_input; + RefPtr m_card_back_image_view; }; diff --git a/Userland/Applications/GamesSettings/main.cpp b/Userland/Applications/GamesSettings/main.cpp index 6753f9355d..9aea881ae3 100644 --- a/Userland/Applications/GamesSettings/main.cpp +++ b/Userland/Applications/GamesSettings/main.cpp @@ -15,7 +15,7 @@ ErrorOr serenity_main(Main::Arguments arguments) { - TRY(Core::System::pledge("stdio rpath recvfd sendfd unix")); + TRY(Core::System::pledge("stdio rpath recvfd sendfd unix thread")); auto app = TRY(GUI::Application::try_create(arguments)); Config::pledge_domain("Games");