From d51620640b3d6ba671d07ee470ab9083feace38a Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Mon, 12 May 2025 14:39:58 -0700 Subject: [PATCH] [VDS] Add setting to show deck filepath in tooltip (#5899) * [VDS] Show deck filepath in tooltip * Make tooltip type into a setting * Fix build failure --- .../deck_preview/deck_preview_widget.cpp | 24 +++++++++++++- .../deck_preview/deck_preview_widget.h | 1 + ...ual_deck_storage_quick_settings_widget.cpp | 31 +++++++++++++++++++ ...isual_deck_storage_quick_settings_widget.h | 15 +++++++++ cockatrice/src/settings/cache_settings.cpp | 7 +++++ cockatrice/src/settings/cache_settings.h | 6 ++++ dbconverter/src/mocks.cpp | 3 ++ tests/carddatabase/mocks.cpp | 3 ++ 8 files changed, 89 insertions(+), 1 deletion(-) diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp index 556968d2b..165160718 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp @@ -46,6 +46,8 @@ DeckPreviewWidget::DeckPreviewWidget(QWidget *_parent, &DeckPreviewWidget::updateTagsVisibility); connect(&SettingsCache::instance(), &SettingsCache::visualDeckStorageShowBannerCardComboBoxChanged, this, &DeckPreviewWidget::updateBannerCardComboBoxVisibility); + connect(visualDeckStorageWidget->settings(), &VisualDeckStorageQuickSettingsWidget::deckPreviewTooltipChanged, this, + &DeckPreviewWidget::refreshBannerCardToolTip); layout->addWidget(bannerCardDisplayWidget); } @@ -79,7 +81,6 @@ void DeckPreviewWidget::initializeUi(const bool deckLoadSuccess) bannerCardDisplayWidget->setCard(bannerCard); bannerCardDisplayWidget->setFontSize(24); - refreshBannerCardText(); setFilePath(deckLoader->getLastFileName()); colorIdentityWidget = new ColorIdentityWidget(this, getColorIdentity()); @@ -104,6 +105,8 @@ void DeckPreviewWidget::initializeUi(const bool deckLoadSuccess) layout->addWidget(bannerCardLabel); layout->addWidget(bannerCardComboBox); + refreshBannerCardText(); + retranslateUi(); } @@ -184,10 +187,29 @@ void DeckPreviewWidget::setFilePath(const QString &_filePath) filePath = _filePath; } +/** + * Refreshes the banner card text. + * This also calls `refreshBannerCardToolTip`, since those two often need to be updated together. + */ void DeckPreviewWidget::refreshBannerCardText() { bannerCardDisplayWidget->setOverlayText( deckLoader->getName().isEmpty() ? QFileInfo(deckLoader->getLastFileName()).fileName() : deckLoader->getName()); + + refreshBannerCardToolTip(); +} + +void DeckPreviewWidget::refreshBannerCardToolTip() +{ + auto type = visualDeckStorageWidget->settings()->getDeckPreviewTooltip(); + switch (type) { + case VisualDeckStorageQuickSettingsWidget::TooltipType::None: + bannerCardDisplayWidget->setToolTip(""); + break; + case VisualDeckStorageQuickSettingsWidget::TooltipType::Filepath: + bannerCardDisplayWidget->setToolTip(filePath); + break; + } } void DeckPreviewWidget::updateBannerCardComboBox() diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h index 8b594a9db..7c0ff1ad4 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h @@ -49,6 +49,7 @@ signals: public slots: void setFilePath(const QString &filePath); void refreshBannerCardText(); + void refreshBannerCardToolTip(); void updateBannerCardComboBox(); void setBannerCard(int); void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp index 3b9063a9b..cd085a511 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp @@ -4,6 +4,7 @@ #include "visual_deck_storage_widget.h" #include +#include #include VisualDeckStorageQuickSettingsWidget::VisualDeckStorageQuickSettingsWidget(QWidget *parent) @@ -80,6 +81,26 @@ VisualDeckStorageQuickSettingsWidget::VisualDeckStorageQuickSettingsWidget(QWidg unusedColorIdentityOpacityLayout->addWidget(unusedColorIdentitiesOpacityLabel); unusedColorIdentityOpacityLayout->addWidget(unusedColorIdentitiesOpacitySpinBox); + // tooltip selector + auto deckPreviewTooltipWidget = new QWidget(this); + + deckPreviewTooltipLabel = new QLabel(deckPreviewTooltipWidget); + deckPreviewTooltipComboBox = new QComboBox(deckPreviewTooltipWidget); + deckPreviewTooltipComboBox->setFocusPolicy(Qt::StrongFocus); + deckPreviewTooltipComboBox->addItem("", TooltipType::None); + deckPreviewTooltipComboBox->addItem("", TooltipType::Filepath); + + deckPreviewTooltipComboBox->setCurrentIndex(SettingsCache::instance().getVisualDeckStorageTooltipType()); + connect(deckPreviewTooltipComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, + [this] { emit deckPreviewTooltipChanged(getDeckPreviewTooltip()); }); + connect(deckPreviewTooltipComboBox, QOverload::of(&QComboBox::currentIndexChanged), &SettingsCache::instance(), + &SettingsCache::setVisualDeckStorageTooltipType); + + auto deckPreviewTooltipLayout = new QHBoxLayout(deckPreviewTooltipWidget); + deckPreviewTooltipLayout->setContentsMargins(11, 0, 11, 0); + deckPreviewTooltipLayout->addWidget(deckPreviewTooltipLabel); + deckPreviewTooltipLayout->addWidget(deckPreviewTooltipComboBox); + // card size slider cardSizeWidget = new CardSizeWidget(this, nullptr, SettingsCache::instance().getVisualDeckStorageCardSize()); connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, this, @@ -95,6 +116,7 @@ VisualDeckStorageQuickSettingsWidget::VisualDeckStorageQuickSettingsWidget(QWidg this->addSettingsWidget(searchFolderNamesCheckBox); this->addSettingsWidget(drawUnusedColorIdentitiesCheckBox); this->addSettingsWidget(unusedColorIdentityOpacityWidget); + this->addSettingsWidget(deckPreviewTooltipWidget); this->addSettingsWidget(cardSizeWidget); connect(&SettingsCache::instance(), &SettingsCache::langChanged, this, @@ -112,6 +134,10 @@ void VisualDeckStorageQuickSettingsWidget::retranslateUi() drawUnusedColorIdentitiesCheckBox->setText(tr("Draw unused Color Identities")); unusedColorIdentitiesOpacityLabel->setText(tr("Unused Color Identities Opacity")); unusedColorIdentitiesOpacitySpinBox->setSuffix("%"); + + deckPreviewTooltipLabel->setText(tr("Deck tooltip:")); + deckPreviewTooltipComboBox->setItemText(0, tr("None")); + deckPreviewTooltipComboBox->setItemText(1, tr("Filepath")); } bool VisualDeckStorageQuickSettingsWidget::getShowFolders() const @@ -149,6 +175,11 @@ int VisualDeckStorageQuickSettingsWidget::getUnusedColorIdentitiesOpacity() cons return unusedColorIdentitiesOpacitySpinBox->value(); } +VisualDeckStorageQuickSettingsWidget::TooltipType VisualDeckStorageQuickSettingsWidget::getDeckPreviewTooltip() const +{ + return deckPreviewTooltipComboBox->currentData().value(); +} + int VisualDeckStorageQuickSettingsWidget::getCardSize() const { return cardSizeWidget->getSlider()->value(); diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h index da82b177b..d27a9053b 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.h @@ -7,6 +7,7 @@ class CardSizeWidget; class QLabel; class QSpinBox; class QCheckBox; +class QComboBox; /** * The VDS's quick settings menu. @@ -25,9 +26,21 @@ class VisualDeckStorageQuickSettingsWidget : public SettingsButtonWidget QCheckBox *searchFolderNamesCheckBox; QLabel *unusedColorIdentitiesOpacityLabel; QSpinBox *unusedColorIdentitiesOpacitySpinBox; + QLabel *deckPreviewTooltipLabel; + QComboBox *deckPreviewTooltipComboBox; CardSizeWidget *cardSizeWidget; public: + /** + * The info to display in the deck preview's banner card tooltip. + */ + enum TooltipType + { + None, + Filepath + }; + Q_ENUM(TooltipType) + explicit VisualDeckStorageQuickSettingsWidget(QWidget *parent = nullptr); void retranslateUi(); @@ -39,6 +52,7 @@ public: bool getShowTagsOnDeckPreviews() const; bool getSearchFolderNames() const; int getUnusedColorIdentitiesOpacity() const; + TooltipType getDeckPreviewTooltip() const; int getCardSize() const; signals: @@ -49,6 +63,7 @@ signals: void showTagsOnDeckPreviewsChanged(bool enabled); void searchFolderNamesChanged(bool enabled); void unusedColorIdentitiesOpacityChanged(int opacity); + void deckPreviewTooltipChanged(TooltipType tooltip); void cardSizeChanged(int scale); }; diff --git a/cockatrice/src/settings/cache_settings.cpp b/cockatrice/src/settings/cache_settings.cpp index ef369641b..acd8cd581 100644 --- a/cockatrice/src/settings/cache_settings.cpp +++ b/cockatrice/src/settings/cache_settings.cpp @@ -280,6 +280,7 @@ SettingsCache::SettingsCache() settings->value("interface/visualdeckstoragedrawunusedcoloridentities", true).toBool(); visualDeckStorageUnusedColorIdentitiesOpacity = settings->value("interface/visualdeckstorageunusedcoloridentitiesopacity", 15).toInt(); + visualDeckStorageTooltipType = settings->value("interface/visualdeckstoragetooltiptype", 0).toInt(); visualDeckStoragePromptForConversion = settings->value("interface/visualdeckstoragepromptforconversion", true).toBool(); visualDeckStorageAlwaysConvert = settings->value("interface/visualdeckstoragealwaysconvert", false).toBool(); @@ -774,6 +775,12 @@ void SettingsCache::setVisualDeckStorageUnusedColorIdentitiesOpacity(int _visual emit visualDeckStorageUnusedColorIdentitiesOpacityChanged(visualDeckStorageUnusedColorIdentitiesOpacity); } +void SettingsCache::setVisualDeckStorageTooltipType(int value) +{ + visualDeckStorageTooltipType = value; + settings->setValue("interface/visualdeckstoragetooltiptype", visualDeckStorageTooltipType); +} + void SettingsCache::setVisualDeckStoragePromptForConversion(bool _visualDeckStoragePromptForConversion) { visualDeckStoragePromptForConversion = _visualDeckStoragePromptForConversion; diff --git a/cockatrice/src/settings/cache_settings.h b/cockatrice/src/settings/cache_settings.h index 94cb2ed6a..f0861af58 100644 --- a/cockatrice/src/settings/cache_settings.h +++ b/cockatrice/src/settings/cache_settings.h @@ -150,6 +150,7 @@ private: int visualDeckStorageCardSize; bool visualDeckStorageDrawUnusedColorIdentities; int visualDeckStorageUnusedColorIdentitiesOpacity; + int visualDeckStorageTooltipType; bool visualDeckStoragePromptForConversion; bool visualDeckStorageAlwaysConvert; bool visualDeckStorageInGame; @@ -476,6 +477,10 @@ public: { return visualDeckStorageUnusedColorIdentitiesOpacity; } + int getVisualDeckStorageTooltipType() const + { + return visualDeckStorageTooltipType; + } bool getVisualDeckStoragePromptForConversion() const { return visualDeckStoragePromptForConversion; @@ -852,6 +857,7 @@ public slots: void setVisualDeckStorageCardSize(int _visualDeckStorageCardSize); void setVisualDeckStorageDrawUnusedColorIdentities(QT_STATE_CHANGED_T _visualDeckStorageDrawUnusedColorIdentities); void setVisualDeckStorageUnusedColorIdentitiesOpacity(int _visualDeckStorageUnusedColorIdentitiesOpacity); + void setVisualDeckStorageTooltipType(int value); void setVisualDeckStoragePromptForConversion(bool _visualDeckStoragePromptForConversion); void setVisualDeckStorageAlwaysConvert(bool _visualDeckStorageAlwaysConvert); void setVisualDeckStorageInGame(QT_STATE_CHANGED_T value); diff --git a/dbconverter/src/mocks.cpp b/dbconverter/src/mocks.cpp index 032cdc95e..acd199759 100644 --- a/dbconverter/src/mocks.cpp +++ b/dbconverter/src/mocks.cpp @@ -247,6 +247,9 @@ void SettingsCache::setVisualDeckStorageUnusedColorIdentitiesOpacity( int /* _visualDeckStorageUnusedColorIdentitiesOpacity */) { } +void SettingsCache::setVisualDeckStorageTooltipType(int /* value */) +{ +} void SettingsCache::setVisualDeckStoragePromptForConversion(bool /* _visualDeckStoragePromptForConversion */) { } diff --git a/tests/carddatabase/mocks.cpp b/tests/carddatabase/mocks.cpp index db7dd9353..8ac925c0b 100644 --- a/tests/carddatabase/mocks.cpp +++ b/tests/carddatabase/mocks.cpp @@ -251,6 +251,9 @@ void SettingsCache::setVisualDeckStorageUnusedColorIdentitiesOpacity( int /* _visualDeckStorageUnusedColorIdentitiesOpacity */) { } +void SettingsCache::setVisualDeckStorageTooltipType(int /* value */) +{ +} void SettingsCache::setVisualDeckStoragePromptForConversion(bool /* _visualDeckStoragePromptForConversion */) { }