From 47720ff2865f4bd49d49f3569709ce16fdc709b0 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Wed, 14 Jan 2026 02:41:03 -0800 Subject: [PATCH] [ColorIdentityWidget] Refactor (#6506) * [ColorIdentityWidget] Refactor and add setter * rename manaCost field * nvm, just refactor for now * use QtUtils * move clearLayout into populate * add back cardInfo constructor --- .../additional_info/color_identity_widget.cpp | 48 ++++++------------- .../additional_info/color_identity_widget.h | 10 ++-- 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.cpp b/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.cpp index e8beae61e..98f5a306b 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.cpp +++ b/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.cpp @@ -8,30 +8,10 @@ #include #include #include +#include -ColorIdentityWidget::ColorIdentityWidget(QWidget *parent, CardInfoPtr _card) : QWidget(parent), card(_card) -{ - layout = new QHBoxLayout(this); - layout->setSpacing(5); // Small spacing between icons - layout->setContentsMargins(0, 0, 0, 0); - layout->setAlignment(Qt::AlignCenter); // Ensure icons are centered - setLayout(layout); - - // Define the full WUBRG set (White, Blue, Black, Red, Green) - QString fullColorIdentity = "WUBRG"; - - if (card) { - manaCost = card->getColors(); // Get mana cost string - QStringList symbols = parseColorIdentity(manaCost); // Parse mana cost string - - populateManaSymbolWidgets(); - } - connect(&SettingsCache::instance(), &SettingsCache::visualDeckStorageDrawUnusedColorIdentitiesChanged, this, - &ColorIdentityWidget::toggleUnusedVisibility); -} - -ColorIdentityWidget::ColorIdentityWidget(QWidget *parent, QString _manaCost) - : QWidget(parent), card(nullptr), manaCost(_manaCost) +ColorIdentityWidget::ColorIdentityWidget(QWidget *parent, const QString &_colorIdentity) + : QWidget(parent), colorIdentity(_colorIdentity) { layout = new QHBoxLayout(this); layout->setSpacing(5); // Small spacing between icons @@ -45,12 +25,21 @@ ColorIdentityWidget::ColorIdentityWidget(QWidget *parent, QString _manaCost) &ColorIdentityWidget::toggleUnusedVisibility); } +ColorIdentityWidget::ColorIdentityWidget(QWidget *parent, const CardInfoPtr &card) + : ColorIdentityWidget(parent, card->getColors()) +{ +} + void ColorIdentityWidget::populateManaSymbolWidgets() { // Define the full WUBRG set (White, Blue, Black, Red, Green) QString fullColorIdentity = "WUBRG"; - QStringList symbols = parseColorIdentity(manaCost); // Parse mana cost string + QStringList symbols = parseColorIdentity(colorIdentity); // Parse mana cost string + // clear old layout + QtUtils::clearLayoutRec(layout); + + // populate mana symbols if (SettingsCache::instance().getVisualDeckStorageDrawUnusedColorIdentities()) { for (const QString symbol : fullColorIdentity) { auto *manaSymbol = new ManaSymbolWidget(this, symbol, symbols.contains(symbol)); @@ -66,13 +55,6 @@ void ColorIdentityWidget::populateManaSymbolWidgets() void ColorIdentityWidget::toggleUnusedVisibility() { - if (layout != nullptr) { - QLayoutItem *item; - while ((item = layout->takeAt(0)) != nullptr) { - item->widget()->deleteLater(); // Delete the widget - delete item; // Delete the layout item - } - } populateManaSymbolWidgets(); } @@ -97,12 +79,12 @@ void ColorIdentityWidget::resizeEvent(QResizeEvent *event) } } -QStringList ColorIdentityWidget::parseColorIdentity(const QString &cmc) +QStringList ColorIdentityWidget::parseColorIdentity(const QString &manaString) { QStringList symbols; // Handle split costs (e.g., "3U // 4UU") - QStringList splitCosts = cmc.split(" // "); + QStringList splitCosts = manaString.split(" // "); for (const QString &part : splitCosts) { QRegularExpression regex(R"(\{([^}]+)\}|(\d+)|([WUBRGCSPX]))"); QRegularExpressionMatchIterator matches = regex.globalMatch(part); diff --git a/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.h b/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.h index 60d69af06..d9746b956 100644 --- a/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.h +++ b/cockatrice/src/interface/widgets/cards/additional_info/color_identity_widget.h @@ -15,19 +15,19 @@ class ColorIdentityWidget : public QWidget { Q_OBJECT public: - explicit ColorIdentityWidget(QWidget *parent, CardInfoPtr card); - explicit ColorIdentityWidget(QWidget *parent, QString manaCost); + explicit ColorIdentityWidget(QWidget *parent, const QString &_colorIdentity = ""); + explicit ColorIdentityWidget(QWidget *parent, const CardInfoPtr &card); + void populateManaSymbolWidgets(); - QStringList parseColorIdentity(const QString &manaString); + static QStringList parseColorIdentity(const QString &manaString); public slots: void resizeEvent(QResizeEvent *event) override; void toggleUnusedVisibility(); private: - CardInfoPtr card; - QString manaCost; + QString colorIdentity; QHBoxLayout *layout; };