Support Picking Select Art per Card Basis (#5329)

This commit is contained in:
Zach H 2024-12-25 23:12:06 -05:00 committed by GitHub
parent 024bef7ded
commit c7ca55ceb5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 115 additions and 6 deletions

View file

@ -171,6 +171,7 @@ void PrintingSelector::getAllSetsForCurrentCard()
} else {
setsToUse = filteredSets;
}
setsToUse = sortToolBar->prependPinnedPrintings(setsToUse, selectedCard->getName());
// Defer widget creation
currentIndex = 0;
@ -182,6 +183,8 @@ void PrintingSelector::getAllSetsForCurrentCard()
setsToUse[currentIndex], currentZone);
flowWidget->addWidget(cardDisplayWidget);
cardDisplayWidget->clampSetNameToPicture();
connect(cardDisplayWidget, &PrintingSelectorCardDisplayWidget::cardPreferenceChanged, this,
&PrintingSelector::updateDisplay);
}
// Stop timer when done

View file

@ -46,6 +46,8 @@ PrintingSelectorCardDisplayWidget::PrintingSelectorCardDisplayWidget(QWidget *pa
// Create the overlay widget for the card display
overlayWidget = new PrintingSelectorCardOverlayWidget(this, deckEditor, deckModel, deckView, cardSizeSlider,
rootCard, setInfoForCard);
connect(overlayWidget, &PrintingSelectorCardOverlayWidget::cardPreferenceChanged, this,
[this]() { emit cardPreferenceChanged(); });
// Create the widget to display the set name and collector's number
const QString combinedSetName =

View file

@ -35,6 +35,9 @@ public:
public slots:
void clampSetNameToPicture();
signals:
void cardPreferenceChanged();
private:
QVBoxLayout *layout;
SetNameAndCollectorsNumberDisplayWidget *setNameAndCollectorsNumberDisplayWidget;

View file

@ -1,6 +1,7 @@
#include "printing_selector_card_overlay_widget.h"
#include "../../../../game/cards/card_database_manager.h"
#include "../../../../settings/cache_settings.h"
#include "printing_selector_card_display_widget.h"
#include <QMenu>
@ -165,6 +166,28 @@ void PrintingSelectorCardOverlayWidget::leaveEvent(QEvent *event)
void PrintingSelectorCardOverlayWidget::customMenu(QPoint point)
{
QMenu menu;
auto *preferenceMenu = new QMenu(tr("Preference"));
menu.addMenu(preferenceMenu);
const auto &preferredProviderId =
SettingsCache::instance().cardOverrides().getCardPreferenceOverride(rootCard->getName());
const auto &cardProviderId = setInfoForCard.getProperty("uuid");
if (preferredProviderId.isEmpty() || preferredProviderId != cardProviderId) {
auto *pinAction = preferenceMenu->addAction(tr("Pin Printing"));
connect(pinAction, &QAction::triggered, this, [this, cardProviderId]() {
SettingsCache::instance().cardOverrides().setCardPreferenceOverride(rootCard->getName(), cardProviderId);
emit cardPreferenceChanged();
});
} else {
auto *unpinAction = preferenceMenu->addAction(tr("Unpin Printing"));
connect(unpinAction, &QAction::triggered, this, [this, cardProviderId]() {
SettingsCache::instance().cardOverrides().deleteCardPreferenceOverride(rootCard->getName());
emit cardPreferenceChanged();
});
}
// filling out the related cards submenu
auto *relatedMenu = new QMenu(tr("Show Related cards"));
menu.addMenu(relatedMenu);

View file

@ -34,6 +34,9 @@ protected:
void mousePressEvent(QMouseEvent *event) override;
void customMenu(QPoint point);
signals:
void cardPreferenceChanged();
private:
CardInfoPictureWidget *cardInfoPicture;
AllZonesCardAmountWidget *allZonesCardAmountWidget;

View file

@ -74,7 +74,7 @@ void PrintingSelectorCardSortingWidget::updateSortSetting()
* @param cardInfoPerSets The list of card sets to be sorted.
* @return A sorted list of card sets.
*/
QList<CardInfoPerSet> PrintingSelectorCardSortingWidget::sortSets(CardInfoPerSetMap cardInfoPerSets)
QList<CardInfoPerSet> PrintingSelectorCardSortingWidget::sortSets(const CardInfoPerSetMap &cardInfoPerSets)
{
QList<CardSetPtr> sortedSets;
@ -148,6 +148,24 @@ QList<CardInfoPerSet> PrintingSelectorCardSortingWidget::filterSets(const QList<
return filteredSets;
}
QList<CardInfoPerSet> PrintingSelectorCardSortingWidget::prependPinnedPrintings(const QList<CardInfoPerSet> &sets,
const QString &cardName)
{
auto setsToUse = sets;
const auto &cardProviderId = SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardName);
if (!cardProviderId.isEmpty()) {
for (int i = 0; i < setsToUse.size(); ++i) {
const auto &card = setsToUse[i];
if (card.getProperty("uuid") == cardProviderId) {
setsToUse.move(i, 0);
break;
}
}
}
return setsToUse;
}
/**
* @brief Prepend card printings that are contained in the deck to the list of card sets.
*

View file

@ -12,11 +12,12 @@ class PrintingSelectorCardSortingWidget : public QWidget
Q_OBJECT
public:
explicit PrintingSelectorCardSortingWidget(PrintingSelector *parent);
QList<CardInfoPerSet> sortSets(CardInfoPerSetMap cardInfoPerSets);
static QList<CardInfoPerSet> filterSets(const QList<CardInfoPerSet> &sets, const QString &searchText);
static QList<CardInfoPerSet> prependPrintingsInDeck(const QList<CardInfoPerSet> &sets,
const CardInfoPtr &selectedCard,
DeckListModel *deckModel);
QList<CardInfoPerSet> sortSets(const CardInfoPerSetMap &cardInfoPerSets);
QList<CardInfoPerSet> filterSets(const QList<CardInfoPerSet> &sets, const QString &searchText);
QList<CardInfoPerSet> prependPinnedPrintings(const QList<CardInfoPerSet> &sets, const QString &cardName);
QList<CardInfoPerSet> prependPrintingsInDeck(const QList<CardInfoPerSet> &sets,
const CardInfoPtr &selectedCard,
DeckListModel *deckModel);
public slots:
void updateSortOrder();