mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-30 10:33:54 -07:00
[DeckListModel] Refactor to use column num constants (#6441)
This commit is contained in:
parent
e557ae0f2a
commit
be17ee1902
8 changed files with 46 additions and 38 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -134,13 +134,13 @@ void DeckEditorDatabaseDisplayWidget::clearAllDatabaseFilters()
|
||||||
|
|
||||||
void DeckEditorDatabaseDisplayWidget::updateCard(const QModelIndex ¤t, const QModelIndex & /*previous*/)
|
void DeckEditorDatabaseDisplayWidget::updateCard(const QModelIndex ¤t, 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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 ¤tIndex)
|
||||||
{
|
{
|
||||||
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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue