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/cache_settings.cpp
src/settings/shortcuts_settings.cpp src/settings/shortcuts_settings.cpp
src/settings/shortcut_treeview.cpp src/settings/shortcut_treeview.cpp
src/settings/card_override_settings.cpp
src/client/sound_engine.cpp src/client/sound_engine.cpp
src/client/network/spoiler_background_updater.cpp src/client/network/spoiler_background_updater.cpp
src/game/zones/stack_zone.cpp src/game/zones/stack_zone.cpp

View file

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

View file

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

View file

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

View file

@ -1,6 +1,7 @@
#include "printing_selector_card_overlay_widget.h" #include "printing_selector_card_overlay_widget.h"
#include "../../../../game/cards/card_database_manager.h" #include "../../../../game/cards/card_database_manager.h"
#include "../../../../settings/cache_settings.h"
#include "printing_selector_card_display_widget.h" #include "printing_selector_card_display_widget.h"
#include <QMenu> #include <QMenu>
@ -165,6 +166,28 @@ void PrintingSelectorCardOverlayWidget::leaveEvent(QEvent *event)
void PrintingSelectorCardOverlayWidget::customMenu(QPoint point) void PrintingSelectorCardOverlayWidget::customMenu(QPoint point)
{ {
QMenu menu; 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 // filling out the related cards submenu
auto *relatedMenu = new QMenu(tr("Show Related cards")); auto *relatedMenu = new QMenu(tr("Show Related cards"));
menu.addMenu(relatedMenu); menu.addMenu(relatedMenu);

View file

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

View file

@ -74,7 +74,7 @@ void PrintingSelectorCardSortingWidget::updateSortSetting()
* @param cardInfoPerSets The list of card sets to be sorted. * @param cardInfoPerSets The list of card sets to be sorted.
* @return A sorted list of card sets. * @return A sorted list of card sets.
*/ */
QList<CardInfoPerSet> PrintingSelectorCardSortingWidget::sortSets(CardInfoPerSetMap cardInfoPerSets) QList<CardInfoPerSet> PrintingSelectorCardSortingWidget::sortSets(const CardInfoPerSetMap &cardInfoPerSets)
{ {
QList<CardSetPtr> sortedSets; QList<CardSetPtr> sortedSets;
@ -148,6 +148,24 @@ QList<CardInfoPerSet> PrintingSelectorCardSortingWidget::filterSets(const QList<
return filteredSets; 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. * @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 Q_OBJECT
public: public:
explicit PrintingSelectorCardSortingWidget(PrintingSelector *parent); explicit PrintingSelectorCardSortingWidget(PrintingSelector *parent);
QList<CardInfoPerSet> sortSets(CardInfoPerSetMap cardInfoPerSets); QList<CardInfoPerSet> sortSets(const CardInfoPerSetMap &cardInfoPerSets);
static QList<CardInfoPerSet> filterSets(const QList<CardInfoPerSet> &sets, const QString &searchText); QList<CardInfoPerSet> filterSets(const QList<CardInfoPerSet> &sets, const QString &searchText);
static QList<CardInfoPerSet> prependPrintingsInDeck(const QList<CardInfoPerSet> &sets, QList<CardInfoPerSet> prependPinnedPrintings(const QList<CardInfoPerSet> &sets, const QString &cardName);
const CardInfoPtr &selectedCard, QList<CardInfoPerSet> prependPrintingsInDeck(const QList<CardInfoPerSet> &sets,
DeckListModel *deckModel); const CardInfoPtr &selectedCard,
DeckListModel *deckModel);
public slots: public slots:
void updateSortOrder(); void updateSortOrder();

View file

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

View file

@ -3,6 +3,7 @@
#include "../utility/macros.h" #include "../utility/macros.h"
#include "card_database_settings.h" #include "card_database_settings.h"
#include "card_override_settings.h"
#include "download_settings.h" #include "download_settings.h"
#include "game_filters_settings.h" #include "game_filters_settings.h"
#include "layouts_settings.h" #include "layouts_settings.h"
@ -84,6 +85,7 @@ private:
LayoutsSettings *layoutsSettings; LayoutsSettings *layoutsSettings;
DownloadSettings *downloadSettings; DownloadSettings *downloadSettings;
RecentsSettings *recentsSettings; RecentsSettings *recentsSettings;
CardOverrideSettings *cardOverrideSettings;
QByteArray mainWindowGeometry; QByteArray mainWindowGeometry;
QByteArray tokenDialogGeometry; QByteArray tokenDialogGeometry;
@ -604,6 +606,10 @@ public:
{ {
return *recentsSettings; return *recentsSettings;
} }
CardOverrideSettings &cardOverrides() const
{
return *cardOverrideSettings;
}
bool getIsPortableBuild() const bool getIsPortableBuild() const
{ {
return isPortableBuild; 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/game_filters_settings.cpp
../cockatrice/src/settings/layouts_settings.cpp ../cockatrice/src/settings/layouts_settings.cpp
../cockatrice/src/settings/download_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/ui/theme_manager.cpp
../cockatrice/src/client/network/release_channel.cpp ../cockatrice/src/client/network/release_channel.cpp
${VERSION_STRING_CPP} ${VERSION_STRING_CPP}