mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-05 21:13:55 -07:00
[PrintingSelector] Replace std::tuple with ZoneCounts struct for readability (#6546)
This commit is contained in:
parent
f9403a3742
commit
4d1a88634e
7 changed files with 54 additions and 35 deletions
|
|
@ -255,10 +255,11 @@ bool DeckStateManager::swapCardAtIndex(const QModelIndex &idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
QString zoneName = gparent.siblingAtColumn(DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString();
|
QString zoneName = gparent.siblingAtColumn(DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString();
|
||||||
QString otherZoneName = zoneName == DECK_ZONE_TOKENS
|
// tokens have no swap target
|
||||||
? DECK_ZONE_TOKENS
|
if (zoneName == DECK_ZONE_TOKENS) {
|
||||||
: (zoneName == DECK_ZONE_MAIN ? DECK_ZONE_SIDE : DECK_ZONE_MAIN);
|
return false;
|
||||||
// if card is Token,it should be swap to DECK_ZONE_TOKENS,not DECK_ZONE_MAIN or DECK_ZONE_SIDE.
|
}
|
||||||
|
QString otherZoneName = zoneName == DECK_ZONE_MAIN ? DECK_ZONE_SIDE : DECK_ZONE_MAIN;
|
||||||
|
|
||||||
QString reason = tr("Moved to %1 1 × \"%2\" (%3)") //
|
QString reason = tr("Moved to %1 1 × \"%2\" (%3)") //
|
||||||
.arg(otherZoneName)
|
.arg(otherZoneName)
|
||||||
|
|
|
||||||
|
|
@ -31,15 +31,15 @@ AllZonesCardAmountWidget::AllZonesCardAmountWidget(QWidget *parent,
|
||||||
buttonBoxMainboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_MAIN);
|
buttonBoxMainboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_MAIN);
|
||||||
zoneLabelSideboard = new ShadowBackgroundLabel(this, tr("Sideboard"));
|
zoneLabelSideboard = new ShadowBackgroundLabel(this, tr("Sideboard"));
|
||||||
buttonBoxSideboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_SIDE);
|
buttonBoxSideboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_SIDE);
|
||||||
zoneLabelTokensboard = new ShadowBackgroundLabel(this, tr("Tokensboard"));
|
zoneLabelTokensboard = new ShadowBackgroundLabel(this, tr("Tokens"));
|
||||||
buttonBoxTokensboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_TOKENS);
|
buttonBoxTokensboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_TOKENS);
|
||||||
|
|
||||||
layout->addWidget(zoneLabelMainboard, 0, Qt::AlignHCenter | Qt::AlignBottom);
|
layout->addWidget(zoneLabelMainboard, 0, Qt::AlignHCenter | Qt::AlignBottom);
|
||||||
layout->addWidget(buttonBoxMainboard, 0, Qt::AlignHCenter | Qt::AlignTop);
|
layout->addWidget(buttonBoxMainboard, 0, Qt::AlignHCenter | Qt::AlignTop);
|
||||||
layout->addSpacing(12.5);
|
layout->addSpacing(12);
|
||||||
layout->addWidget(zoneLabelTokensboard, 0, Qt::AlignHCenter | Qt::AlignBottom);
|
layout->addWidget(zoneLabelTokensboard, 0, Qt::AlignHCenter | Qt::AlignBottom);
|
||||||
layout->addWidget(buttonBoxTokensboard, 0, Qt::AlignHCenter | Qt::AlignTop);
|
layout->addWidget(buttonBoxTokensboard, 0, Qt::AlignHCenter | Qt::AlignTop);
|
||||||
layout->addSpacing(12.5);
|
layout->addSpacing(13);
|
||||||
layout->addWidget(zoneLabelSideboard, 0, Qt::AlignHCenter | Qt::AlignBottom);
|
layout->addWidget(zoneLabelSideboard, 0, Qt::AlignHCenter | Qt::AlignBottom);
|
||||||
layout->addWidget(buttonBoxSideboard, 0, Qt::AlignHCenter | Qt::AlignTop);
|
layout->addWidget(buttonBoxSideboard, 0, Qt::AlignHCenter | Qt::AlignTop);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,19 @@ void CardAmountWidget::updateCardCount()
|
||||||
layout->activate();
|
layout->activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QString zoneLogName(const QString &zone)
|
||||||
|
{
|
||||||
|
if (zone == DECK_ZONE_MAIN) {
|
||||||
|
return "mainboard";
|
||||||
|
} else if (zone == DECK_ZONE_SIDE) {
|
||||||
|
return "sideboard";
|
||||||
|
} else if (zone == DECK_ZONE_TOKENS) {
|
||||||
|
return "tokens";
|
||||||
|
} else {
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static QModelIndex addAndReplacePrintings(DeckListModel *model,
|
static QModelIndex addAndReplacePrintings(DeckListModel *model,
|
||||||
const QModelIndex &existing,
|
const QModelIndex &existing,
|
||||||
const ExactCard &rootCard,
|
const ExactCard &rootCard,
|
||||||
|
|
@ -186,15 +199,15 @@ void CardAmountWidget::addPrinting(const QString &zone)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString reason =
|
QString zoneName = zoneLogName(zone);
|
||||||
QString("Added %1 copies of '%2 (%3) %4' to %5 [ProviderID: %6]%7")
|
QString reason = QString("Added %1 copies of '%2 (%3) %4' to %5 [ProviderID: %6]%7")
|
||||||
.arg(1 + extraCopies)
|
.arg(1 + extraCopies)
|
||||||
.arg(rootCard.getName())
|
.arg(rootCard.getName())
|
||||||
.arg(rootCard.getPrinting().getSet()->getShortName())
|
.arg(rootCard.getPrinting().getSet()->getShortName())
|
||||||
.arg(rootCard.getPrinting().getProperty("num"))
|
.arg(rootCard.getPrinting().getProperty("num"))
|
||||||
.arg(zone == DECK_ZONE_MAIN ? "mainboard" : (zone == DECK_ZONE_SIDE ? "sideboard" : "tokensboard"))
|
.arg(zoneName)
|
||||||
.arg(rootCard.getPrinting().getUuid())
|
.arg(rootCard.getPrinting().getUuid())
|
||||||
.arg(replacingProviderless ? " (replaced providerless printings)" : "");
|
.arg(replacingProviderless ? " (replaced providerless printings)" : "");
|
||||||
|
|
||||||
// Add the card and expand the list UI
|
// Add the card and expand the list UI
|
||||||
QModelIndex newCardIndex = deckStateManager->modifyDeck(reason, [&](auto model) {
|
QModelIndex newCardIndex = deckStateManager->modifyDeck(reason, [&](auto model) {
|
||||||
|
|
@ -261,13 +274,13 @@ void CardAmountWidget::removePrintingTokensboard()
|
||||||
*/
|
*/
|
||||||
void CardAmountWidget::decrementCardHelper(const QString &zone)
|
void CardAmountWidget::decrementCardHelper(const QString &zone)
|
||||||
{
|
{
|
||||||
QString reason =
|
QString zoneName = zoneLogName(zone);
|
||||||
QString("Removed 1 copy of '%1 (%2) %3' from %4 [ProviderID: %5]")
|
QString reason = QString("Removed 1 copy of '%1 (%2) %3' from %4 [ProviderID: %5]")
|
||||||
.arg(rootCard.getName())
|
.arg(rootCard.getName())
|
||||||
.arg(rootCard.getPrinting().getSet()->getShortName())
|
.arg(rootCard.getPrinting().getSet()->getShortName())
|
||||||
.arg(rootCard.getPrinting().getProperty("num"))
|
.arg(rootCard.getPrinting().getProperty("num"))
|
||||||
.arg(zone == DECK_ZONE_MAIN ? "mainboard" : (zone == DECK_ZONE_SIDE ? "sideboard" : "tokensboard"))
|
.arg(zoneName)
|
||||||
.arg(rootCard.getPrinting().getUuid());
|
.arg(rootCard.getPrinting().getUuid());
|
||||||
|
|
||||||
deckStateManager->modifyDeck(reason, [this, &zone](auto model) {
|
deckStateManager->modifyDeck(reason, [this, &zone](auto model) {
|
||||||
QModelIndex idx = model->findCard(rootCard.getName(), zone, rootCard.getPrinting().getUuid(),
|
QModelIndex idx = model->findCard(rootCard.getName(), zone, rootCard.getPrinting().getUuid(),
|
||||||
|
|
|
||||||
|
|
@ -107,28 +107,28 @@ void PrintingSelector::printingsInDeckChanged()
|
||||||
/**
|
/**
|
||||||
* @return A map of uuid to amounts (main, side, tokens).
|
* @return A map of uuid to amounts (main, side, tokens).
|
||||||
*/
|
*/
|
||||||
static QMap<QString, std::tuple<int, int, int>> tallyUuidCounts(const DeckListModel *model, const QString &cardName)
|
static QMap<QString, ZoneCounts> tallyUuidCounts(const DeckListModel *model, const QString &cardName)
|
||||||
{
|
{
|
||||||
QMap<QString, std::tuple<int, int, int>> map;
|
QMap<QString, ZoneCounts> map;
|
||||||
|
|
||||||
auto mainNodes = model->getCardNodesForZone(DECK_ZONE_MAIN);
|
auto mainNodes = model->getCardNodesForZone(DECK_ZONE_MAIN);
|
||||||
for (auto &node : mainNodes) {
|
for (auto &node : mainNodes) {
|
||||||
if (node->getName() == cardName) {
|
if (node->getName() == cardName) {
|
||||||
std::get<0>(map[node->getCardProviderId()]) += node->getNumber();
|
map[node->getCardProviderId()].mainboard += node->getNumber();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto sideNodes = model->getCardNodesForZone(DECK_ZONE_SIDE);
|
auto sideNodes = model->getCardNodesForZone(DECK_ZONE_SIDE);
|
||||||
for (auto &node : sideNodes) {
|
for (auto &node : sideNodes) {
|
||||||
if (node->getName() == cardName) {
|
if (node->getName() == cardName) {
|
||||||
std::get<1>(map[node->getCardProviderId()]) += node->getNumber();
|
map[node->getCardProviderId()].sideboard += node->getNumber();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto tokensNodes = model->getCardNodesForZone(DECK_ZONE_TOKENS);
|
auto tokensNodes = model->getCardNodesForZone(DECK_ZONE_TOKENS);
|
||||||
for (auto &node : tokensNodes) {
|
for (auto &node : tokensNodes) {
|
||||||
if (node->getName() == cardName) {
|
if (node->getName() == cardName) {
|
||||||
std::get<2>(map[node->getCardProviderId()]) += node->getNumber();
|
map[node->getCardProviderId()].tokensboard += node->getNumber();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,16 @@
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <libcockatrice/card/card_info.h>
|
#include <libcockatrice/card/card_info.h>
|
||||||
#include <libcockatrice/models/deck_list/deck_list_model.h>
|
#include <libcockatrice/models/deck_list/deck_list_model.h>
|
||||||
#include <tuple>
|
|
||||||
|
|
||||||
#define BATCH_SIZE 10
|
#define BATCH_SIZE 10
|
||||||
|
|
||||||
|
struct ZoneCounts
|
||||||
|
{
|
||||||
|
int mainboard = 0;
|
||||||
|
int sideboard = 0;
|
||||||
|
int tokensboard = 0;
|
||||||
|
};
|
||||||
|
|
||||||
class DeckStateManager;
|
class DeckStateManager;
|
||||||
class PrintingSelectorCardSearchWidget;
|
class PrintingSelectorCardSearchWidget;
|
||||||
class PrintingSelectorCardSelectionWidget;
|
class PrintingSelectorCardSelectionWidget;
|
||||||
|
|
@ -62,7 +68,7 @@ signals:
|
||||||
* The amounts of the printings in the deck has changed
|
* The amounts of the printings in the deck has changed
|
||||||
* @param uuidToAmounts Map of uuids to the amounts (maindeck, sideboard, tokensboard) in the deck
|
* @param uuidToAmounts Map of uuids to the amounts (maindeck, sideboard, tokensboard) in the deck
|
||||||
*/
|
*/
|
||||||
void cardAmountsChanged(const QMap<QString, std::tuple<int, int, int>> &uuidToAmounts);
|
void cardAmountsChanged(const QMap<QString, ZoneCounts> &uuidToAmounts);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout *layout;
|
QVBoxLayout *layout;
|
||||||
|
|
|
||||||
|
|
@ -67,10 +67,10 @@ void PrintingSelectorCardDisplayWidget::clampSetNameToPicture()
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrintingSelectorCardDisplayWidget::updateCardAmounts(const QMap<QString, std::tuple<int, int, int>> &uuidToAmounts)
|
void PrintingSelectorCardDisplayWidget::updateCardAmounts(const QMap<QString, ZoneCounts> &uuidToAmounts)
|
||||||
{
|
{
|
||||||
auto [main, side, tokens] = uuidToAmounts.value(rootCard.getPrinting().getUuid());
|
auto counts = uuidToAmounts.value(rootCard.getPrinting().getUuid());
|
||||||
overlayWidget->updateCardAmounts(main, side, tokens);
|
overlayWidget->updateCardAmounts(counts.mainboard, counts.sideboard, counts.tokensboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrintingSelectorCardDisplayWidget::resizeEvent(QResizeEvent *event)
|
void PrintingSelectorCardDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <libcockatrice/models/deck_list/deck_list_model.h>
|
#include <libcockatrice/models/deck_list/deck_list_model.h>
|
||||||
#include <tuple>
|
|
||||||
|
|
||||||
class PrintingSelectorCardDisplayWidget : public QWidget
|
class PrintingSelectorCardDisplayWidget : public QWidget
|
||||||
{
|
{
|
||||||
|
|
@ -28,7 +27,7 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void clampSetNameToPicture();
|
void clampSetNameToPicture();
|
||||||
void updateCardAmounts(const QMap<QString, std::tuple<int, int, int>> &uuidToAmounts);
|
void updateCardAmounts(const QMap<QString, ZoneCounts> &uuidToAmounts);
|
||||||
|
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue