From cafc1df171a70829efce5b99bb79f644567ccb19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Sat, 19 Sep 2026 07:52:16 +0200 Subject: [PATCH] [VDS] Reuse the shared quick settings widget for the public decks tab PublicDecksQuickSettingsWidget was VisualDeckStorageQuickSettingsWidget minus the folders, banner and tooltip controls, with identical wiring for the shared keys and a version of the near-identical file to keep in sync by hand. Fold the Show Upload Time checkbox into the shared widget, give it a setPublicDecksMode() that hides the controls that do not apply, and delete the duplicate. --- cockatrice/CMakeLists.txt | 1 - .../public_decks_quick_settings_widget.cpp | 151 ------------------ .../tabs/public_decks_quick_settings_widget.h | 57 ------- .../widgets/tabs/tab_public_decks.cpp | 9 +- .../interface/widgets/tabs/tab_public_decks.h | 4 +- ...ual_deck_storage_quick_settings_widget.cpp | 26 ++- ...isual_deck_storage_quick_settings_widget.h | 13 ++ 7 files changed, 45 insertions(+), 216 deletions(-) delete mode 100644 cockatrice/src/interface/widgets/tabs/public_decks_quick_settings_widget.cpp delete mode 100644 cockatrice/src/interface/widgets/tabs/public_decks_quick_settings_widget.h diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 247fbbef2..58b45941c 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -385,7 +385,6 @@ set(cockatrice_SOURCES src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.cpp src/interface/widgets/tabs/api/edhrec/tab_edhrec.cpp src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.cpp - src/interface/widgets/tabs/public_decks_quick_settings_widget.cpp src/interface/widgets/tabs/tab.cpp src/interface/widgets/tabs/tab_account.cpp src/interface/widgets/tabs/tab_admin.cpp diff --git a/cockatrice/src/interface/widgets/tabs/public_decks_quick_settings_widget.cpp b/cockatrice/src/interface/widgets/tabs/public_decks_quick_settings_widget.cpp deleted file mode 100644 index 0f065dfdb..000000000 --- a/cockatrice/src/interface/widgets/tabs/public_decks_quick_settings_widget.cpp +++ /dev/null @@ -1,151 +0,0 @@ -#include "public_decks_quick_settings_widget.h" - -#include "../../../client/settings/cache_settings.h" -#include "../cards/card_size_widget.h" - -#include -#include -#include -#include -#include -#include -#include - -PublicDecksQuickSettingsWidget::PublicDecksQuickSettingsWidget(QWidget *parent) : SettingsButtonWidget(parent) -{ - // show color identity on preview tiles checkbox - showColorIdentityCheckBox = new QCheckBox(this); - showColorIdentityCheckBox->setChecked( - SettingsCache::instance().visualDeckStorage().getVisualDeckStorageShowColorIdentity()); - connect(showColorIdentityCheckBox, &QCheckBox::QT_STATE_CHANGED, this, - &PublicDecksQuickSettingsWidget::showColorIdentityChanged); - connect(showColorIdentityCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().visualDeckStorage(), - &VisualDeckStorageSettings::setVisualDeckStorageShowColorIdentity); - - // show tags on preview tiles checkbox - showTagsOnDeckPreviewsCheckBox = new QCheckBox(this); - showTagsOnDeckPreviewsCheckBox->setChecked( - SettingsCache::instance().visualDeckStorage().getVisualDeckStorageShowTagsOnDeckPreviews()); - connect(showTagsOnDeckPreviewsCheckBox, &QCheckBox::QT_STATE_CHANGED, this, - &PublicDecksQuickSettingsWidget::showTagsOnDeckPreviewsChanged); - connect(showTagsOnDeckPreviewsCheckBox, &QCheckBox::QT_STATE_CHANGED, - &SettingsCache::instance().visualDeckStorage(), - &VisualDeckStorageSettings::setVisualDeckStorageShowTagsOnDeckPreviews); - - // show the last modified / upload time on preview tiles checkbox - showUploadTimeCheckBox = new QCheckBox(this); - showUploadTimeCheckBox->setChecked( - SettingsCache::instance().visualDeckStorage().getVisualDeckStorageShowUploadTime()); - connect(showUploadTimeCheckBox, &QCheckBox::QT_STATE_CHANGED, this, - &PublicDecksQuickSettingsWidget::showUploadTimeChanged); - connect(showUploadTimeCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().visualDeckStorage(), - &VisualDeckStorageSettings::setVisualDeckStorageShowUploadTime); - - // show tag filter box checkbox - showTagFilterCheckBox = new QCheckBox(this); - showTagFilterCheckBox->setChecked( - SettingsCache::instance().visualDeckStorage().getVisualDeckStorageShowTagFilter()); - connect(showTagFilterCheckBox, &QCheckBox::QT_STATE_CHANGED, this, - &PublicDecksQuickSettingsWidget::showTagFilterChanged); - connect(showTagFilterCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().visualDeckStorage(), - &VisualDeckStorageSettings::setVisualDeckStorageShowTagFilter); - - // draw unused color identities checkbox - drawUnusedColorIdentitiesCheckBox = new QCheckBox(this); - drawUnusedColorIdentitiesCheckBox->setChecked( - SettingsCache::instance().visualDeckStorage().getVisualDeckStorageDrawUnusedColorIdentities()); - connect(drawUnusedColorIdentitiesCheckBox, &QCheckBox::QT_STATE_CHANGED, this, - &PublicDecksQuickSettingsWidget::drawUnusedColorIdentitiesChanged); - connect(drawUnusedColorIdentitiesCheckBox, &QCheckBox::QT_STATE_CHANGED, - &SettingsCache::instance().visualDeckStorage(), - &VisualDeckStorageSettings::setVisualDeckStorageDrawUnusedColorIdentities); - - // unused color identities opacity selector - auto unusedColorIdentityOpacityWidget = new QWidget(this); - - unusedColorIdentitiesOpacityLabel = new QLabel(unusedColorIdentityOpacityWidget); - unusedColorIdentitiesOpacitySpinBox = new QSpinBox(unusedColorIdentityOpacityWidget); - - unusedColorIdentitiesOpacitySpinBox->setMinimum(0); - unusedColorIdentitiesOpacitySpinBox->setMaximum(100); - unusedColorIdentitiesOpacitySpinBox->setValue( - SettingsCache::instance().visualDeckStorage().getVisualDeckStorageUnusedColorIdentitiesOpacity()); - connect(unusedColorIdentitiesOpacitySpinBox, qOverload(&QSpinBox::valueChanged), this, - &PublicDecksQuickSettingsWidget::unusedColorIdentitiesOpacityChanged); - connect(unusedColorIdentitiesOpacitySpinBox, qOverload(&QSpinBox::valueChanged), - &SettingsCache::instance().visualDeckStorage(), - &VisualDeckStorageSettings::setVisualDeckStorageUnusedColorIdentitiesOpacity); - - unusedColorIdentitiesOpacityLabel->setBuddy(unusedColorIdentitiesOpacitySpinBox); - - auto unusedColorIdentityOpacityLayout = new QHBoxLayout(unusedColorIdentityOpacityWidget); - unusedColorIdentityOpacityLayout->setContentsMargins(11, 0, 11, 0); - unusedColorIdentityOpacityLayout->addWidget(unusedColorIdentitiesOpacityLabel); - unusedColorIdentityOpacityLayout->addWidget(unusedColorIdentitiesOpacitySpinBox); - - // card size slider (kept at the bottom, like the Visual Deck Storage) - cardSizeWidget = - new CardSizeWidget(this, nullptr, SettingsCache::instance().cardsDisplay().getVisualDeckStorageCardSize()); - connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, this, - &PublicDecksQuickSettingsWidget::cardSizeChanged); - connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().cardsDisplay(), - &CardsDisplaySettings::setVisualDeckStorageCardSize); - - this->addSettingsWidget(showColorIdentityCheckBox); - this->addSettingsWidget(showTagsOnDeckPreviewsCheckBox); - this->addSettingsWidget(showUploadTimeCheckBox); - this->addSettingsWidget(showTagFilterCheckBox); - this->addSettingsWidget(drawUnusedColorIdentitiesCheckBox); - this->addSettingsWidget(unusedColorIdentityOpacityWidget); - this->addSettingsWidget(cardSizeWidget); - - connect(&SettingsCache::instance().personal(), &PersonalSettings::langChanged, this, - &PublicDecksQuickSettingsWidget::retranslateUi); - retranslateUi(); -} - -void PublicDecksQuickSettingsWidget::retranslateUi() -{ - showColorIdentityCheckBox->setText(tr("Show Color Identity")); - showTagsOnDeckPreviewsCheckBox->setText(tr("Show Tags On Deck Previews")); - showUploadTimeCheckBox->setText(tr("Show Upload Time")); - showTagFilterCheckBox->setText(tr("Show Tag Filter")); - drawUnusedColorIdentitiesCheckBox->setText(tr("Draw unused Color Identities")); - unusedColorIdentitiesOpacityLabel->setText(tr("Unused Color Identities Opacity")); - unusedColorIdentitiesOpacitySpinBox->setSuffix("%"); -} - -bool PublicDecksQuickSettingsWidget::getDrawUnusedColorIdentities() const -{ - return drawUnusedColorIdentitiesCheckBox->isChecked(); -} - -bool PublicDecksQuickSettingsWidget::getShowColorIdentity() const -{ - return showColorIdentityCheckBox->isChecked(); -} - -bool PublicDecksQuickSettingsWidget::getShowTagFilter() const -{ - return showTagFilterCheckBox->isChecked(); -} - -bool PublicDecksQuickSettingsWidget::getShowTagsOnDeckPreviews() const -{ - return showTagsOnDeckPreviewsCheckBox->isChecked(); -} - -bool PublicDecksQuickSettingsWidget::getShowUploadTime() const -{ - return showUploadTimeCheckBox->isChecked(); -} - -int PublicDecksQuickSettingsWidget::getUnusedColorIdentitiesOpacity() const -{ - return unusedColorIdentitiesOpacitySpinBox->value(); -} - -CardSizeWidget *PublicDecksQuickSettingsWidget::getCardSizeWidget() const -{ - return cardSizeWidget; -} diff --git a/cockatrice/src/interface/widgets/tabs/public_decks_quick_settings_widget.h b/cockatrice/src/interface/widgets/tabs/public_decks_quick_settings_widget.h deleted file mode 100644 index d3592703a..000000000 --- a/cockatrice/src/interface/widgets/tabs/public_decks_quick_settings_widget.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @file public_decks_quick_settings_widget.h - * @ingroup Tabs - * @brief The quick settings menu for the public decks tab. - * Manages the widgets in the quick settings menu dropdown of the public decks - * tab, and syncs their values with the same SettingsCache keys the Visual Deck - * Storage uses, so shared preview widgets (color identity, tags) behave the - * same way in both places. - */ - -#ifndef PUBLIC_DECKS_QUICK_SETTINGS_WIDGET_H -#define PUBLIC_DECKS_QUICK_SETTINGS_WIDGET_H - -#include "../quick_settings/settings_button_widget.h" - -class CardSizeWidget; -class QCheckBox; -class QLabel; -class QSpinBox; - -class PublicDecksQuickSettingsWidget : public SettingsButtonWidget -{ - Q_OBJECT - - QCheckBox *showColorIdentityCheckBox; - QCheckBox *drawUnusedColorIdentitiesCheckBox; - QCheckBox *showTagFilterCheckBox; - QCheckBox *showTagsOnDeckPreviewsCheckBox; - QCheckBox *showUploadTimeCheckBox; - QLabel *unusedColorIdentitiesOpacityLabel; - QSpinBox *unusedColorIdentitiesOpacitySpinBox; - CardSizeWidget *cardSizeWidget; - -public: - explicit PublicDecksQuickSettingsWidget(QWidget *parent = nullptr); - - void retranslateUi(); - - [[nodiscard]] bool getDrawUnusedColorIdentities() const; - [[nodiscard]] bool getShowColorIdentity() const; - [[nodiscard]] bool getShowTagFilter() const; - [[nodiscard]] bool getShowTagsOnDeckPreviews() const; - [[nodiscard]] bool getShowUploadTime() const; - [[nodiscard]] int getUnusedColorIdentitiesOpacity() const; - [[nodiscard]] CardSizeWidget *getCardSizeWidget() const; - -signals: - void drawUnusedColorIdentitiesChanged(bool enabled); - void showColorIdentityChanged(bool enabled); - void showTagFilterChanged(bool enabled); - void showTagsOnDeckPreviewsChanged(bool enabled); - void showUploadTimeChanged(bool enabled); - void unusedColorIdentitiesOpacityChanged(int opacity); - void cardSizeChanged(int scale); -}; - -#endif // PUBLIC_DECKS_QUICK_SETTINGS_WIDGET_H diff --git a/cockatrice/src/interface/widgets/tabs/tab_public_decks.cpp b/cockatrice/src/interface/widgets/tabs/tab_public_decks.cpp index dcab2645c..5d5fddaa0 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_public_decks.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_public_decks.cpp @@ -6,9 +6,9 @@ #include "../visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h" #include "../visual_deck_storage/deck_preview/public_deck_preview_widget.h" #include "../visual_deck_storage/remote_public_decks_model.h" +#include "../visual_deck_storage/visual_deck_storage_quick_settings_widget.h" #include "../visual_deck_storage/visual_deck_storage_search_widget.h" #include "../visual_deck_storage/visual_deck_storage_tag_filter_widget.h" -#include "public_decks_quick_settings_widget.h" #include "tab_supervisor.h" #include @@ -61,7 +61,8 @@ TabPublicDecks::TabPublicDecks(TabSupervisor *_tabSupervisor, AbstractClient *_c refreshButton = new QToolButton(this); refreshButton->setIcon(QPixmap("theme:icons/reload")); refreshButton->setFixedSize(32, 32); - quickSettingsWidget = new PublicDecksQuickSettingsWidget(this); + quickSettingsWidget = new VisualDeckStorageQuickSettingsWidget(this); + quickSettingsWidget->setPublicDecksMode(true); auto *filterLayout = new QHBoxLayout; filterLayout->addWidget(colorIdentityFilter); @@ -101,9 +102,9 @@ TabPublicDecks::TabPublicDecks(TabSupervisor *_tabSupervisor, AbstractClient *_c connect(colorIdentityFilter, &DeckPreviewColorIdentityFilterWidget::filterModeChanged, this, &TabPublicDecks::updateColorFilter); connect(tagFilterWidget, &VisualDeckStorageTagFilterWidget::filterChanged, this, &TabPublicDecks::updateTagFilter); - connect(quickSettingsWidget, &PublicDecksQuickSettingsWidget::cardSizeChanged, this, + connect(quickSettingsWidget, &VisualDeckStorageQuickSettingsWidget::cardSizeChanged, this, &TabPublicDecks::updateCardSize); - connect(quickSettingsWidget, &PublicDecksQuickSettingsWidget::showTagFilterChanged, this, + connect(quickSettingsWidget, &VisualDeckStorageQuickSettingsWidget::showTagFilterChanged, this, &TabPublicDecks::updateTagsVisibility); retranslateUi(); diff --git a/cockatrice/src/interface/widgets/tabs/tab_public_decks.h b/cockatrice/src/interface/widgets/tabs/tab_public_decks.h index ad0daef0d..737d866b5 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_public_decks.h +++ b/cockatrice/src/interface/widgets/tabs/tab_public_decks.h @@ -13,11 +13,11 @@ class CommandContainer; class DeckPreviewColorIdentityFilterWidget; class FlowWidget; class PublicDeckPreviewWidget; -class PublicDecksQuickSettingsWidget; class QLabel; class QToolButton; class RemotePublicDecksModel; class Response; +class VisualDeckStorageQuickSettingsWidget; class VisualDeckStorageSearchWidget; class VisualDeckStorageTagFilterWidget; @@ -69,7 +69,7 @@ private: DeckPreviewColorIdentityFilterWidget *colorIdentityFilter; VisualDeckStorageTagFilterWidget *tagFilterWidget; QToolButton *refreshButton; - PublicDecksQuickSettingsWidget *quickSettingsWidget; + VisualDeckStorageQuickSettingsWidget *quickSettingsWidget; QLabel *titleLabel; QLabel *statusLabel; QLabel *emptyLabel; diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp index 478431703..c19ac0fec 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp @@ -50,6 +50,15 @@ VisualDeckStorageQuickSettingsWidget::VisualDeckStorageQuickSettingsWidget(QWidg &SettingsCache::instance().visualDeckStorage(), &VisualDeckStorageSettings::setVisualDeckStorageShowTagsOnDeckPreviews); + // show upload time on DeckPreviewWidget checkbox + showUploadTimeCheckBox = new QCheckBox(this); + showUploadTimeCheckBox->setChecked( + SettingsCache::instance().visualDeckStorage().getVisualDeckStorageShowUploadTime()); + connect(showUploadTimeCheckBox, &QCheckBox::QT_STATE_CHANGED, this, + &VisualDeckStorageQuickSettingsWidget::showUploadTimeChanged); + connect(showUploadTimeCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().visualDeckStorage(), + &VisualDeckStorageSettings::setVisualDeckStorageShowUploadTime); + // show banner card selector checkbox showBannerCardComboBoxCheckBox = new QCheckBox(this); showBannerCardComboBoxCheckBox->setChecked( @@ -94,7 +103,7 @@ VisualDeckStorageQuickSettingsWidget::VisualDeckStorageQuickSettingsWidget(QWidg unusedColorIdentityOpacityLayout->addWidget(unusedColorIdentitiesOpacitySpinBox); // tooltip selector - auto deckPreviewTooltipWidget = new QWidget(this); + deckPreviewTooltipWidget = new QWidget(this); deckPreviewTooltipLabel = new QLabel(deckPreviewTooltipWidget); deckPreviewTooltipComboBox = new QComboBox(deckPreviewTooltipWidget); @@ -128,6 +137,7 @@ VisualDeckStorageQuickSettingsWidget::VisualDeckStorageQuickSettingsWidget(QWidg this->addSettingsWidget(showTagFilterCheckBox); this->addSettingsWidget(showColorIdentityCheckBox); this->addSettingsWidget(showTagsOnDeckPreviewsCheckBox); + this->addSettingsWidget(showUploadTimeCheckBox); this->addSettingsWidget(showBannerCardComboBoxCheckBox); this->addSettingsWidget(drawUnusedColorIdentitiesCheckBox); this->addSettingsWidget(unusedColorIdentityOpacityWidget); @@ -145,6 +155,7 @@ void VisualDeckStorageQuickSettingsWidget::retranslateUi() showTagFilterCheckBox->setText(tr("Show Tag Filter")); showColorIdentityCheckBox->setText(tr("Show Color Identity")); showTagsOnDeckPreviewsCheckBox->setText(tr("Show Tags On Deck Previews")); + showUploadTimeCheckBox->setText(tr("Show Upload Time")); showBannerCardComboBoxCheckBox->setText(tr("Show Banner Card Selection Option")); drawUnusedColorIdentitiesCheckBox->setText(tr("Draw unused Color Identities")); unusedColorIdentitiesOpacityLabel->setText(tr("Unused Color Identities Opacity")); @@ -155,6 +166,14 @@ void VisualDeckStorageQuickSettingsWidget::retranslateUi() deckPreviewTooltipComboBox->setItemText(1, tr("Filepath")); } +void VisualDeckStorageQuickSettingsWidget::setPublicDecksMode(bool enabled) +{ + const bool hidden = enabled; + showFoldersCheckBox->setVisible(!hidden); + showBannerCardComboBoxCheckBox->setVisible(!hidden); + deckPreviewTooltipWidget->setVisible(!hidden); +} + bool VisualDeckStorageQuickSettingsWidget::getShowFolders() const { return showFoldersCheckBox->isChecked(); @@ -185,6 +204,11 @@ bool VisualDeckStorageQuickSettingsWidget::getShowTagsOnDeckPreviews() const return showTagsOnDeckPreviewsCheckBox->isChecked(); } +bool VisualDeckStorageQuickSettingsWidget::getShowUploadTime() const +{ + return showUploadTimeCheckBox->isChecked(); +} + int VisualDeckStorageQuickSettingsWidget::getUnusedColorIdentitiesOpacity() const { return unusedColorIdentitiesOpacitySpinBox->value(); diff --git a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h index ea4330a15..fc250cb20 100644 --- a/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h @@ -27,10 +27,12 @@ class VisualDeckStorageQuickSettingsWidget : public SettingsButtonWidget QCheckBox *showBannerCardComboBoxCheckBox; QCheckBox *showTagFilterCheckBox; QCheckBox *showTagsOnDeckPreviewsCheckBox; + QCheckBox *showUploadTimeCheckBox; QLabel *unusedColorIdentitiesOpacityLabel; QSpinBox *unusedColorIdentitiesOpacitySpinBox; QLabel *deckPreviewTooltipLabel; QComboBox *deckPreviewTooltipComboBox; + QWidget *deckPreviewTooltipWidget; CardSizeWidget *cardSizeWidget; public: @@ -46,6 +48,15 @@ public: explicit VisualDeckStorageQuickSettingsWidget(QWidget *parent = nullptr); + /** + * @brief Hides the controls that do not apply to the public decks tab. + * + * The public decks tab reuses this widget for its quick settings menu but + * has no folders, banner selection or per-deck tooltip, so those controls + * are hidden while every shared key keeps syncing with SettingsCache. + */ + void setPublicDecksMode(bool enabled); + void retranslateUi(); [[nodiscard]] bool getShowFolders() const; @@ -54,6 +65,7 @@ public: [[nodiscard]] bool getShowBannerCardComboBox() const; [[nodiscard]] bool getShowTagFilter() const; [[nodiscard]] bool getShowTagsOnDeckPreviews() const; + [[nodiscard]] bool getShowUploadTime() const; [[nodiscard]] int getUnusedColorIdentitiesOpacity() const; [[nodiscard]] TooltipType getDeckPreviewTooltip() const; [[nodiscard]] int getCardSize() const; @@ -65,6 +77,7 @@ signals: void showBannerCardComboBoxChanged(bool enabled); void showTagFilterChanged(bool enabled); void showTagsOnDeckPreviewsChanged(bool enabled); + void showUploadTimeChanged(bool enabled); void unusedColorIdentitiesOpacityChanged(int opacity); void deckPreviewTooltipChanged(TooltipType tooltip); void cardSizeChanged(int scale);