From c4e42b94f97300d6d1a3fec2b37989bc7f237b2f Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Tue, 6 May 2025 18:31:01 -0700 Subject: [PATCH] Refactor CardSizeWidget: don't update setting directly (#5903) --- .../src/client/ui/widgets/cards/card_size_widget.cpp | 9 +-------- .../src/client/ui/widgets/cards/card_size_widget.h | 10 +++++++++- .../ui/widgets/printing_selector/printing_selector.cpp | 2 ++ .../visual_deck_storage/visual_deck_storage_widget.cpp | 2 ++ 4 files changed, 14 insertions(+), 9 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 be231e67a..7ce8e71c4 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp @@ -34,14 +34,7 @@ CardSizeWidget::CardSizeWidget(QWidget *parent, FlowWidget *_flowWidget, int def // Debounce setup debounceTimer.setSingleShot(true); - connect(&debounceTimer, &QTimer::timeout, this, [this]() { - // Check the type of the parent widget - if (qobject_cast(parentWidget())) { - SettingsCache::instance().setPrintingSelectorCardSize(pendingValue); - } else if (qobject_cast(parentWidget())) { - SettingsCache::instance().setVisualDeckStorageCardSize(pendingValue); - } - }); + connect(&debounceTimer, &QTimer::timeout, this, [this] { emit cardSizeSettingUpdated(pendingValue); }); connect(cardSizeSlider, &QSlider::valueChanged, this, &CardSizeWidget::updateCardSizeSetting); } 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 d79359f23..1631fa562 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_size_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_size_widget.h @@ -17,9 +17,17 @@ public: explicit CardSizeWidget(QWidget *parent, FlowWidget *flowWidget = nullptr, int defaultValue = 100); [[nodiscard]] QSlider *getSlider() const; -public slots: +private slots: void updateCardSizeSetting(int newValue); +signals: + /** + * Emitted when the slider value changes, but on a debounce timer. + * Any parents that care about saving the value to settings should use this signal to indicate when to save the new + * value to settings. + */ + void cardSizeSettingUpdated(int newValue); + private: QWidget *parent; FlowWidget *flowWidget; diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.cpp b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.cpp index ef3816049..b75ca213e 100644 --- a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.cpp +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.cpp @@ -70,6 +70,8 @@ PrintingSelector::PrintingSelector(QWidget *parent, AbstractTabDeckEditor *_deck cardSizeWidget = new CardSizeWidget(displayOptionsWidget, flowWidget, SettingsCache::instance().getPrintingSelectorCardSize()); + connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance(), + &SettingsCache::setPrintingSelectorCardSize); displayOptionsWidget->addSettingsWidget(sortToolBar); displayOptionsWidget->addSettingsWidget(navigationCheckBox); 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 5a27728a3..34dd4c808 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 @@ -104,6 +104,8 @@ VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(pare // card size slider cardSizeWidget = new CardSizeWidget(this, nullptr, SettingsCache::instance().getVisualDeckStorageCardSize()); + connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance(), + &SettingsCache::setVisualDeckStorageCardSize); quickSettingsWidget = new SettingsButtonWidget(this); quickSettingsWidget->addSettingsWidget(showFoldersCheckBox);