diff --git a/cockatrice/src/game/cards/card_database_model.cpp b/cockatrice/src/game/cards/card_database_model.cpp index a14a9d494..47f79eff5 100644 --- a/cockatrice/src/game/cards/card_database_model.cpp +++ b/cockatrice/src/game/cards/card_database_model.cpp @@ -110,15 +110,17 @@ bool CardDatabaseModel::checkCardHasAtLeastOneEnabledSet(CardInfoPtr card) void CardDatabaseModel::cardDatabaseEnabledSetsChanged() { // remove all the cards no more present in at least one enabled set - foreach (CardInfoPtr card, cardList) { - if (!checkCardHasAtLeastOneEnabledSet(card)) + for (const CardInfoPtr &card : cardList) { + if (!checkCardHasAtLeastOneEnabledSet(card)) { cardRemoved(card); + } } // re-check all the card currently not shown, maybe their part of a newly-enabled set - foreach (CardInfoPtr card, db->getCardList()) { - if (!cardList.contains(card)) + for (const CardInfoPtr &card : db->getCardList()) { + if (!cardListSet.contains(card)) { cardAdded(card); + } } } @@ -128,6 +130,7 @@ void CardDatabaseModel::cardAdded(CardInfoPtr card) // add the card if it's present in at least one enabled set beginInsertRows(QModelIndex(), cardList.size(), cardList.size()); cardList.append(card); + cardListSet.insert(card); connect(card.data(), SIGNAL(cardInfoChanged(CardInfoPtr)), this, SLOT(cardInfoChanged(CardInfoPtr))); endInsertRows(); } @@ -142,6 +145,7 @@ void CardDatabaseModel::cardRemoved(CardInfoPtr card) beginRemoveRows(QModelIndex(), row, row); disconnect(card.data(), nullptr, this, nullptr); + cardListSet.remove(card); card.clear(); cardList.removeAt(row); endRemoveRows(); diff --git a/cockatrice/src/game/cards/card_database_model.h b/cockatrice/src/game/cards/card_database_model.h index 403713c98..1720b4b9a 100644 --- a/cockatrice/src/game/cards/card_database_model.h +++ b/cockatrice/src/game/cards/card_database_model.h @@ -46,6 +46,7 @@ public: private: QList cardList; + QSet cardListSet; // Supports faster lookups in cardDatabaseEnabledSetsChanged() CardDatabase *db; bool showOnlyCardsFromEnabledSets;