Revert "Feature/continuumatrice product migration"

This commit is contained in:
Christian Daniel Jensen 2026-11-03 18:51:23 -07:00 • committed by GitHub
parent 533d2f04c1
commit e49d053838
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
150 changed files with 2599 additions and 5304 deletions

View file

@ -90,18 +90,11 @@ bool CardDatabaseDisplayModel::lessThan(const QModelIndex &left, const QModelInd
if (isRightType && (!isLeftType || rightString.size() == cardName.size())) {
return false;
}
} else if (left.column() == right.column() &&
(left.column() == CardDatabaseModel::AttackColumn ||
left.column() == CardDatabaseModel::ArmourColumn ||
left.column() == CardDatabaseModel::HealthColumn)) {
// Compare numeric card statistics as numbers: 9 sorts before 10.
// Values containing expressions retain the existing numeric-prefix
// comparator instead of being forced into an integer type.
return lessThanNumerically(leftString, rightString) < 0;
} else if (right.column() == CardDatabaseModel::AtkHpColumn &&
left.column() == CardDatabaseModel::AtkHpColumn) {
// ATK/HP sorts by Attack first, then Health, both numerically.
// Operate on views to avoid allocations during large database sorts.
} else if (right.column() == CardDatabaseModel::PTColumn && left.column() == CardDatabaseModel::PTColumn) {
// The comparator runs O(n log n) times while the view is sorted, so
// splitting every power/toughness string into a QStringList allocates
// a lot for data that has exactly one separator. Work on views and
// only split the two halves out when both strings are well formed.
const QStringView leftPT = leftString;
const QStringView rightPT = rightString;
const qsizetype leftSlash = leftPT.indexOf(u'/');
@ -110,11 +103,11 @@ bool CardDatabaseDisplayModel::lessThan(const QModelIndex &left, const QModelInd
const bool rightIsWellFormed = rightSlash >= 0 && rightPT.indexOf(u'/', rightSlash + 1) < 0;
if (leftIsWellFormed && rightIsWellFormed) {
const int attackComparison = lessThanNumerically(leftPT.left(leftSlash), rightPT.left(rightSlash));
if (attackComparison != 0) {
return attackComparison < 0;
const int powerComparison = lessThanNumerically(leftPT.left(leftSlash), rightPT.left(rightSlash));
if (powerComparison != 0) {
return powerComparison < 0;
}
// Attack equal, compare Health
// power equal, check toughness
return lessThanNumerically(leftPT.mid(leftSlash + 1), rightPT.mid(rightSlash + 1)) < 0;
}
}

View file

@ -11,6 +11,7 @@
class QObject;
#define CARDDBMODEL_COLUMNS 6
CardDatabaseModel::CardDatabaseModel(CardDatabase *_db, bool _showOnlyCardsFromEnabledSets, QObject *parent)
: QAbstractListModel(parent), db(_db), showOnlyCardsFromEnabledSets(_showOnlyCardsFromEnabledSets)
@ -37,12 +38,12 @@ int CardDatabaseModel::columnCount(const QModelIndex &parent) const
{
// Card rows are leaves, so a valid parent holds no columns. Reporting the
// row width for a card index would claim child cells that do not exist.
return parent.isValid() ? 0 : ColumnCount;
return parent.isValid() ? 0 : CARDDBMODEL_COLUMNS;
}
QVariant CardDatabaseModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() >= cardList.size() || index.column() >= ColumnCount ||
if (!index.isValid() || index.row() >= cardList.size() || index.column() >= CARDDBMODEL_COLUMNS ||
(role != Qt::DisplayRole && role != SortRole)) {
return QVariant();
}
@ -58,18 +59,10 @@ QVariant CardDatabaseModel::data(const QModelIndex &index, int role) const
: card->getManaCost();
case CardTypeColumn:
return card->getCardType();
case AtkHpColumn:
return card->getAtkHp();
case PTColumn:
return card->getPowTough();
case ColorColumn:
return card->getColors();
case IdentityColumn:
return card->getIdentity();
case AttackColumn:
return card->getAttack();
case ArmourColumn:
return card->getArmour();
case HealthColumn:
return card->getHealth();
default:
return QVariant();
}
@ -89,21 +82,13 @@ QVariant CardDatabaseModel::headerData(int section, Qt::Orientation orientation,
case SetListColumn:
return QString(tr("Sets"));
case ManaCostColumn:
return QString(tr("Essence Cost"));
return QString(tr("Mana cost"));
case CardTypeColumn:
return QString(tr("Card type"));
case AtkHpColumn:
return QString(tr("ATK/HP"));
case PTColumn:
return QString(tr("P/T"));
case ColorColumn:
return QString(tr("Essence"));
case IdentityColumn:
return QString(tr("Identity"));
case AttackColumn:
return QString(tr("Attack"));
case ArmourColumn:
return QString(tr("Armour"));
case HealthColumn:
return QString(tr("Health"));
return QString(tr("Color(s)"));
default:
return QVariant();
}
@ -116,7 +101,7 @@ void CardDatabaseModel::cardInfoChanged(const CardInfoPtr &card)
return;
}
emit dataChanged(index(row, 0), index(row, ColumnCount - 1));
emit dataChanged(index(row, 0), index(row, CARDDBMODEL_COLUMNS - 1));
}
bool CardDatabaseModel::checkCardHasAtLeastOneEnabledSet(const CardInfoPtr &card) const

View file

@ -28,15 +28,9 @@ public:
NameColumn,
SetListColumn,
ManaCostColumn,
AtkHpColumn, // Formerly P/T; keep column index for saved table layouts.
PTColumn,
CardTypeColumn,
ColorColumn,
IdentityColumn,
AttackColumn,
ArmourColumn,
HealthColumn,
ColumnCount,
PTColumn = AtkHpColumn // Compatibility alias for inherited callers.
ColorColumn
};
enum Role
{