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

@ -128,6 +128,7 @@ set(cockatrice_SOURCES
src/settings/cache_settings.cpp
src/settings/shortcuts_settings.cpp
src/settings/shortcut_treeview.cpp
src/settings/card_override_settings.cpp
src/client/sound_engine.cpp
src/client/network/spoiler_background_updater.cpp
src/game/zones/stack_zone.cpp

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();

View File

@ -1,6 +1,7 @@
#include "cache_settings.h"
#include "../client/network/release_channel.h"
#include "card_override_settings.h"
#include <QApplication>
#include <QDebug>
@ -179,6 +180,7 @@ SettingsCache::SettingsCache()
layoutsSettings = new LayoutsSettings(settingsPath, this);
downloadSettings = new DownloadSettings(settingsPath, this);
recentsSettings = new RecentsSettings(settingsPath, this);
cardOverrideSettings = new CardOverrideSettings(settingsPath, this);
if (!QFile(settingsPath + "global.ini").exists())
translateLegacySettings();

View File

@ -3,6 +3,7 @@
#include "../utility/macros.h"
#include "card_database_settings.h"
#include "card_override_settings.h"
#include "download_settings.h"
#include "game_filters_settings.h"
#include "layouts_settings.h"
@ -84,6 +85,7 @@ private:
LayoutsSettings *layoutsSettings;
DownloadSettings *downloadSettings;
RecentsSettings *recentsSettings;
CardOverrideSettings *cardOverrideSettings;
QByteArray mainWindowGeometry;
QByteArray tokenDialogGeometry;
@ -604,6 +606,10 @@ public:
{
return *recentsSettings;
}
CardOverrideSettings &cardOverrides() const
{
return *cardOverrideSettings;
}
bool getIsPortableBuild() const
{
return isPortableBuild;

View File

@ -0,0 +1,21 @@
#include "card_override_settings.h"
CardOverrideSettings::CardOverrideSettings(QString settingPath, QObject *parent)
: SettingsManager(settingPath + "cardPreferenceOverrides.ini", parent)
{
}
void CardOverrideSettings::setCardPreferenceOverride(const QString &cardName, const QString &providerId)
{
setValue(providerId, cardName, "cards");
}
void CardOverrideSettings::deleteCardPreferenceOverride(const QString &cardName)
{
deleteValue(cardName, "cards");
}
QString CardOverrideSettings::getCardPreferenceOverride(const QString &cardName)
{
return getValue(cardName, "cards").toString();
}

View File

@ -0,0 +1,25 @@
#ifndef COCKATRICE_CARD_OVERRIDE_SETTINGS_H
#define COCKATRICE_CARD_OVERRIDE_SETTINGS_H
#include "settings_manager.h"
#include <QObject>
class CardOverrideSettings : public SettingsManager
{
Q_OBJECT
friend class SettingsCache;
public:
void setCardPreferenceOverride(const QString &cardName, const QString &providerId);
void deleteCardPreferenceOverride(const QString &cardName);
QString getCardPreferenceOverride(const QString &cardName);
private:
explicit CardOverrideSettings(QString settingPath, QObject *parent = nullptr);
CardOverrideSettings(const CardOverrideSettings & /*other*/);
};
#endif // COCKATRICE_CARD_OVERRIDE_SETTINGS_H

View File

@ -32,6 +32,7 @@ set(oracle_SOURCES
../cockatrice/src/settings/game_filters_settings.cpp
../cockatrice/src/settings/layouts_settings.cpp
../cockatrice/src/settings/download_settings.cpp
../cockatrice/src/settings/card_override_settings.cpp
../cockatrice/src/client/ui/theme_manager.cpp
../cockatrice/src/client/network/release_channel.cpp
${VERSION_STRING_CPP}