mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-14 06:22:15 -07:00
split implementation out to cpp
This commit is contained in:
parent
6be733444c
commit
700634c476
3 changed files with 57 additions and 51 deletions
|
|
@ -291,6 +291,7 @@ set(cockatrice_SOURCES
|
||||||
src/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp
|
src/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp
|
||||||
src/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
|
src/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
|
||||||
src/utility/card_info_comparator.cpp
|
src/utility/card_info_comparator.cpp
|
||||||
|
src/utility/deck_list_sort_filter_proxy_model.cpp
|
||||||
src/utility/key_signals.cpp
|
src/utility/key_signals.cpp
|
||||||
src/utility/levenshtein.cpp
|
src/utility/levenshtein.cpp
|
||||||
src/utility/logger.cpp
|
src/utility/logger.cpp
|
||||||
|
|
|
||||||
55
cockatrice/src/utility/deck_list_sort_filter_proxy_model.cpp
Normal file
55
cockatrice/src/utility/deck_list_sort_filter_proxy_model.cpp
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
#include "deck_list_sort_filter_proxy_model.h"
|
||||||
|
#include "../deck/deck_list_model.h"
|
||||||
|
|
||||||
|
bool DeckListSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
|
||||||
|
{
|
||||||
|
auto *src = sourceModel();
|
||||||
|
|
||||||
|
// Inner nodes? -> sort alphabetically by column 1
|
||||||
|
bool leftIsCard = src->data(left, Qt::UserRole + 1).toBool();
|
||||||
|
bool rightIsCard = src->data(right, Qt::UserRole + 1).toBool();
|
||||||
|
|
||||||
|
if (!leftIsCard || !rightIsCard) {
|
||||||
|
QString lName = src->data(left.siblingAtColumn(1), Qt::EditRole).toString();
|
||||||
|
QString rName = src->data(right.siblingAtColumn(1), Qt::EditRole).toString();
|
||||||
|
return lName.localeAwareCompare(rName) < 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Both are cards -> apply sort criteria
|
||||||
|
auto *lNode = static_cast<DecklistModelCardNode *>(left.internalPointer());
|
||||||
|
auto *rNode = static_cast<DecklistModelCardNode *>(right.internalPointer());
|
||||||
|
|
||||||
|
CardInfoPtr lInfo = CardDatabaseManager::getInstance()->guessCard({lNode->getName()}).getCardPtr();
|
||||||
|
CardInfoPtr rInfo = CardDatabaseManager::getInstance()->guessCard({rNode->getName()}).getCardPtr();
|
||||||
|
|
||||||
|
// Example: multiple tie-break criteria (colors > cmc > name)
|
||||||
|
for (const QString &crit : sortCriteria) {
|
||||||
|
if (crit == "name") {
|
||||||
|
QString ln = lNode->getName();
|
||||||
|
QString rn = rNode->getName();
|
||||||
|
int cmp = ln.localeAwareCompare(rn);
|
||||||
|
if (cmp != 0)
|
||||||
|
return cmp < 0;
|
||||||
|
} else if (crit == "cmc") {
|
||||||
|
int lc = lInfo ? lInfo->getCmc().toInt() : 0;
|
||||||
|
int rc = rInfo ? rInfo->getCmc().toInt() : 0;
|
||||||
|
if (lc != rc)
|
||||||
|
return lc < rc;
|
||||||
|
} else if (crit == "colors") {
|
||||||
|
QString lr = lInfo ? lInfo->getColors() : QString();
|
||||||
|
QString rr = rInfo ? rInfo->getColors() : QString();
|
||||||
|
int cmp = lr.localeAwareCompare(rr);
|
||||||
|
if (cmp != 0)
|
||||||
|
return cmp < 0;
|
||||||
|
} else if (crit == "maintype") {
|
||||||
|
QString lr = lInfo ? lInfo->getMainCardType() : QString();
|
||||||
|
QString rr = rInfo ? rInfo->getMainCardType() : QString();
|
||||||
|
int cmp = lr.localeAwareCompare(rr);
|
||||||
|
if (cmp != 0)
|
||||||
|
return cmp < 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -20,57 +20,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override
|
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
|
||||||
{
|
|
||||||
auto *src = sourceModel();
|
|
||||||
|
|
||||||
// Inner nodes? -> sort alphabetically by column 1
|
|
||||||
bool leftIsCard = src->data(left, Qt::UserRole + 1).toBool();
|
|
||||||
bool rightIsCard = src->data(right, Qt::UserRole + 1).toBool();
|
|
||||||
|
|
||||||
if (!leftIsCard || !rightIsCard) {
|
|
||||||
QString lName = src->data(left.siblingAtColumn(1), Qt::EditRole).toString();
|
|
||||||
QString rName = src->data(right.siblingAtColumn(1), Qt::EditRole).toString();
|
|
||||||
return lName.localeAwareCompare(rName) < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Both are cards -> apply sort criteria
|
|
||||||
auto *lNode = static_cast<DecklistModelCardNode *>(left.internalPointer());
|
|
||||||
auto *rNode = static_cast<DecklistModelCardNode *>(right.internalPointer());
|
|
||||||
|
|
||||||
CardInfoPtr lInfo = CardDatabaseManager::getInstance()->guessCard({lNode->getName()}).getCardPtr();
|
|
||||||
CardInfoPtr rInfo = CardDatabaseManager::getInstance()->guessCard({rNode->getName()}).getCardPtr();
|
|
||||||
|
|
||||||
// Example: multiple tie-break criteria (colors > cmc > name)
|
|
||||||
for (const QString &crit : sortCriteria) {
|
|
||||||
if (crit == "name") {
|
|
||||||
QString ln = lNode->getName();
|
|
||||||
QString rn = rNode->getName();
|
|
||||||
int cmp = ln.localeAwareCompare(rn);
|
|
||||||
if (cmp != 0)
|
|
||||||
return cmp < 0;
|
|
||||||
} else if (crit == "cmc") {
|
|
||||||
int lc = lInfo ? lInfo->getCmc().toInt() : 0;
|
|
||||||
int rc = rInfo ? rInfo->getCmc().toInt() : 0;
|
|
||||||
if (lc != rc)
|
|
||||||
return lc < rc;
|
|
||||||
} else if (crit == "colors") {
|
|
||||||
QString lr = lInfo ? lInfo->getColors() : QString();
|
|
||||||
QString rr = rInfo ? rInfo->getColors() : QString();
|
|
||||||
int cmp = lr.localeAwareCompare(rr);
|
|
||||||
if (cmp != 0)
|
|
||||||
return cmp < 0;
|
|
||||||
} else if (crit == "maintype") {
|
|
||||||
QString lr = lInfo ? lInfo->getMainCardType() : QString();
|
|
||||||
QString rr = rInfo ? rInfo->getMainCardType() : QString();
|
|
||||||
int cmp = lr.localeAwareCompare(rr);
|
|
||||||
if (cmp != 0)
|
|
||||||
return cmp < 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QStringList sortCriteria;
|
QStringList sortCriteria;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue