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/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

@ -172,6 +172,19 @@ void PrintingSelector::getAllSetsForCurrentCard()
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
currentIndex = 0;
@ -182,6 +195,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,29 @@ void PrintingSelectorCardOverlayWidget::leaveEvent(QEvent *event)
void PrintingSelectorCardOverlayWidget::customMenu(QPoint point)
{
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
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

@ -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,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/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}