diff --git a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual.cpp b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual.cpp index 8bb9e9e67..ceadb0182 100644 --- a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual.cpp +++ b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual.cpp @@ -61,20 +61,20 @@ void TabDeckEditorVisual::createCentralFrame() centralFrame = new QVBoxLayout; centralWidget->setLayout(centralFrame); - tabContainer = new TabDeckEditorVisualTabWidget(centralWidget, this, this->deckDockWidget->deckModel, - this->databaseDisplayDockWidget->databaseModel, - this->databaseDisplayDockWidget->databaseDisplayModel); + tabContainer = new TabDeckEditorVisualTabWidget(centralWidget, this, deckDockWidget->deckModel, + databaseDisplayDockWidget->databaseModel, + databaseDisplayDockWidget->databaseDisplayModel); connect(tabContainer, &TabDeckEditorVisualTabWidget::cardChanged, this, &TabDeckEditorVisual::changeModelIndexAndCardInfo); connect(tabContainer, &TabDeckEditorVisualTabWidget::cardChangedDatabaseDisplay, this, &AbstractTabDeckEditor::updateCard); - connect(tabContainer, SIGNAL(mainboardCardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, - SLOT(processMainboardCardClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); - connect(tabContainer, SIGNAL(sideboardCardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, - SLOT(processSideboardCardClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); + connect(tabContainer, &TabDeckEditorVisualTabWidget::mainboardCardClicked, this, + &TabDeckEditorVisual::processMainboardCardClick); + connect(tabContainer, &TabDeckEditorVisualTabWidget::sideboardCardClicked, this, + &TabDeckEditorVisual::processSideboardCardClick); - connect(tabContainer, SIGNAL(cardClickedDatabaseDisplay(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), - this, SLOT(processCardClickDatabaseDisplay(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); + connect(tabContainer, &TabDeckEditorVisualTabWidget::cardClickedDatabaseDisplay, this, + &TabDeckEditorVisual::processCardClickDatabaseDisplay); centralFrame->addWidget(tabContainer); setCentralWidget(centralWidget); @@ -83,7 +83,7 @@ void TabDeckEditorVisual::createCentralFrame() void TabDeckEditorVisual::createMenus() { - deckMenu = new DeckEditorMenu(this, this); + deckMenu = new DeckEditorMenu(this); addTabMenu(deckMenu); viewMenu = new QMenu(this); @@ -371,7 +371,7 @@ void TabDeckEditorVisual::openDeckFromFile(const QString &fileName, DeckOpenLoca TabDeckEditorVisual::setDeck(l); } } else { - delete l; + l->deleteLater(); QMessageBox::critical(this, tr("Error"), tr("Could not open deck at %1").arg(fileName)); } deckMenu->setSaveStatus(true); diff --git a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp index 9f28054e3..25900dabf 100644 --- a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp +++ b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp @@ -21,32 +21,30 @@ TabDeckEditorVisualTabWidget::TabDeckEditorVisualTabWidget(QWidget *parent, visualDeckView = new VisualDeckEditorWidget(this, deckModel); visualDeckView->setObjectName("visualDeckView"); visualDeckView->updateDisplay(); - connect(visualDeckView, SIGNAL(activeCardChanged(CardInfoPtr)), this, SLOT(onCardChanged(CardInfoPtr))); - connect(visualDeckView, SIGNAL(mainboardCardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, - SLOT(onMainboardCardClickedDeckEditor(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); - connect(visualDeckView, SIGNAL(sideboardCardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, - SLOT(onSideboardCardClickedDeckEditor(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); + connect(visualDeckView, &VisualDeckEditorWidget::activeCardChanged, this, + &TabDeckEditorVisualTabWidget::onCardChanged); + connect(visualDeckView, &VisualDeckEditorWidget::mainboardCardClicked, this, + &TabDeckEditorVisualTabWidget::onMainboardCardClickedDeckEditor); + connect(visualDeckView, &VisualDeckEditorWidget::sideboardCardClicked, this, + &TabDeckEditorVisualTabWidget::onSideboardCardClickedDeckEditor); visualDatabaseDisplay = new VisualDatabaseDisplayWidget(this, deckEditor, cardDatabaseModel, cardDatabaseDisplayModel); visualDatabaseDisplay->setObjectName("visualDatabaseView"); - connect(visualDatabaseDisplay, SIGNAL(cardHoveredDatabaseDisplay(CardInfoPtr)), this, - SLOT(onCardChangedDatabaseDisplay(CardInfoPtr))); - connect(visualDatabaseDisplay, - SIGNAL(cardClickedDatabaseDisplay(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, - SLOT(onCardClickedDatabaseDisplay(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); + connect(visualDatabaseDisplay, &VisualDatabaseDisplayWidget::cardHoveredDatabaseDisplay, this, + &TabDeckEditorVisualTabWidget::onCardChangedDatabaseDisplay); + connect(visualDatabaseDisplay, &VisualDatabaseDisplayWidget::cardClickedDatabaseDisplay, this, + &TabDeckEditorVisualTabWidget::onCardClickedDatabaseDisplay); deckAnalytics = new DeckAnalyticsWidget(this, deckModel); deckAnalytics->setObjectName("deckAnalytics"); sampleHandWidget = new VisualDeckEditorSampleHandWidget(this, deckModel); - // printingSelector = new PrintingSelector(this, this->deckModel); - - this->addNewTab(visualDeckView, "Visual Deck View"); - this->addNewTab(visualDatabaseDisplay, "Visual Database Display"); - this->addNewTab(deckAnalytics, "Deck Analytics"); - this->addNewTab(sampleHandWidget, "Sample Hand"); + this->addNewTab(visualDeckView, tr("Visual Deck View")); + this->addNewTab(visualDatabaseDisplay, tr("Visual Database Display")); + this->addNewTab(deckAnalytics, tr("Deck Analytics")); + this->addNewTab(sampleHandWidget, tr("Sample Hand")); } void TabDeckEditorVisualTabWidget::onCardChanged(CardInfoPtr activeCard) diff --git a/cockatrice/src/client/ui/widgets/cards/overlapped_card_group_display_widget.h b/cockatrice/src/client/ui/widgets/cards/overlapped_card_group_display_widget.h index 3938be97e..217fd4ea9 100644 --- a/cockatrice/src/client/ui/widgets/cards/overlapped_card_group_display_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/overlapped_card_group_display_widget.h @@ -1,7 +1,3 @@ -// -// Created by ascor on 11/12/24. -// - #ifndef OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H #define OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.cpp b/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.cpp index 8b8ddd4b2..09100e0eb 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.cpp @@ -18,14 +18,21 @@ ManaBaseWidget::ManaBaseWidget(QWidget *parent, DeckListModel *_deckListModel) layout = new QVBoxLayout(this); setLayout(layout); - bannerWidget = new BannerWidget(this, "Mana Base", Qt::Vertical, 100); + bannerWidget = new BannerWidget(this, tr("Mana Base"), Qt::Vertical, 100); bannerWidget->setMaximumHeight(100); layout->addWidget(bannerWidget); - barLayout = new QHBoxLayout(); + barLayout = new QHBoxLayout(this); layout->addLayout(barLayout); connect(deckListModel, &DeckListModel::dataChanged, this, &ManaBaseWidget::analyzeManaBase); + + retranslateUi(); +} + +void ManaBaseWidget::retranslateUi() +{ + bannerWidget->setText(tr("Mana Base")); } void ManaBaseWidget::setDeckModel(DeckListModel *deckModel) @@ -35,7 +42,35 @@ void ManaBaseWidget::setDeckModel(DeckListModel *deckModel) analyzeManaBase(); } -std::unordered_map ManaBaseWidget::analyzeManaBase() +void ManaBaseWidget::updateDisplay() +{ + // Clear the layout first + QLayoutItem *item; + while ((item = barLayout->takeAt(0)) != nullptr) { + item->widget()->deleteLater(); + delete item; + } + + int totalSum = 0; + for (auto entry : manaBaseMap) { + totalSum += entry.second; + } + + // Define color mapping for mana types + std::unordered_map manaColors = {{"W", QColor(248, 231, 185)}, {"U", QColor(14, 104, 171)}, + {"B", QColor(21, 11, 0)}, {"R", QColor(211, 32, 42)}, + {"G", QColor(0, 115, 62)}, {"C", QColor(150, 150, 150)}}; + + for (auto entry : manaBaseMap) { + QColor barColor = manaColors.count(entry.first) ? manaColors[entry.first] : Qt::gray; + BarWidget *barWidget = new BarWidget(QString(entry.first), entry.second, totalSum, barColor, this); + barLayout->addWidget(barWidget); + } + + update(); +} + +std::unordered_map ManaBaseWidget::analyzeManaBase() { manaBaseMap.clear(); InnerDecklistNode *listRoot = deckListModel->getDeckList()->getRoot(); @@ -60,38 +95,10 @@ std::unordered_map ManaBaseWidget::analyzeManaBase() return manaBaseMap; } -void ManaBaseWidget::updateDisplay() -{ - // Clear the layout first - QLayoutItem *item; - while ((item = barLayout->takeAt(0)) != nullptr) { - delete item->widget(); - delete item; - } - - int totalSum = 0; - for (auto entry : manaBaseMap) { - totalSum += entry.second; - } - - // Define color mapping for mana types - std::unordered_map manaColors = {{'W', QColor(248, 231, 185)}, {'U', QColor(14, 104, 171)}, - {'B', QColor(21, 11, 0)}, {'R', QColor(211, 32, 42)}, - {'G', QColor(0, 115, 62)}, {'C', QColor(150, 150, 150)}}; - - for (auto entry : manaBaseMap) { - QColor barColor = manaColors.count(entry.first) ? manaColors[entry.first] : Qt::gray; - BarWidget *barWidget = new BarWidget(QString(entry.first), entry.second, totalSum, barColor, this); - barLayout->addWidget(barWidget); - } - - update(); -} - -std::unordered_map ManaBaseWidget::determineManaProduction(const QString &rulesText) +std::unordered_map ManaBaseWidget::determineManaProduction(const QString &rulesText) { // Initialize mana counts - std::unordered_map manaCounts = {{'W', 0}, {'U', 0}, {'B', 0}, {'R', 0}, {'G', 0}, {'C', 0}}; + std::unordered_map manaCounts = {{"W", 0}, {"U", 0}, {"B", 0}, {"R", 0}, {"G", 0}, {"C", 0}}; // Define regex patterns for different mana production rules QRegularExpression tapAddColorless(R"(\{T\}:\s*Add\s*\{C\}|Add\s*one\s*colorless\s*mana)"); @@ -102,15 +109,15 @@ std::unordered_map ManaBaseWidget::determineManaProduction(const QStr // Check for mana production rules in the text if (tapAddColorless.match(rulesText).hasMatch()) { - manaCounts['C'] += 1; // Adds colorless mana + manaCounts["C"] += 1; // Adds colorless mana } if (tapAddAnyColor.match(rulesText).hasMatch()) { - manaCounts['W'] += 1; // Assumes at least 1 of any color can be produced - manaCounts['U'] += 1; - manaCounts['B'] += 1; - manaCounts['R'] += 1; - manaCounts['G'] += 1; + manaCounts["W"] += 1; // Assumes at least 1 of any color can be produced + manaCounts["U"] += 1; + manaCounts["B"] += 1; + manaCounts["R"] += 1; + manaCounts["G"] += 1; } // Check for specific color production @@ -118,25 +125,17 @@ std::unordered_map ManaBaseWidget::determineManaProduction(const QStr auto match = specificColorRegex.match(rulesText); if (match.hasMatch()) { QString color = match.captured(1); - if (color == "W") - manaCounts['W'] += 1; - else if (color == "U") - manaCounts['U'] += 1; - else if (color == "B") - manaCounts['B'] += 1; - else if (color == "R") - manaCounts['R'] += 1; - else if (color == "G") - manaCounts['G'] += 1; + manaCounts[color] += 1; } return manaCounts; } -void ManaBaseWidget::mergeManaCounts(std::unordered_map &manaCounts1, - const std::unordered_map &manaCounts2) +void ManaBaseWidget::mergeManaCounts(std::unordered_map &manaCounts1, + const std::unordered_map &manaCounts2) { for (const auto &pair : manaCounts2) { manaCounts1[pair.first] += pair.second; // Add values for matching keys } -} \ No newline at end of file +} + diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.h b/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.h index 11c433656..c07f23d32 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.h +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_base_widget.h @@ -15,19 +15,21 @@ class ManaBaseWidget : public QWidget public: explicit ManaBaseWidget(QWidget *parent, DeckListModel *deckListModel); - std::unordered_map analyzeManaBase(); + std::unordered_map analyzeManaBase(); void updateDisplay(); - std::unordered_map determineManaProduction(const QString &manaString); - void mergeManaCounts(std::unordered_map &manaCounts1, const std::unordered_map &manaCounts2); + std::unordered_map determineManaProduction(const QString &manaString); + void mergeManaCounts(std::unordered_map &manaCounts1, + const std::unordered_map &manaCounts2); public slots: void setDeckModel(DeckListModel *deckModel); + void retranslateUi(); private: DeckListModel *deckListModel; BannerWidget *bannerWidget; - std::unordered_map manaBaseMap; + std::unordered_map manaBaseMap; QVBoxLayout *layout; QHBoxLayout *barLayout; }; diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.cpp b/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.cpp index 77e135b2b..407283b12 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.cpp @@ -16,7 +16,7 @@ ManaCurveWidget::ManaCurveWidget(QWidget *parent, DeckListModel *_deckListModel) layout = new QVBoxLayout(this); setLayout(layout); - bannerWidget = new BannerWidget(this, "Mana Curve", Qt::Vertical, 100); + bannerWidget = new BannerWidget(this, tr("Mana Curve"), Qt::Vertical, 100); bannerWidget->setMaximumHeight(100); layout->addWidget(bannerWidget); @@ -24,6 +24,13 @@ ManaCurveWidget::ManaCurveWidget(QWidget *parent, DeckListModel *_deckListModel) layout->addLayout(barLayout); connect(deckListModel, &DeckListModel::dataChanged, this, &ManaCurveWidget::analyzeManaCurve); + + retranslateUi(); +} + +void ManaCurveWidget::retranslateUi() +{ + bannerWidget->setText(tr("Mana Curve")); } void ManaCurveWidget::setDeckModel(DeckListModel *deckModel) @@ -65,7 +72,7 @@ void ManaCurveWidget::updateDisplay() if (barLayout != nullptr) { QLayoutItem *item; while ((item = barLayout->takeAt(0)) != nullptr) { - delete item->widget(); + item->widget()->deleteLater(); delete item; } } diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.h b/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.h index e822aea9c..052db9e0a 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.h +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_curve_widget.h @@ -19,6 +19,7 @@ public: public slots: void setDeckModel(DeckListModel *deckModel); std::unordered_map analyzeManaCurve(); + void retranslateUi(); private: DeckListModel *deckListModel; diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.cpp b/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.cpp index ff6dfed8f..0f0e59403 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.cpp +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.cpp @@ -19,7 +19,7 @@ ManaDevotionWidget::ManaDevotionWidget(QWidget *parent, DeckListModel *_deckList layout = new QVBoxLayout(this); setLayout(layout); - bannerWidget = new BannerWidget(this, "Mana Devotion", Qt::Vertical, 100); + bannerWidget = new BannerWidget(this, tr("Mana Devotion"), Qt::Vertical, 100); bannerWidget->setMaximumHeight(100); layout->addWidget(bannerWidget); @@ -27,6 +27,13 @@ ManaDevotionWidget::ManaDevotionWidget(QWidget *parent, DeckListModel *_deckList layout->addLayout(barLayout); connect(deckListModel, &DeckListModel::dataChanged, this, &ManaDevotionWidget::analyzeManaDevotion); + + retranslateUi(); +} + +void ManaDevotionWidget::retranslateUi() +{ + bannerWidget->setText(tr("Mana Devotion")); } void ManaDevotionWidget::setDeckModel(DeckListModel *deckModel) @@ -66,7 +73,7 @@ void ManaDevotionWidget::updateDisplay() // Clear the layout first QLayoutItem *item; while ((item = barLayout->takeAt(0)) != nullptr) { - delete item->widget(); + item->widget()->deleteLater(); delete item; } diff --git a/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.h b/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.h index 35b9fa0e7..33feca2e2 100644 --- a/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.h +++ b/cockatrice/src/client/ui/widgets/deck_analytics/mana_devotion_widget.h @@ -22,6 +22,7 @@ public: public slots: void setDeckModel(DeckListModel *deckModel); std::unordered_map analyzeManaDevotion(); + void retranslateUi(); private: DeckListModel *deckListModel; diff --git a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp index 0d2b410ff..feab5cb0e 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp @@ -12,7 +12,7 @@ VisualDeckEditorSampleHandWidget::VisualDeckEditorSampleHandWidget(QWidget *pare layout = new QVBoxLayout(this); setLayout(layout); - resetButton = new QPushButton("Reset"); + resetButton = new QPushButton(this); connect(resetButton, SIGNAL(clicked()), this, SLOT(updateDisplay())); layout->addWidget(resetButton); @@ -26,6 +26,11 @@ VisualDeckEditorSampleHandWidget::VisualDeckEditorSampleHandWidget(QWidget *pare } } +void VisualDeckEditorSampleHandWidget::retranslateUi() +{ + resetButton->setText(tr("Reset")); +} + void VisualDeckEditorSampleHandWidget::setDeckModel(DeckListModel *deckModel) { deckListModel = deckModel; diff --git a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h index d6ebfa906..44dc04cab 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h @@ -17,6 +17,7 @@ public: public slots: void updateDisplay(); void setDeckModel(DeckListModel *deckModel); + void retranslateUi(); private: DeckListModel *deckListModel; diff --git a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp index 2d8c40f6a..366b4b948 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp @@ -93,13 +93,13 @@ void VisualDeckEditorWidget::updateDisplay() zoneContainerLayout = new QVBoxLayout(zoneContainer); DeckCardZoneDisplayWidget *mainBoardWidget = - new DeckCardZoneDisplayWidget(zoneContainer, sortCards(mainDeckCards), "Mainboard", 20, 10); + new DeckCardZoneDisplayWidget(zoneContainer, sortCards(mainDeckCards), tr("Mainboard"), 20, 10); connect(mainBoardWidget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr))); connect(mainBoardWidget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, SLOT(onMainboardClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); DeckCardZoneDisplayWidget *sideBoardWidget = - new DeckCardZoneDisplayWidget(zoneContainer, sortCards(sideboardCards), "Sideboard", 40, 30); + new DeckCardZoneDisplayWidget(zoneContainer, sortCards(sideboardCards), tr("Sideboard"), 40, 30); connect(sideBoardWidget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr))); connect(sideBoardWidget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, SLOT(onSideboardClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)));