From b6a96089ec9eb84636c89e0ee41073b67804309f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Sun, 29 Dec 2024 17:17:31 +0100 Subject: [PATCH] Add a card size slider. --- .../client/ui/widgets/cards/card_size_widget.cpp | 15 ++++++++++++++- .../client/ui/widgets/cards/card_size_widget.h | 4 ++-- .../visual_deck_storage_widget.cpp | 7 ++++++- .../visual_deck_storage_widget.h | 2 ++ cockatrice/src/settings/cache_settings.cpp | 8 ++++++++ cockatrice/src/settings/cache_settings.h | 7 +++++++ 6 files changed, 39 insertions(+), 4 deletions(-) diff --git a/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp index 80c26d817..20aaad2ee 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp @@ -1,6 +1,9 @@ #include "card_size_widget.h" #include "../../../../settings/cache_settings.h" +#include "../printing_selector/printing_selector.h" +#include "../visual_deck_storage/visual_deck_storage_widget.h" + /** * @class CardSizeWidget @@ -40,9 +43,19 @@ CardSizeWidget::CardSizeWidget(QWidget *parent, FlowWidget *flowWidget, int defa */ void CardSizeWidget::updateCardSizeSetting(int newValue) { - SettingsCache::instance().setPrintingSelectorCardSize(newValue); + // Check the type of the parent widget + if ((parent = qobject_cast(parentWidget()))) { + SettingsCache::instance().setPrintingSelectorCardSize(newValue); + } + else if ((parent = qobject_cast(parentWidget()))) { + SettingsCache::instance().setVisualDeckStorageCardSize(newValue); + } + else { + qWarning() << "CardSizeWidget has an unexpected parent widget type. Did not set persistent setting."; + } } + /** * @brief Gets the slider widget used for adjusting the card size. * diff --git a/cockatrice/src/client/ui/widgets/cards/card_size_widget.h b/cockatrice/src/client/ui/widgets/cards/card_size_widget.h index aaafc2f45..4bc2afc98 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_size_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_size_widget.h @@ -15,11 +15,11 @@ class CardSizeWidget : public QWidget public: explicit CardSizeWidget(QWidget *parent, FlowWidget *flowWidget = nullptr, int defaultValue = 100); [[nodiscard]] QSlider *getSlider() const; + QWidget *parent; public slots: - static void updateCardSizeSetting(int newValue); + void updateCardSizeSetting(int newValue); private: - QWidget *parent; FlowWidget *flowWidget; QHBoxLayout *cardSizeLayout; QLabel *cardSizeLabel; diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp index 42278030e..ca0ccd2af 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp @@ -31,6 +31,9 @@ VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(pare flowWidget = new FlowWidget(this, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded); layout->addWidget(flowWidget); + cardSizeWidget = new CardSizeWidget(this, flowWidget, SettingsCache::instance().getVisualDeckStorageCardSize()); + layout->addWidget(cardSizeWidget); + // Connect sorting change signal to refresh the file list connect(sortComboBox, &QComboBox::currentIndexChanged, this, [this, sortComboBox]() { sortOrder = static_cast(sortComboBox->currentData().toInt()); @@ -91,7 +94,7 @@ void VisualDeckStorageWidget::refreshBannerCards() deckLoader->loadFromFile(file, DeckLoader::CockatriceFormat); deckListModel->setDeckList(new DeckLoader(*deckLoader)); - auto *display = new DeckPreviewCardPictureWidget(flowWidget, true); + auto *display = new DeckPreviewCardPictureWidget(flowWidget, false); qDebug() << "Banner card is: " << deckLoader->getBannerCard(); auto bannerCard = deckLoader->getBannerCard().isEmpty() ? CardInfoPtr() @@ -106,6 +109,8 @@ void VisualDeckStorageWidget::refreshBannerCards() &VisualDeckStorageWidget::imageClickedEvent); connect(display, &DeckPreviewCardPictureWidget::imageDoubleClicked, this, &VisualDeckStorageWidget::imageDoubleClickedEvent); + connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display, &CardInfoPictureWidget::setScaleFactor); + display->setScaleFactor(cardSizeWidget->getSlider()->value()); flowWidget->addWidget(display); } } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h index 4c53bc432..028d54886 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h @@ -6,6 +6,7 @@ #include "../../../../deck/deck_view.h" #include "../../../ui/widgets/cards/deck_preview_card_picture_widget.h" #include "../../../ui/widgets/general/layout_containers/flow_widget.h" +#include "../cards/card_size_widget.h" #include @@ -41,6 +42,7 @@ private: SortOrder sortOrder; // Current sorting option VisualDeckStorageSearchWidget *searchWidget; + CardSizeWidget *cardSizeWidget; }; #endif // VISUAL_DECK_STORAGE_WIDGET_H diff --git a/cockatrice/src/settings/cache_settings.cpp b/cockatrice/src/settings/cache_settings.cpp index e1fb59e0a..18def55cd 100644 --- a/cockatrice/src/settings/cache_settings.cpp +++ b/cockatrice/src/settings/cache_settings.cpp @@ -259,6 +259,7 @@ SettingsCache::SettingsCache() settings->value("cards/printingselectorcardsizeslidervisible", true).toBool(); printingSelectorNavigationButtonsVisible = settings->value("cards/printingselectornavigationbuttonsvisible", true).toBool(); + visualDeckStorageCardSize = settings->value("cards/visualdeckstoragecardsize", 100).toInt(); horizontalHand = settings->value("hand/horizontal", true).toBool(); invertVerticalCoordinate = settings->value("table/invert_vertical", false).toBool(); minPlayersForMultiColumnLayout = settings->value("interface/min_players_multicolumn", 4).toInt(); @@ -609,6 +610,13 @@ void SettingsCache::setPrintingSelectorNavigationButtonsVisible(QT_STATE_CHANGED emit printingSelectorNavigationButtonsVisibleChanged(); } +void SettingsCache::setVisualDeckStorageCardSize(int _visualDeckStorageCardSize) +{ + visualDeckStorageCardSize = _visualDeckStorageCardSize; + settings->setValue("cards/visualdeckstoragecardsize", visualDeckStorageCardSize); + emit visualDeckStorageCardSizeChanged(); +} + void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T _horizontalHand) { horizontalHand = static_cast(_horizontalHand); diff --git a/cockatrice/src/settings/cache_settings.h b/cockatrice/src/settings/cache_settings.h index 738c4a431..baf4800e1 100644 --- a/cockatrice/src/settings/cache_settings.h +++ b/cockatrice/src/settings/cache_settings.h @@ -59,6 +59,7 @@ signals: void printingSelectorSearchBarVisibleChanged(); void printingSelectorCardSizeSliderVisibleChanged(); void printingSelectorNavigationButtonsVisibleChanged(); + void visualDeckStorageCardSizeChanged(); void horizontalHandChanged(); void handJustificationChanged(); void invertVerticalCoordinateChanged(); @@ -123,6 +124,7 @@ private: bool printingSelectorSearchBarVisible; bool printingSelectorCardSizeSliderVisible; bool printingSelectorNavigationButtonsVisible; + int visualDeckStorageCardSize; bool horizontalHand; bool invertVerticalCoordinate; int minPlayersForMultiColumnLayout; @@ -369,6 +371,10 @@ public: { return printingSelectorNavigationButtonsVisible; } + int getVisualDeckStorageCardSize() const + { + return visualDeckStorageCardSize; + } bool getHorizontalHand() const { return horizontalHand; @@ -677,6 +683,7 @@ public slots: void setPrintingSelectorSearchBarVisible(QT_STATE_CHANGED_T _searchBarVisible); void setPrintingSelectorCardSizeSliderVisible(QT_STATE_CHANGED_T _cardSizeSliderVisible); void setPrintingSelectorNavigationButtonsVisible(QT_STATE_CHANGED_T _navigationButtonsVisible); + void setVisualDeckStorageCardSize(int _visualDeckStorageCardSize); void setHorizontalHand(QT_STATE_CHANGED_T _horizontalHand); void setInvertVerticalCoordinate(QT_STATE_CHANGED_T _invertVerticalCoordinate); void setMinPlayersForMultiColumnLayout(int _minPlayersForMultiColumnLayout);