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 4efb1f44d..8e3582420 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp @@ -1,16 +1,8 @@ #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 - * @brief A widget for adjusting card sizes using a slider. - * - * This widget allows users to dynamically change the card size in a linked FlowWidget - * and updates the application's settings accordingly. - */ CardSizeWidget::CardSizeWidget(QWidget *parent, FlowWidget *flowWidget, int defaultValue) : parent(parent), flowWidget(flowWidget) { @@ -22,8 +14,8 @@ CardSizeWidget::CardSizeWidget(QWidget *parent, FlowWidget *flowWidget, int defa cardSizeLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); cardSizeSlider = new QSlider(Qt::Horizontal, this); - cardSizeSlider->setRange(50, 250); ///< Slider range for card size adjustment. - cardSizeSlider->setValue(defaultValue); ///< Initial slider value. + cardSizeSlider->setRange(50, 250); + cardSizeSlider->setValue(defaultValue); cardSizeLayout->addWidget(cardSizeLabel); cardSizeLayout->addWidget(cardSizeSlider); @@ -32,29 +24,25 @@ CardSizeWidget::CardSizeWidget(QWidget *parent, FlowWidget *flowWidget, int defa connect(cardSizeSlider, &QSlider::valueChanged, flowWidget, &FlowWidget::setMinimumSizeToMaxSizeHint); } + // Debounce setup + debounceTimer.setSingleShot(true); + connect(&debounceTimer, &QTimer::timeout, this, [this]() { + if (qobject_cast(parentWidget())) { + SettingsCache::instance().setPrintingSelectorCardSize(pendingValue); + } else if (qobject_cast(parentWidget())) { + SettingsCache::instance().setVisualDeckStorageCardSize(pendingValue); + } + }); + connect(cardSizeSlider, &QSlider::valueChanged, this, &CardSizeWidget::updateCardSizeSetting); } -/** - * @brief Updates the card size setting in the application's cache. - * - * @param newValue The new card size value set by the slider. - */ void CardSizeWidget::updateCardSizeSetting(int 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); - } + pendingValue = newValue; + debounceTimer.start(300); // 300ms debounce time } -/** - * @brief Gets the slider widget used for adjusting the card size. - * - * @return A pointer to the QSlider object. - */ QSlider *CardSizeWidget::getSlider() const { return cardSizeSlider; 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 4bc2afc98..d79359f23 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_size_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_size_widget.h @@ -6,6 +6,7 @@ #include #include #include +#include #include class CardSizeWidget : public QWidget @@ -15,15 +16,18 @@ class CardSizeWidget : public QWidget public: explicit CardSizeWidget(QWidget *parent, FlowWidget *flowWidget = nullptr, int defaultValue = 100); [[nodiscard]] QSlider *getSlider() const; - QWidget *parent; + public slots: void updateCardSizeSetting(int newValue); private: + QWidget *parent; FlowWidget *flowWidget; QHBoxLayout *cardSizeLayout; QLabel *cardSizeLabel; QSlider *cardSizeSlider; + QTimer debounceTimer; // Debounce timer + int pendingValue; // Stores the latest slider value }; #endif // CARD_SIZE_WIDGET_H