mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-23 09:51:57 -05:00
GamesSettings+LibCards: Add setting for card-front image sets
This commit is contained in:
parent
020b858fd0
commit
d8e8b300c8
4 changed files with 68 additions and 1 deletions
|
@ -11,12 +11,15 @@
|
||||||
#include <LibCards/CardPainter.h>
|
#include <LibCards/CardPainter.h>
|
||||||
#include <LibCards/CardStack.h>
|
#include <LibCards/CardStack.h>
|
||||||
#include <LibConfig/Client.h>
|
#include <LibConfig/Client.h>
|
||||||
|
#include <LibCore/Directory.h>
|
||||||
#include <LibGUI/FileSystemModel.h>
|
#include <LibGUI/FileSystemModel.h>
|
||||||
|
#include <LibGUI/ItemListModel.h>
|
||||||
#include <LibGfx/Palette.h>
|
#include <LibGfx/Palette.h>
|
||||||
|
|
||||||
namespace GamesSettings {
|
namespace GamesSettings {
|
||||||
|
|
||||||
static constexpr StringView default_card_back_image_path = "/res/graphics/cards/backs/buggie-deck.png"sv;
|
static constexpr StringView default_card_back_image_path = "/res/graphics/cards/backs/buggie-deck.png"sv;
|
||||||
|
static constexpr StringView default_card_front_image_set = "Classic"sv;
|
||||||
|
|
||||||
class CardGamePreview final : public Cards::CardGame {
|
class CardGamePreview final : public Cards::CardGame {
|
||||||
C_OBJECT_ABSTRACT(CardGamePreview)
|
C_OBJECT_ABSTRACT(CardGamePreview)
|
||||||
|
@ -90,6 +93,24 @@ ErrorOr<void> CardSettingsWidget::initialize()
|
||||||
m_preview_frame->set_background_color(m_background_color_input->color());
|
m_preview_frame->set_background_color(m_background_color_input->color());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
m_card_front_images_combo_box = find_descendant_of_type_named<GUI::ComboBox>("cards_front_image_set");
|
||||||
|
m_card_front_sets.append("None");
|
||||||
|
TRY(Core::Directory::for_each_entry("/res/graphics/cards/fronts/"sv, Core::DirIterator::SkipParentAndBaseDir, [&](auto const& entry, auto&) -> ErrorOr<IterationDecision> {
|
||||||
|
TRY(m_card_front_sets.try_append(entry.name));
|
||||||
|
return IterationDecision::Continue;
|
||||||
|
}));
|
||||||
|
auto piece_set_model = GUI::ItemListModel<DeprecatedString>::create(m_card_front_sets);
|
||||||
|
m_card_front_images_combo_box->set_model(piece_set_model);
|
||||||
|
auto card_front_set = Config::read_string("Games"sv, "Cards"sv, "CardFrontImages"sv, default_card_front_image_set);
|
||||||
|
if (card_front_set.is_empty())
|
||||||
|
card_front_set = "None";
|
||||||
|
m_card_front_images_combo_box->set_text(card_front_set, GUI::AllowCallback::No);
|
||||||
|
m_card_front_images_combo_box->on_change = [&](auto&, auto&) {
|
||||||
|
set_modified(true);
|
||||||
|
Cards::CardPainter::the().set_front_images_set_name(card_front_images_set_name());
|
||||||
|
m_preview_frame->update();
|
||||||
|
};
|
||||||
|
|
||||||
m_card_back_image_view = find_descendant_of_type_named<GUI::IconView>("cards_back_image");
|
m_card_back_image_view = find_descendant_of_type_named<GUI::IconView>("cards_back_image");
|
||||||
m_card_back_image_view->set_model(GUI::FileSystemModel::create("/res/graphics/cards/backs"));
|
m_card_back_image_view->set_model(GUI::FileSystemModel::create("/res/graphics/cards/backs"));
|
||||||
m_card_back_image_view->set_model_column(GUI::FileSystemModel::Column::Name);
|
m_card_back_image_view->set_model_column(GUI::FileSystemModel::Column::Name);
|
||||||
|
@ -113,6 +134,7 @@ ErrorOr<void> CardSettingsWidget::initialize()
|
||||||
void CardSettingsWidget::apply_settings()
|
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, "BackgroundColor"sv, m_background_color_input->text());
|
||||||
|
Config::write_string("Games"sv, "Cards"sv, "CardFrontImages"sv, card_front_images_set_name());
|
||||||
Config::write_string("Games"sv, "Cards"sv, "CardBackImage"sv, card_back_image_path());
|
Config::write_string("Games"sv, "Cards"sv, "CardBackImage"sv, card_back_image_path());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,6 +142,11 @@ void CardSettingsWidget::reset_default_values()
|
||||||
{
|
{
|
||||||
m_background_color_input->set_color(Gfx::Color::from_rgb(0x008000));
|
m_background_color_input->set_color(Gfx::Color::from_rgb(0x008000));
|
||||||
set_card_back_image_path(default_card_back_image_path);
|
set_card_back_image_path(default_card_back_image_path);
|
||||||
|
// FIXME: `set_text()` on a combobox doesn't trigger the `on_change` callback, but it probably should!
|
||||||
|
// Until then, we have to manually tell the preview to update.
|
||||||
|
m_card_front_images_combo_box->set_text(default_card_front_image_set);
|
||||||
|
Cards::CardPainter::the().set_front_images_set_name(card_front_images_set_name());
|
||||||
|
m_preview_frame->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CardSettingsWidget::set_card_back_image_path(StringView path)
|
bool CardSettingsWidget::set_card_back_image_path(StringView path)
|
||||||
|
@ -143,6 +170,14 @@ String CardSettingsWidget::card_back_image_path() const
|
||||||
return String::from_deprecated_string(static_cast<GUI::FileSystemModel const*>(m_card_back_image_view->model())->full_path(card_back_image_index)).release_value_but_fixme_should_propagate_errors();
|
return String::from_deprecated_string(static_cast<GUI::FileSystemModel const*>(m_card_back_image_view->model())->full_path(card_back_image_index)).release_value_but_fixme_should_propagate_errors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String CardSettingsWidget::card_front_images_set_name() const
|
||||||
|
{
|
||||||
|
auto selected_set_name = m_card_front_images_combo_box->text();
|
||||||
|
if (selected_set_name == "None")
|
||||||
|
return {};
|
||||||
|
return MUST(String::from_deprecated_string(selected_set_name));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
REGISTER_WIDGET(GamesSettings, CardGamePreview);
|
REGISTER_WIDGET(GamesSettings, CardGamePreview);
|
||||||
|
|
|
@ -24,11 +24,33 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@GUI::GroupBox {
|
@GUI::GroupBox {
|
||||||
title: "Card back"
|
title: "Cards"
|
||||||
layout: @GUI::VerticalBoxLayout {
|
layout: @GUI::VerticalBoxLayout {
|
||||||
margins: [8]
|
margins: [8]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GUI::Widget {
|
||||||
|
max_height: "shrink"
|
||||||
|
layout: @GUI::HorizontalBoxLayout {
|
||||||
|
margins: [0]
|
||||||
|
}
|
||||||
|
|
||||||
|
@GUI::Label {
|
||||||
|
text: "Card fronts:"
|
||||||
|
text_alignment: "CenterLeft"
|
||||||
|
}
|
||||||
|
|
||||||
|
@GUI::ComboBox {
|
||||||
|
name: "cards_front_image_set"
|
||||||
|
model_only: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GUI::Label {
|
||||||
|
text: "Card backs:"
|
||||||
|
text_alignment: "CenterLeft"
|
||||||
|
}
|
||||||
|
|
||||||
@GUI::IconView {
|
@GUI::IconView {
|
||||||
name: "cards_back_image"
|
name: "cards_back_image"
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <LibGUI/ColorInput.h>
|
#include <LibGUI/ColorInput.h>
|
||||||
|
#include <LibGUI/ComboBox.h>
|
||||||
#include <LibGUI/Frame.h>
|
#include <LibGUI/Frame.h>
|
||||||
#include <LibGUI/IconView.h>
|
#include <LibGUI/IconView.h>
|
||||||
#include <LibGUI/ImageWidget.h>
|
#include <LibGUI/ImageWidget.h>
|
||||||
|
@ -32,9 +33,13 @@ private:
|
||||||
|
|
||||||
bool set_card_back_image_path(StringView);
|
bool set_card_back_image_path(StringView);
|
||||||
String card_back_image_path() const;
|
String card_back_image_path() const;
|
||||||
|
String card_front_images_set_name() const;
|
||||||
|
|
||||||
|
Vector<DeprecatedString> m_card_front_sets;
|
||||||
|
|
||||||
RefPtr<CardGamePreview> m_preview_frame;
|
RefPtr<CardGamePreview> m_preview_frame;
|
||||||
RefPtr<GUI::ColorInput> m_background_color_input;
|
RefPtr<GUI::ColorInput> m_background_color_input;
|
||||||
|
RefPtr<GUI::ComboBox> m_card_front_images_combo_box;
|
||||||
RefPtr<GUI::IconView> m_card_back_image_view;
|
RefPtr<GUI::IconView> m_card_back_image_view;
|
||||||
|
|
||||||
GUI::ModelIndex m_last_selected_card_back;
|
GUI::ModelIndex m_last_selected_card_back;
|
||||||
|
|
|
@ -125,6 +125,11 @@ void CardGame::config_string_did_change(StringView domain, StringView group, Str
|
||||||
update();
|
update();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (key == "CardFrontImages") {
|
||||||
|
CardPainter::the().set_front_images_set_name(String::from_utf8(value).release_value_but_fixme_should_propagate_errors());
|
||||||
|
update();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue