diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview_color_identity_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview_color_identity_widget.cpp index e32ae8806..9748eb4d5 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview_color_identity_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview_color_identity_widget.cpp @@ -1,7 +1,10 @@ #include "deck_preview_color_identity_widget.h" +#include "../../../../settings/cache_settings.h" + #include #include +#include DeckPreviewColorCircleWidget::DeckPreviewColorCircleWidget(QChar color, QWidget *parent) : QWidget(parent), colorChar(color), circleDiameter(0), isActive(false) @@ -52,35 +55,38 @@ void DeckPreviewColorCircleWidget::paintEvent(QPaintEvent *event) // Map color characters to their respective colors QColor circleColor; - if (isActive) { - switch (colorChar.unicode()) { - case 'W': - circleColor = Qt::white; - break; - case 'U': - circleColor = QColor(0, 115, 230); - break; // Blue - case 'B': - circleColor = QColor(50, 50, 50); - break; // Black - case 'R': - circleColor = QColor(230, 30, 30); - break; // Red - case 'G': - circleColor = QColor(30, 180, 30); - break; // Green - default: - circleColor = Qt::transparent; - break; // Fallback - } - } else { - circleColor = Qt::gray; // Grey out unused colors + switch (colorChar.unicode()) { + case 'W': + circleColor = Qt::white; + break; + case 'U': + circleColor = QColor(0, 115, 230); + break; // Blue + case 'B': + circleColor = QColor(50, 50, 50); + break; // Black + case 'R': + circleColor = QColor(230, 30, 30); + break; // Red + case 'G': + circleColor = QColor(30, 180, 30); + break; // Green + default: + circleColor = Qt::transparent; + break; // Fallback } - // Draw the circle - painter.setBrush(circleColor); - painter.setPen(Qt::black); - painter.drawEllipse(circleRect); + if (SettingsCache::instance().getVisualDeckStorageDrawUnusedColorIdentities() || isActive) { + // Make the circle faint if it is not active + if (!isActive) { + circleColor.setAlpha(SettingsCache::instance().getVisualDeckStorageUnusedColorIdentitiesOpacity()); + } + + // Draw the circle + painter.setBrush(circleColor); + painter.setPen(Qt::black); + painter.drawEllipse(circleRect); + } // Draw the color character only if the circle is active if (isActive) { @@ -88,13 +94,19 @@ void DeckPreviewColorCircleWidget::paintEvent(QPaintEvent *event) font.setBold(true); font.setPointSize(circleDiameter * 0.4); // Adjust font size relative to circle diameter painter.setFont(font); - painter.setPen(Qt::black); + if (colorChar.unicode() == 'B') { + painter.setPen(Qt::white); + } else { + painter.setPen(Qt::black); + } + // Center the text within the circle painter.drawText(circleRect, Qt::AlignCenter, colorChar); } } + void DeckPreviewColorCircleWidget::setColorActive(bool active) { isActive = active; diff --git a/cockatrice/src/dialogs/dlg_settings.cpp b/cockatrice/src/dialogs/dlg_settings.cpp index 537944a0d..db326a622 100644 --- a/cockatrice/src/dialogs/dlg_settings.cpp +++ b/cockatrice/src/dialogs/dlg_settings.cpp @@ -350,9 +350,26 @@ AppearanceSettingsPage::AppearanceSettingsPage() connect(&showVisualDeckStorageOnLoadCheckBox, &QCheckBox::QT_STATE_CHANGED, &settings, &SettingsCache::setVisualDeckStorageShowOnLoad); + visualDeckStorageDrawUnusedColorIdentitiesCheckBox.setChecked( + settings.getVisualDeckStorageDrawUnusedColorIdentities()); + connect(&visualDeckStorageDrawUnusedColorIdentitiesCheckBox, &QCheckBox::QT_STATE_CHANGED, &settings, + &SettingsCache::setVisualDeckStorageDrawUnusedColorIdentities); + + visualDeckStorageUnusedColorIdentitiesOpacitySpinBox.setMinimum(0); + visualDeckStorageUnusedColorIdentitiesOpacitySpinBox.setMaximum(255); + visualDeckStorageUnusedColorIdentitiesOpacitySpinBox.setValue( + settings.getVisualDeckStorageUnusedColorIdentitiesOpacity()); + connect(&visualDeckStorageUnusedColorIdentitiesOpacitySpinBox, &QSpinBox::valueChanged, &settings, + &SettingsCache::setVisualDeckStorageUnusedColorIdentitiesOpacity); + + visualDeckStorageUnusedColorIdentitiesOpacityLabel.setBuddy(&visualDeckStorageUnusedColorIdentitiesOpacitySpinBox); + auto *menuGrid = new QGridLayout; menuGrid->addWidget(&showShortcutsCheckBox, 0, 0); menuGrid->addWidget(&showVisualDeckStorageOnLoadCheckBox, 1, 0); + menuGrid->addWidget(&visualDeckStorageDrawUnusedColorIdentitiesCheckBox, 2, 0); + menuGrid->addWidget(&visualDeckStorageUnusedColorIdentitiesOpacityLabel, 3, 0); + menuGrid->addWidget(&visualDeckStorageUnusedColorIdentitiesOpacitySpinBox, 3, 1); menuGroupBox = new QGroupBox; menuGroupBox->setLayout(menuGrid); @@ -488,6 +505,9 @@ void AppearanceSettingsPage::retranslateUi() menuGroupBox->setTitle(tr("Menu settings")); showShortcutsCheckBox.setText(tr("Show keyboard shortcuts in right-click menus")); showVisualDeckStorageOnLoadCheckBox.setText(tr("Show visual deck storage on database load")); + visualDeckStorageDrawUnusedColorIdentitiesCheckBox.setText( + tr("Draw missing color identities in visual deck storage without color label")); + visualDeckStorageUnusedColorIdentitiesOpacityLabel.setText((tr("Missing color identity opacity"))); cardsGroupBox->setTitle(tr("Card rendering")); displayCardNamesCheckBox.setText(tr("Display card names on cards having a picture")); diff --git a/cockatrice/src/dialogs/dlg_settings.h b/cockatrice/src/dialogs/dlg_settings.h index 0fb0d694b..5902a4a72 100644 --- a/cockatrice/src/dialogs/dlg_settings.h +++ b/cockatrice/src/dialogs/dlg_settings.h @@ -96,6 +96,9 @@ private: QLabel maxFontSizeForCardsLabel; QCheckBox showShortcutsCheckBox; QCheckBox showVisualDeckStorageOnLoadCheckBox; + QCheckBox visualDeckStorageDrawUnusedColorIdentitiesCheckBox; + QLabel visualDeckStorageUnusedColorIdentitiesOpacityLabel; + QSpinBox visualDeckStorageUnusedColorIdentitiesOpacitySpinBox; QCheckBox displayCardNamesCheckBox; QCheckBox autoRotateSidewaysLayoutCardsCheckBox; QCheckBox overrideAllCardArtWithPersonalPreferenceCheckBox; diff --git a/cockatrice/src/settings/cache_settings.cpp b/cockatrice/src/settings/cache_settings.cpp index 660b5935c..105c50259 100644 --- a/cockatrice/src/settings/cache_settings.cpp +++ b/cockatrice/src/settings/cache_settings.cpp @@ -262,6 +262,10 @@ SettingsCache::SettingsCache() visualDeckStorageCardSize = settings->value("cards/visualdeckstoragecardsize", 100).toInt(); visualDeckStorageShowOnLoad = settings->value("interface/visualdeckstorageshowonload", true).toBool(); visualDeckStorageSortingOrder = settings->value("interface/visualdeckstoragesortingorder", 0).toInt(); + visualDeckStorageDrawUnusedColorIdentities = + settings->value("interface/visualdeckstoragedrawunusedcoloridentities", true).toBool(); + visualDeckStorageUnusedColorIdentitiesOpacity = + settings->value("interface/visualdeckstorageunusedcoloridentitiesopacity", 80).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(); @@ -631,6 +635,20 @@ void SettingsCache::setVisualDeckStorageShowOnLoad(QT_STATE_CHANGED_T _visualDec settings->setValue("interface/visualdeckstorageshowonload", visualDeckStorageShowOnLoad); } +void SettingsCache::setVisualDeckStorageDrawUnusedColorIdentities( + QT_STATE_CHANGED_T _visualDeckStorageDrawUnusedColorIdentities) +{ + visualDeckStorageDrawUnusedColorIdentities = _visualDeckStorageDrawUnusedColorIdentities; + settings->setValue("cards/visualdeckstoragedrawunusedcoloridentities", visualDeckStorageDrawUnusedColorIdentities); +} + +void SettingsCache::setVisualDeckStorageUnusedColorIdentitiesOpacity(int _visualDeckStorageUnusedColorIdentitiesOpacity) +{ + visualDeckStorageUnusedColorIdentitiesOpacity = _visualDeckStorageUnusedColorIdentitiesOpacity; + settings->setValue("cards/visualdeckstorageunusedcoloridentitiesopacity", + visualDeckStorageUnusedColorIdentitiesOpacity); +} + 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 63ab91e13..781c18d31 100644 --- a/cockatrice/src/settings/cache_settings.h +++ b/cockatrice/src/settings/cache_settings.h @@ -126,6 +126,8 @@ private: bool printingSelectorNavigationButtonsVisible; int visualDeckStorageSortingOrder; int visualDeckStorageCardSize; + bool visualDeckStorageDrawUnusedColorIdentities; + int visualDeckStorageUnusedColorIdentitiesOpacity; bool visualDeckStorageShowOnLoad; bool horizontalHand; bool invertVerticalCoordinate; @@ -381,6 +383,14 @@ public: { return visualDeckStorageCardSize; } + bool getVisualDeckStorageDrawUnusedColorIdentities() const + { + return visualDeckStorageDrawUnusedColorIdentities; + } + int getVisualDeckStorageUnusedColorIdentitiesOpacity() const + { + return visualDeckStorageUnusedColorIdentitiesOpacity; + } bool getVisualDeckStorageShowOnLoad() const { return visualDeckStorageShowOnLoad; @@ -695,6 +705,8 @@ public slots: void setPrintingSelectorNavigationButtonsVisible(QT_STATE_CHANGED_T _navigationButtonsVisible); void setVisualDeckStorageSortingOrder(int _visualDeckStorageSortingOrder); void setVisualDeckStorageCardSize(int _visualDeckStorageCardSize); + void setVisualDeckStorageDrawUnusedColorIdentities(QT_STATE_CHANGED_T _visualDeckStorageDrawUnusedColorIdentities); + void setVisualDeckStorageUnusedColorIdentitiesOpacity(int _visualDeckStorageUnusedColorIdentitiesOpacity); void setVisualDeckStorageShowOnLoad(QT_STATE_CHANGED_T _visualDeckStorageShowOnLoad); void setHorizontalHand(QT_STATE_CHANGED_T _horizontalHand); void setInvertVerticalCoordinate(QT_STATE_CHANGED_T _invertVerticalCoordinate); diff --git a/dbconverter/src/mocks.cpp b/dbconverter/src/mocks.cpp index 7f5c16e52..143b7ef7e 100644 --- a/dbconverter/src/mocks.cpp +++ b/dbconverter/src/mocks.cpp @@ -193,6 +193,14 @@ void SettingsCache::setVisualDeckStorageCardSize(int /* _visualDeckStorageCardSi void SettingsCache::setVisualDeckStorageShowOnLoad(QT_STATE_CHANGED_T /* _visualDeckStorageShowOnLoad */) { } +void SettingsCache::setVisualDeckStorageDrawUnusedColorIdentities( + QT_STATE_CHANGED_T /* _visualDeckStorageDrawUnusedColorIdentities */) +{ +} +void SettingsCache::setVisualDeckStorageUnusedColorIdentitiesOpacity( + int /* _visualDeckStorageUnusedColorIdentitiesOpacity */) +{ +} void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T /* _horizontalHand */) { } diff --git a/tests/carddatabase/mocks.cpp b/tests/carddatabase/mocks.cpp index 572c28f3a..bfb779b03 100644 --- a/tests/carddatabase/mocks.cpp +++ b/tests/carddatabase/mocks.cpp @@ -197,6 +197,14 @@ void SettingsCache::setVisualDeckStorageCardSize(int /* _visualDeckStorageCardSi void SettingsCache::setVisualDeckStorageShowOnLoad(QT_STATE_CHANGED_T /* _visualDeckStorageShowOnLoad */) { } +void SettingsCache::setVisualDeckStorageDrawUnusedColorIdentities( + QT_STATE_CHANGED_T /* _visualDeckStorageDrawUnusedColorIdentities */) +{ +} +void SettingsCache::setVisualDeckStorageUnusedColorIdentitiesOpacity( + int /* _visualDeckStorageUnusedColorIdentitiesOpacity */) +{ +} void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T /* _horizontalHand */) { }