Address some comments.

This commit is contained in:
Lukas Brübach 2025-03-01 10:49:15 +01:00
parent 6426f3c86c
commit fcbdefab4c
12 changed files with 111 additions and 94 deletions

View file

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

View file

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

View file

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

View file

@ -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<char, int> 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<QString, QColor> 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<QString, int> ManaBaseWidget::analyzeManaBase()
{
manaBaseMap.clear();
InnerDecklistNode *listRoot = deckListModel->getDeckList()->getRoot();
@ -60,38 +95,10 @@ std::unordered_map<char, int> 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<char, QColor> 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<char, int> ManaBaseWidget::determineManaProduction(const QString &rulesText)
std::unordered_map<QString, int> ManaBaseWidget::determineManaProduction(const QString &rulesText)
{
// Initialize mana counts
std::unordered_map<char, int> manaCounts = {{'W', 0}, {'U', 0}, {'B', 0}, {'R', 0}, {'G', 0}, {'C', 0}};
std::unordered_map<QString, int> 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<char, int> 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<char, int> 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<char, int> &manaCounts1,
const std::unordered_map<char, int> &manaCounts2)
void ManaBaseWidget::mergeManaCounts(std::unordered_map<QString, int> &manaCounts1,
const std::unordered_map<QString, int> &manaCounts2)
{
for (const auto &pair : manaCounts2) {
manaCounts1[pair.first] += pair.second; // Add values for matching keys
}
}
}

View file

@ -15,19 +15,21 @@ class ManaBaseWidget : public QWidget
public:
explicit ManaBaseWidget(QWidget *parent, DeckListModel *deckListModel);
std::unordered_map<char, int> analyzeManaBase();
std::unordered_map<QString, int> analyzeManaBase();
void updateDisplay();
std::unordered_map<char, int> determineManaProduction(const QString &manaString);
void mergeManaCounts(std::unordered_map<char, int> &manaCounts1, const std::unordered_map<char, int> &manaCounts2);
std::unordered_map<QString, int> determineManaProduction(const QString &manaString);
void mergeManaCounts(std::unordered_map<QString, int> &manaCounts1,
const std::unordered_map<QString, int> &manaCounts2);
public slots:
void setDeckModel(DeckListModel *deckModel);
void retranslateUi();
private:
DeckListModel *deckListModel;
BannerWidget *bannerWidget;
std::unordered_map<char, int> manaBaseMap;
std::unordered_map<QString, int> manaBaseMap;
QVBoxLayout *layout;
QHBoxLayout *barLayout;
};

View file

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

View file

@ -19,6 +19,7 @@ public:
public slots:
void setDeckModel(DeckListModel *deckModel);
std::unordered_map<int, int> analyzeManaCurve();
void retranslateUi();
private:
DeckListModel *deckListModel;

View file

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

View file

@ -22,6 +22,7 @@ public:
public slots:
void setDeckModel(DeckListModel *deckModel);
std::unordered_map<char, int> analyzeManaDevotion();
void retranslateUi();
private:
DeckListModel *deckListModel;

View file

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

View file

@ -17,6 +17,7 @@ public:
public slots:
void updateDisplay();
void setDeckModel(DeckListModel *deckModel);
void retranslateUi();
private:
DeckListModel *deckListModel;

View file

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