[GDE] Fix add card always grouping by type (#5995)

This commit is contained in:
RickyRister 2025-06-21 18:12:24 -07:00 committed by GitHub
parent 6f3a07b756
commit 90ce5f2c57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 26 deletions

View file

@ -29,7 +29,7 @@ DeckListModel::~DeckListModel()
delete root; delete root;
} }
QString DeckListModel::getSortCriteriaForCard(CardInfoPtr info) QString DeckListModel::getGroupCriteriaForCard(CardInfoPtr info) const
{ {
if (!info) { if (!info) {
return "unknown"; return "unknown";
@ -67,15 +67,15 @@ void DeckListModel::rebuildTree()
} }
CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName()); CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName());
QString cardType = getSortCriteriaForCard(info); QString groupCriteria = getGroupCriteriaForCard(info);
auto *cardTypeNode = dynamic_cast<InnerDecklistNode *>(node->findChild(cardType)); auto *groupNode = dynamic_cast<InnerDecklistNode *>(node->findChild(groupCriteria));
if (!cardTypeNode) { if (!groupNode) {
cardTypeNode = new InnerDecklistNode(cardType, node); groupNode = new InnerDecklistNode(groupCriteria, node);
} }
new DecklistModelCardNode(currentCard, cardTypeNode); new DecklistModelCardNode(currentCard, groupNode);
} }
} }
@ -332,28 +332,24 @@ DecklistModelCardNode *DeckListModel::findCardNode(const QString &cardName,
const QString &providerId, const QString &providerId,
const QString &cardNumber) const const QString &cardNumber) const
{ {
InnerDecklistNode *zoneNode, *typeNode; InnerDecklistNode *zoneNode = dynamic_cast<InnerDecklistNode *>(root->findChild(zoneName));
CardInfoPtr info;
QString cardType;
zoneNode = dynamic_cast<InnerDecklistNode *>(root->findChild(zoneName));
if (!zoneNode) { if (!zoneNode) {
return nullptr; return nullptr;
} }
info = CardDatabaseManager::getInstance()->getCard(cardName); CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(cardName);
if (!info) { if (!info) {
return nullptr; return nullptr;
} }
cardType = info->getMainCardType(); QString groupCriteria = getGroupCriteriaForCard(info);
typeNode = dynamic_cast<InnerDecklistNode *>(zoneNode->findChild(cardType)); InnerDecklistNode *groupNode = dynamic_cast<InnerDecklistNode *>(zoneNode->findChild(groupCriteria));
if (!typeNode) { if (!groupNode) {
return nullptr; return nullptr;
} }
return dynamic_cast<DecklistModelCardNode *>( return dynamic_cast<DecklistModelCardNode *>(
typeNode->findCardChildByNameProviderIdAndNumber(cardName, providerId, cardNumber)); groupNode->findCardChildByNameProviderIdAndNumber(cardName, providerId, cardNumber));
} }
QModelIndex DeckListModel::findCard(const QString &cardName, QModelIndex DeckListModel::findCard(const QString &cardName,
@ -361,9 +357,7 @@ QModelIndex DeckListModel::findCard(const QString &cardName,
const QString &providerId, const QString &providerId,
const QString &cardNumber) const const QString &cardNumber) const
{ {
DecklistModelCardNode *cardNode; DecklistModelCardNode *cardNode = findCardNode(cardName, zoneName, providerId, cardNumber);
cardNode = findCardNode(cardName, zoneName, providerId, cardNumber);
if (!cardNode) { if (!cardNode) {
return {}; return {};
} }
@ -399,23 +393,23 @@ QModelIndex DeckListModel::addCard(const QString &cardName,
InnerDecklistNode *zoneNode = createNodeIfNeeded(zoneName, root); InnerDecklistNode *zoneNode = createNodeIfNeeded(zoneName, root);
const QString cardType = cardInfo->getMainCardType(); QString groupCriteria = getGroupCriteriaForCard(cardInfo);
InnerDecklistNode *cardTypeNode = createNodeIfNeeded(cardType, zoneNode); InnerDecklistNode *groupNode = createNodeIfNeeded(groupCriteria, zoneNode);
const QModelIndex parentIndex = nodeToIndex(cardTypeNode); const QModelIndex parentIndex = nodeToIndex(groupNode);
auto *cardNode = dynamic_cast<DecklistModelCardNode *>(cardTypeNode->findCardChildByNameProviderIdAndNumber( auto *cardNode = dynamic_cast<DecklistModelCardNode *>(groupNode->findCardChildByNameProviderIdAndNumber(
cardName, cardInfoSet.getProperty("uuid"), cardInfoSet.getProperty("num"))); cardName, cardInfoSet.getProperty("uuid"), cardInfoSet.getProperty("num")));
const auto cardSetName = cardInfoSet.getPtr().isNull() ? "" : cardInfoSet.getPtr()->getCorrectedShortName(); const auto cardSetName = cardInfoSet.getPtr().isNull() ? "" : cardInfoSet.getPtr()->getCorrectedShortName();
if (!cardNode) { if (!cardNode) {
// Determine the correct index // Determine the correct index
int insertRow = findSortedInsertRow(cardTypeNode, cardInfo); int insertRow = findSortedInsertRow(groupNode, cardInfo);
auto *decklistCard = deckList->addCard(cardInfo->getName(), zoneName, insertRow, cardSetName, auto *decklistCard = deckList->addCard(cardInfo->getName(), zoneName, insertRow, cardSetName,
cardInfoSet.getProperty("num"), cardInfoSet.getProperty("uuid")); cardInfoSet.getProperty("num"), cardInfoSet.getProperty("uuid"));
beginInsertRows(parentIndex, insertRow, insertRow); beginInsertRows(parentIndex, insertRow, insertRow);
cardNode = new DecklistModelCardNode(decklistCard, cardTypeNode, insertRow); cardNode = new DecklistModelCardNode(decklistCard, groupNode, insertRow);
endInsertRows(); endInsertRows();
} else { } else {
cardNode->setNumber(cardNode->getNumber() + 1); cardNode->setNumber(cardNode->getNumber() + 1);

View file

@ -96,7 +96,7 @@ public:
{ {
return nodeToIndex(root); return nodeToIndex(root);
}; };
QString getSortCriteriaForCard(CardInfoPtr info); QString getGroupCriteriaForCard(CardInfoPtr info) const;
int rowCount(const QModelIndex &parent) const override; int rowCount(const QModelIndex &parent) const override;
int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override; int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role) const override; QVariant data(const QModelIndex &index, int role) const override;