[DeckListModel] Refactor to use column num constants (#6441)

This commit is contained in:
RickyRister 2025-12-23 06:07:39 -08:00 committed by GitHub
parent e557ae0f2a
commit be17ee1902
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 46 additions and 38 deletions

View file

@ -91,8 +91,9 @@ QWidget *CardGroupDisplayWidget::constructWidgetForIndex(QPersistentModelIndex i
if (indexToWidgetMap.contains(index)) { if (indexToWidgetMap.contains(index)) {
return indexToWidgetMap[index]; return indexToWidgetMap[index];
} }
auto cardName = deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString(); auto cardName = index.sibling(index.row(), DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString();
auto cardProviderId = deckListModel->data(index.sibling(index.row(), 4), Qt::EditRole).toString(); auto cardProviderId =
index.sibling(index.row(), DeckListModelColumns::CARD_PROVIDER_ID).data(Qt::EditRole).toString();
auto widget = new CardInfoPictureWithTextOverlayWidget(getLayoutParent(), true); auto widget = new CardInfoPictureWithTextOverlayWidget(getLayoutParent(), true);
widget->setScaleFactor(cardSizeWidget->getSlider()->value()); widget->setScaleFactor(cardSizeWidget->getSlider()->value());
@ -114,7 +115,7 @@ void CardGroupDisplayWidget::updateCardDisplays()
// This doesn't really matter since overwrite the whole lessThan function to just compare dynamically anyway. // This doesn't really matter since overwrite the whole lessThan function to just compare dynamically anyway.
proxy.setSortRole(Qt::EditRole); proxy.setSortRole(Qt::EditRole);
proxy.sort(1, Qt::AscendingOrder); proxy.sort(DeckListModelColumns::CARD_NAME, Qt::AscendingOrder);
// 1. trackedIndex is a source index → map it to proxy space // 1. trackedIndex is a source index → map it to proxy space
QModelIndex proxyParent = proxy.mapFromSource(trackedIndex); QModelIndex proxyParent = proxy.mapFromSource(trackedIndex);

View file

@ -82,10 +82,11 @@ void DeckCardZoneDisplayWidget::cleanupInvalidCardGroup(CardGroupDisplayWidget *
void DeckCardZoneDisplayWidget::constructAppropriateWidget(QPersistentModelIndex index) void DeckCardZoneDisplayWidget::constructAppropriateWidget(QPersistentModelIndex index)
{ {
auto categoryName = deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString();
if (indexToWidgetMap.contains(index)) { if (indexToWidgetMap.contains(index)) {
return; return;
} }
auto categoryName = index.sibling(index.row(), DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString();
if (displayType == DisplayType::Overlap) { if (displayType == DisplayType::Overlap) {
auto *displayWidget = new OverlappedCardGroupDisplayWidget( auto *displayWidget = new OverlappedCardGroupDisplayWidget(
cardGroupContainer, deckListModel, selectionModel, index, zoneName, categoryName, activeGroupCriteria, cardGroupContainer, deckListModel, selectionModel, index, zoneName, categoryName, activeGroupCriteria,
@ -120,7 +121,7 @@ void DeckCardZoneDisplayWidget::displayCards()
QSortFilterProxyModel proxy; QSortFilterProxyModel proxy;
proxy.setSourceModel(deckListModel); proxy.setSourceModel(deckListModel);
proxy.setSortRole(Qt::EditRole); proxy.setSortRole(Qt::EditRole);
proxy.sort(1, Qt::AscendingOrder); proxy.sort(DeckListModelColumns::CARD_NAME, Qt::AscendingOrder);
// 1. trackedIndex is a source index → map it to proxy space // 1. trackedIndex is a source index → map it to proxy space
QModelIndex proxyParent = proxy.mapFromSource(trackedIndex); QModelIndex proxyParent = proxy.mapFromSource(trackedIndex);

View file

@ -134,13 +134,13 @@ void DeckEditorDatabaseDisplayWidget::clearAllDatabaseFilters()
void DeckEditorDatabaseDisplayWidget::updateCard(const QModelIndex &current, const QModelIndex & /*previous*/) void DeckEditorDatabaseDisplayWidget::updateCard(const QModelIndex &current, const QModelIndex & /*previous*/)
{ {
const QString cardName = current.sibling(current.row(), 0).data().toString();
if (!current.isValid()) { if (!current.isValid()) {
return; return;
} }
if (!current.model()->hasChildren(current.sibling(current.row(), 0))) { const QString cardName = current.siblingAtColumn(CardDatabaseModel::NameColumn).data().toString();
if (!current.model()->hasChildren(current.siblingAtColumn(CardDatabaseModel::NameColumn))) {
emit cardChanged(CardDatabaseManager::query()->getPreferredCard(cardName)); emit cardChanged(CardDatabaseManager::query()->getPreferredCard(cardName));
} }
} }
@ -172,7 +172,7 @@ ExactCard DeckEditorDatabaseDisplayWidget::currentCard() const
return {}; return {};
} }
const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString(); const QString cardName = currentIndex.siblingAtColumn(CardDatabaseModel::NameColumn).data().toString();
return CardDatabaseManager::query()->getPreferredCard(cardName); return CardDatabaseManager::query()->getPreferredCard(cardName);
} }

View file

@ -319,17 +319,17 @@ ExactCard DeckEditorDeckDockWidget::getCurrentCard()
QModelIndex current = deckView->selectionModel()->currentIndex(); QModelIndex current = deckView->selectionModel()->currentIndex();
if (!current.isValid()) if (!current.isValid())
return {}; return {};
const QString cardName = current.sibling(current.row(), 1).data().toString(); const QString cardName = current.siblingAtColumn(DeckListModelColumns::CARD_NAME).data().toString();
const QString cardProviderID = current.sibling(current.row(), 4).data().toString(); const QString cardProviderID = current.siblingAtColumn(DeckListModelColumns::CARD_PROVIDER_ID).data().toString();
const QModelIndex gparent = current.parent().parent(); const QModelIndex gparent = current.parent().parent();
if (!gparent.isValid()) { if (!gparent.isValid()) {
return {}; return {};
} }
const QString zoneName = gparent.sibling(gparent.row(), 1).data(Qt::EditRole).toString(); const QString zoneName = gparent.siblingAtColumn(DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString();
if (!current.model()->hasChildren(current.sibling(current.row(), 0))) { if (!current.model()->hasChildren(current.siblingAtColumn(DeckListModelColumns::CARD_AMOUNT))) {
if (ExactCard selectedCard = CardDatabaseManager::query()->getCard({cardName, cardProviderID})) { if (ExactCard selectedCard = CardDatabaseManager::query()->getCard({cardName, cardProviderID})) {
return selectedCard; return selectedCard;
} }
@ -665,14 +665,15 @@ bool DeckEditorDeckDockWidget::swapCard(const QModelIndex &currentIndex)
{ {
if (!currentIndex.isValid()) if (!currentIndex.isValid())
return false; return false;
const QString cardName = currentIndex.sibling(currentIndex.row(), 1).data().toString(); const QString cardName = currentIndex.siblingAtColumn(DeckListModelColumns::CARD_NAME).data().toString();
const QString cardProviderID = currentIndex.sibling(currentIndex.row(), 4).data().toString(); const QString cardProviderID =
currentIndex.siblingAtColumn(DeckListModelColumns::CARD_PROVIDER_ID).data().toString();
const QModelIndex gparent = currentIndex.parent().parent(); const QModelIndex gparent = currentIndex.parent().parent();
if (!gparent.isValid()) if (!gparent.isValid())
return false; return false;
const QString zoneName = gparent.sibling(gparent.row(), 1).data(Qt::EditRole).toString(); const QString zoneName = gparent.siblingAtColumn(DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString();
offsetCountAtIndex(currentIndex, -1); offsetCountAtIndex(currentIndex, -1);
const QString otherZoneName = zoneName == DECK_ZONE_MAIN ? DECK_ZONE_SIDE : DECK_ZONE_MAIN; const QString otherZoneName = zoneName == DECK_ZONE_MAIN ? DECK_ZONE_SIDE : DECK_ZONE_MAIN;
@ -738,7 +739,7 @@ void DeckEditorDeckDockWidget::actRemoveCard()
continue; continue;
} }
QModelIndex sourceIndex = proxy->mapToSource(index); QModelIndex sourceIndex = proxy->mapToSource(index);
QString cardName = sourceIndex.sibling(sourceIndex.row(), 1).data().toString(); QString cardName = sourceIndex.siblingAtColumn(DeckListModelColumns::CARD_NAME).data().toString();
emit requestDeckHistorySave(QString(tr("Removed \"%1\" (all copies)")).arg(cardName)); emit requestDeckHistorySave(QString(tr("Removed \"%1\" (all copies)")).arg(cardName));
@ -761,11 +762,11 @@ void DeckEditorDeckDockWidget::offsetCountAtIndex(const QModelIndex &idx, int of
QModelIndex sourceIndex = proxy->mapToSource(idx); QModelIndex sourceIndex = proxy->mapToSource(idx);
const QModelIndex numberIndex = sourceIndex.sibling(sourceIndex.row(), 0); const QModelIndex numberIndex = sourceIndex.siblingAtColumn(DeckListModelColumns::CARD_AMOUNT);
const QModelIndex nameIndex = sourceIndex.sibling(sourceIndex.row(), 1); const QModelIndex nameIndex = sourceIndex.siblingAtColumn(DeckListModelColumns::CARD_NAME);
const QString cardName = deckModel->data(nameIndex, Qt::EditRole).toString(); const QString cardName = nameIndex.data(Qt::EditRole).toString();
const int count = deckModel->data(numberIndex, Qt::EditRole).toInt(); const int count = numberIndex.data(Qt::EditRole).toInt();
const int new_count = count + offset; const int new_count = count + offset;
const auto reason = const auto reason =
@ -773,7 +774,7 @@ void DeckEditorDeckDockWidget::offsetCountAtIndex(const QModelIndex &idx, int of
.arg(offset > 0 ? tr("Added") : tr("Removed")) .arg(offset > 0 ? tr("Added") : tr("Removed"))
.arg(qAbs(offset)) .arg(qAbs(offset))
.arg(cardName) .arg(cardName)
.arg(deckModel->data(sourceIndex.sibling(sourceIndex.row(), 4), Qt::DisplayRole).toString()); .arg(sourceIndex.siblingAtColumn(DeckListModelColumns::CARD_PROVIDER_ID).data(Qt::DisplayRole).toString());
emit requestDeckHistorySave(reason); emit requestDeckHistorySave(reason);

View file

@ -151,9 +151,10 @@ void CardAmountWidget::addPrinting(const QString &zone)
bool replacingProviderless = false; bool replacingProviderless = false;
if (existing.isValid()) { if (existing.isValid()) {
QString providerId = deckModel->data(existing.sibling(existing.row(), 4), Qt::DisplayRole).toString(); QString providerId =
existing.siblingAtColumn(DeckListModelColumns::CARD_PROVIDER_ID).data(Qt::DisplayRole).toString();
if (providerId.isEmpty()) { if (providerId.isEmpty()) {
int amount = deckModel->data(existing, Qt::DisplayRole).toInt(); int amount = existing.data(Qt::DisplayRole).toInt();
extraCopies = amount - 1; // One less because we *always* add one extraCopies = amount - 1; // One less because we *always* add one
replacingProviderless = true; replacingProviderless = true;
} }
@ -177,9 +178,10 @@ void CardAmountWidget::addPrinting(const QString &zone)
recursiveExpand(newCardIndex); recursiveExpand(newCardIndex);
// Check if a card without a providerId already exists in the deckModel and replace it, if so. // Check if a card without a providerId already exists in the deckModel and replace it, if so.
QString foundProviderId = deckModel->data(existing.sibling(existing.row(), 4), Qt::DisplayRole).toString(); QString foundProviderId =
existing.siblingAtColumn(DeckListModelColumns::CARD_PROVIDER_ID).data(Qt::DisplayRole).toString();
if (existing.isValid() && existing != newCardIndex && foundProviderId == "") { if (existing.isValid() && existing != newCardIndex && foundProviderId == "") {
auto amount = deckModel->data(existing, Qt::DisplayRole); auto amount = existing.data(Qt::DisplayRole);
for (int i = 0; i < amount.toInt() - 1; i++) { for (int i = 0; i < amount.toInt() - 1; i++) {
deckModel->addCard(rootCard, zone); deckModel->addCard(rootCard, zone);
} }
@ -252,8 +254,8 @@ void CardAmountWidget::offsetCountAtIndex(const QModelIndex &idx, int offset)
return; return;
} }
const QModelIndex numberIndex = idx.sibling(idx.row(), 0); const QModelIndex numberIndex = idx.siblingAtColumn(DeckListModelColumns::CARD_AMOUNT);
const int count = deckModel->data(numberIndex, Qt::EditRole).toInt(); const int count = numberIndex.data(Qt::EditRole).toInt();
const int new_count = count + offset; const int new_count = count + offset;
deckView->setCurrentIndex(numberIndex); deckView->setCurrentIndex(numberIndex);

View file

@ -83,7 +83,7 @@ void ArchidektApiResponseDeckDisplayWidget::retranslateUi()
void ArchidektApiResponseDeckDisplayWidget::onGroupCriteriaChange(const QString &activeGroupCriteria) void ArchidektApiResponseDeckDisplayWidget::onGroupCriteriaChange(const QString &activeGroupCriteria)
{ {
model->setActiveGroupCriteria(DeckListModelGroupCriteria::fromString(activeGroupCriteria)); model->setActiveGroupCriteria(DeckListModelGroupCriteria::fromString(activeGroupCriteria));
model->sort(1, Qt::AscendingOrder); model->sort(DeckListModelColumns::CARD_NAME, Qt::AscendingOrder);
} }
void ArchidektApiResponseDeckDisplayWidget::actOpenInDeckEditor() void ArchidektApiResponseDeckDisplayWidget::actOpenInDeckEditor()
@ -120,7 +120,7 @@ void ArchidektApiResponseDeckDisplayWidget::constructZoneWidgetsFromDeckListMode
QSortFilterProxyModel proxy; QSortFilterProxyModel proxy;
proxy.setSourceModel(model); proxy.setSourceModel(model);
proxy.setSortRole(Qt::EditRole); proxy.setSortRole(Qt::EditRole);
proxy.sort(1, Qt::AscendingOrder); proxy.sort(DeckListModelColumns::CARD_NAME, Qt::AscendingOrder);
for (int i = 0; i < proxy.rowCount(); ++i) { for (int i = 0; i < proxy.rowCount(); ++i) {
QModelIndex proxyIndex = proxy.index(i, 0); QModelIndex proxyIndex = proxy.index(i, 0);
@ -133,10 +133,12 @@ void ArchidektApiResponseDeckDisplayWidget::constructZoneWidgetsFromDeckListMode
continue; continue;
} }
QString zoneName =
persistent.sibling(persistent.row(), DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString();
DeckCardZoneDisplayWidget *zoneDisplayWidget = DeckCardZoneDisplayWidget *zoneDisplayWidget =
new DeckCardZoneDisplayWidget(zoneContainer, model, nullptr, persistent, new DeckCardZoneDisplayWidget(zoneContainer, model, nullptr, persistent, zoneName, "maintype", {"name"},
model->data(persistent.sibling(persistent.row(), 1), Qt::EditRole).toString(), DisplayType::Overlap, 20, 10, cardSizeSlider);
"maintype", {"name"}, DisplayType::Overlap, 20, 10, cardSizeSlider);
connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::sortCriteriaChanged, zoneDisplayWidget, connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::sortCriteriaChanged, zoneDisplayWidget,
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged); &DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);

View file

@ -264,9 +264,10 @@ void VisualDeckEditorWidget::onCardRemoval(const QModelIndex &parent, int first,
void VisualDeckEditorWidget::constructZoneWidgetForIndex(QPersistentModelIndex persistent) void VisualDeckEditorWidget::constructZoneWidgetForIndex(QPersistentModelIndex persistent)
{ {
QString zoneName =
persistent.sibling(persistent.row(), DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString();
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget( DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
zoneContainer, deckListModel, selectionModel, persistent, zoneContainer, deckListModel, selectionModel, persistent, zoneName,
deckListModel->data(persistent.sibling(persistent.row(), 1), Qt::EditRole).toString(),
displayOptionsWidget->getActiveGroupCriteria(), displayOptionsWidget->getActiveSortCriteria(), displayOptionsWidget->getActiveGroupCriteria(), displayOptionsWidget->getActiveSortCriteria(),
displayOptionsWidget->getDisplayType(), 20, 10, cardSizeWidget); displayOptionsWidget->getDisplayType(), 20, 10, cardSizeWidget);
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover); connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
@ -290,7 +291,7 @@ void VisualDeckEditorWidget::constructZoneWidgetsFromDeckListModel()
QSortFilterProxyModel proxy; QSortFilterProxyModel proxy;
proxy.setSourceModel(deckListModel); proxy.setSourceModel(deckListModel);
proxy.setSortRole(Qt::EditRole); proxy.setSortRole(Qt::EditRole);
proxy.sort(1, Qt::AscendingOrder); proxy.sort(DeckListModelColumns::CARD_NAME, Qt::AscendingOrder);
for (int i = 0; i < proxy.rowCount(); ++i) { for (int i = 0; i < proxy.rowCount(); ++i) {
QModelIndex proxyIndex = proxy.index(i, 0); QModelIndex proxyIndex = proxy.index(i, 0);

View file

@ -11,8 +11,8 @@ bool DeckListSortFilterProxyModel::lessThan(const QModelIndex &left, const QMode
bool rightIsCard = src->data(right, Qt::UserRole + 1).toBool(); bool rightIsCard = src->data(right, Qt::UserRole + 1).toBool();
if (!leftIsCard || !rightIsCard) { if (!leftIsCard || !rightIsCard) {
QString lName = src->data(left.siblingAtColumn(1), Qt::EditRole).toString(); QString lName = src->data(left.siblingAtColumn(DeckListModelColumns::CARD_NAME), Qt::EditRole).toString();
QString rName = src->data(right.siblingAtColumn(1), Qt::EditRole).toString(); QString rName = src->data(right.siblingAtColumn(DeckListModelColumns::CARD_NAME), Qt::EditRole).toString();
return lName.localeAwareCompare(rName) < 0; return lName.localeAwareCompare(rName) < 0;
} }