Support Picking Select Art per Card Basis

This commit is contained in:
ZeldaZach 2024-12-25 14:59:33 -05:00
parent ed907d7c6f
commit 7e336c6c2c
No known key found for this signature in database
11 changed files with 100 additions and 0 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

@ -172,6 +172,19 @@ void PrintingSelector::getAllSetsForCurrentCard()
setsToUse = filteredSets; setsToUse = filteredSets;
} }
const auto &cardProviderId =
SettingsCache::instance().cardOverrides().getCardPreferenceOverride(selectedCard->getName());
if (!cardProviderId.isEmpty()) {
for (int i = 0; i < setsToUse.size(); ++i) {
const auto &card = setsToUse[i];
if (card.getProperty("uuid") == cardProviderId) {
setsToUse.prepend(card);
setsToUse.removeAt(i + 1);
break;
}
}
}
// Defer widget creation // Defer widget creation
currentIndex = 0; currentIndex = 0;
@ -182,6 +195,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,29 @@ 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);
QString preferredProviderId =
SettingsCache::instance().cardOverrides().getCardPreferenceOverride(rootCard->getName());
const auto &cardProviderId = setInfoForCard.getProperty("uuid");
if (preferredProviderId.isEmpty() || preferredProviderId != cardProviderId) {
QAction *setPreferred = preferenceMenu->addAction(tr("Set as preferred printing"));
connect(setPreferred, &QAction::triggered, this, [this, cardProviderId]() {
SettingsCache::instance().cardOverrides().setCardPreferenceOverride(rootCard->getName(), cardProviderId,
true);
emit cardPreferenceChanged();
});
} else {
QAction *setUnpreferred = preferenceMenu->addAction(tr("Unset as preferred printing"));
connect(setUnpreferred, &QAction::triggered, this, [this]() {
SettingsCache::instance().cardOverrides().setCardPreferenceOverride(rootCard->getName(), "", false);
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

@ -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,20 @@
#include "card_override_settings.h"
CardOverrideSettings::CardOverrideSettings(QString settingPath, QObject *parent)
: SettingsManager(settingPath + "cardPreferenceOverrides.ini", parent)
{
}
void CardOverrideSettings::setCardPreferenceOverride(QString cardName, QString providerId, bool enabled)
{
if (enabled) {
setValue(providerId, cardName, "cards");
} else {
deleteValue(providerId, cardName, "cards");
}
}
QString CardOverrideSettings::getCardPreferenceOverride(QString cardName)
{
return getValue(cardName, "cards").toString();
}

View file

@ -0,0 +1,23 @@
#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(QString cardName, QString providerId, bool enabled);
QString getCardPreferenceOverride(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}