Include settings for unused color identities display.

This commit is contained in:
Lukas Brübach 2025-01-12 00:45:49 +01:00
parent bbfa971dfd
commit 94f6fa5ec4
7 changed files with 109 additions and 28 deletions

View file

@ -1,7 +1,10 @@
#include "deck_preview_color_identity_widget.h"
#include "../../../../settings/cache_settings.h"
#include <QPainter>
#include <QResizeEvent>
#include <QSet>
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;

View file

@ -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"));

View file

@ -96,6 +96,9 @@ private:
QLabel maxFontSizeForCardsLabel;
QCheckBox showShortcutsCheckBox;
QCheckBox showVisualDeckStorageOnLoadCheckBox;
QCheckBox visualDeckStorageDrawUnusedColorIdentitiesCheckBox;
QLabel visualDeckStorageUnusedColorIdentitiesOpacityLabel;
QSpinBox visualDeckStorageUnusedColorIdentitiesOpacitySpinBox;
QCheckBox displayCardNamesCheckBox;
QCheckBox autoRotateSidewaysLayoutCardsCheckBox;
QCheckBox overrideAllCardArtWithPersonalPreferenceCheckBox;

View file

@ -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<bool>(_horizontalHand);

View file

@ -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);

View file

@ -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 */)
{
}

View file

@ -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 */)
{
}