Attempt to allow users to temporarily modify preferences (until next card DB update).

This commit is contained in:
Lukas Brübach 2024-12-24 09:04:57 +01:00
parent 6e6824117d
commit fafb80ea06
11 changed files with 51 additions and 24 deletions

View file

@ -24,7 +24,7 @@ AllZonesCardAmountWidget::AllZonesCardAmountWidget(QWidget *parent,
QTreeView *deckView, QTreeView *deckView,
QSlider *cardSizeSlider, QSlider *cardSizeSlider,
CardInfoPtr rootCard, CardInfoPtr rootCard,
CardInfoPerSet setInfoForCard) CardInfoPerSet *setInfoForCard)
: QWidget(parent), deckEditor(deckEditor), deckModel(deckModel), deckView(deckView), cardSizeSlider(cardSizeSlider), : QWidget(parent), deckEditor(deckEditor), deckModel(deckModel), deckView(deckView), cardSizeSlider(cardSizeSlider),
rootCard(rootCard), setInfoForCard(setInfoForCard) rootCard(rootCard), setInfoForCard(setInfoForCard)
{ {

View file

@ -18,7 +18,7 @@ public:
QTreeView *deckView, QTreeView *deckView,
QSlider *cardSizeSlider, QSlider *cardSizeSlider,
CardInfoPtr rootCard, CardInfoPtr rootCard,
CardInfoPerSet setInfoForCard); CardInfoPerSet *setInfoForCard);
int getMainboardAmount(); int getMainboardAmount();
int getSideboardAmount(); int getSideboardAmount();
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
@ -37,7 +37,7 @@ private:
QTreeView *deckView; QTreeView *deckView;
QSlider *cardSizeSlider; QSlider *cardSizeSlider;
CardInfoPtr rootCard; CardInfoPtr rootCard;
CardInfoPerSet setInfoForCard; CardInfoPerSet *setInfoForCard;
QLabel *zoneLabelMainboard; QLabel *zoneLabelMainboard;
CardAmountWidget *buttonBoxMainboard; CardAmountWidget *buttonBoxMainboard;
QLabel *zoneLabelSideboard; QLabel *zoneLabelSideboard;

View file

@ -20,7 +20,7 @@ CardAmountWidget::CardAmountWidget(QWidget *parent,
QTreeView *deckView, QTreeView *deckView,
QSlider *cardSizeSlider, QSlider *cardSizeSlider,
CardInfoPtr &rootCard, CardInfoPtr &rootCard,
CardInfoPerSet &setInfoForCard, CardInfoPerSet *setInfoForCard,
const QString &zoneName) const QString &zoneName)
: QWidget(parent), deckEditor(deckEditor), deckModel(deckModel), deckView(deckView), cardSizeSlider(cardSizeSlider), : QWidget(parent), deckEditor(deckEditor), deckModel(deckModel), deckView(deckView), cardSizeSlider(cardSizeSlider),
rootCard(rootCard), setInfoForCard(setInfoForCard), zoneName(zoneName), hovered(false) rootCard(rootCard), setInfoForCard(setInfoForCard), zoneName(zoneName), hovered(false)
@ -141,18 +141,18 @@ void CardAmountWidget::updateCardCount()
*/ */
void CardAmountWidget::addPrinting(const QString &zone) void CardAmountWidget::addPrinting(const QString &zone)
{ {
auto newCardIndex = deckModel->addCard(rootCard->getName(), setInfoForCard, zone); auto newCardIndex = deckModel->addCard(rootCard->getName(), *setInfoForCard, zone);
recursiveExpand(newCardIndex); recursiveExpand(newCardIndex);
QModelIndex find_card = deckModel->findCard(rootCard->getName(), zone); QModelIndex find_card = deckModel->findCard(rootCard->getName(), zone);
if (find_card.isValid() && find_card != newCardIndex) { if (find_card.isValid() && find_card != newCardIndex) {
auto amount = deckModel->data(find_card, Qt::DisplayRole); auto amount = deckModel->data(find_card, Qt::DisplayRole);
for (int i = 0; i < amount.toInt() - 1; i++) { for (int i = 0; i < amount.toInt() - 1; i++) {
deckModel->addCard(rootCard->getName(), setInfoForCard, zone); deckModel->addCard(rootCard->getName(), *setInfoForCard, zone);
} }
deckModel->removeRow(find_card.row(), find_card.parent()); deckModel->removeRow(find_card.row(), find_card.parent());
} }
newCardIndex = deckModel->findCard(rootCard->getName(), zone, setInfoForCard.getProperty("uuid"), newCardIndex = deckModel->findCard(rootCard->getName(), zone, setInfoForCard->getProperty("uuid"),
setInfoForCard.getProperty("num")); setInfoForCard->getProperty("num"));
deckView->setCurrentIndex(newCardIndex); deckView->setCurrentIndex(newCardIndex);
deckView->setFocus(Qt::FocusReason::MouseFocusReason); deckView->setFocus(Qt::FocusReason::MouseFocusReason);
} }
@ -233,8 +233,8 @@ void CardAmountWidget::offsetCountAtIndex(const QModelIndex &idx, int offset)
*/ */
void CardAmountWidget::decrementCardHelper(const QString &zone) void CardAmountWidget::decrementCardHelper(const QString &zone)
{ {
QModelIndex idx = deckModel->findCard(rootCard->getName(), zone, setInfoForCard.getProperty("uuid"), QModelIndex idx = deckModel->findCard(rootCard->getName(), zone, setInfoForCard->getProperty("uuid"),
setInfoForCard.getProperty("num")); setInfoForCard->getProperty("num"));
offsetCountAtIndex(idx, -1); offsetCountAtIndex(idx, -1);
} }
@ -246,7 +246,7 @@ void CardAmountWidget::decrementCardHelper(const QString &zone)
*/ */
int CardAmountWidget::countCardsInZone(const QString &deckZone) int CardAmountWidget::countCardsInZone(const QString &deckZone)
{ {
if (setInfoForCard.getProperty("uuid").isEmpty()) { if (setInfoForCard->getProperty("uuid").isEmpty()) {
return 0; // Cards without uuids/providerIds CANNOT match another card, they are undefined for us. return 0; // Cards without uuids/providerIds CANNOT match another card, they are undefined for us.
} }
@ -283,7 +283,7 @@ int CardAmountWidget::countCardsInZone(const QString &deckZone)
} }
for (int k = 0; k < currentCard->getNumber(); ++k) { for (int k = 0; k < currentCard->getNumber(); ++k) {
if (currentCard->getCardProviderId() == setInfoForCard.getProperty("uuid")) { if (currentCard->getCardProviderId() == setInfoForCard->getProperty("uuid")) {
count++; count++;
} }
} }

View file

@ -25,7 +25,7 @@ public:
QTreeView *deckView, QTreeView *deckView,
QSlider *cardSizeSlider, QSlider *cardSizeSlider,
CardInfoPtr &rootCard, CardInfoPtr &rootCard,
CardInfoPerSet &setInfoForCard, CardInfoPerSet *setInfoForCard,
const QString &zoneName); const QString &zoneName);
int countCardsInZone(const QString &deckZone); int countCardsInZone(const QString &deckZone);
@ -43,7 +43,7 @@ private:
QTreeView *deckView; QTreeView *deckView;
QSlider *cardSizeSlider; QSlider *cardSizeSlider;
CardInfoPtr rootCard; CardInfoPtr rootCard;
CardInfoPerSet setInfoForCard; CardInfoPerSet *setInfoForCard;
QString zoneName; QString zoneName;
QHBoxLayout *layout; QHBoxLayout *layout;
DynamicFontSizePushButton *incrementButton; DynamicFontSizePushButton *incrementButton;

View file

@ -179,7 +179,7 @@ void PrintingSelector::getAllSetsForCurrentCard()
for (int i = 0; i < BATCH_SIZE && currentIndex < setsToUse.size(); ++i, ++currentIndex) { for (int i = 0; i < BATCH_SIZE && currentIndex < setsToUse.size(); ++i, ++currentIndex) {
auto *cardDisplayWidget = new PrintingSelectorCardDisplayWidget(this, deckEditor, deckModel, deckView, auto *cardDisplayWidget = new PrintingSelectorCardDisplayWidget(this, deckEditor, deckModel, deckView,
cardSizeWidget->getSlider(), selectedCard, cardSizeWidget->getSlider(), selectedCard,
setsToUse[currentIndex], currentZone); &setsToUse[currentIndex], currentZone);
flowWidget->addWidget(cardDisplayWidget); flowWidget->addWidget(cardDisplayWidget);
cardDisplayWidget->clampSetNameToPicture(); cardDisplayWidget->clampSetNameToPicture();
} }

View file

@ -33,7 +33,7 @@ PrintingSelectorCardDisplayWidget::PrintingSelectorCardDisplayWidget(QWidget *pa
QTreeView *_deckView, QTreeView *_deckView,
QSlider *_cardSizeSlider, QSlider *_cardSizeSlider,
CardInfoPtr _rootCard, CardInfoPtr _rootCard,
const CardInfoPerSet &_setInfoForCard, CardInfoPerSet *_setInfoForCard,
QString &_currentZone) QString &_currentZone)
: QWidget(parent), deckEditor(_deckEditor), deckModel(_deckModel), deckView(_deckView), : QWidget(parent), deckEditor(_deckEditor), deckModel(_deckModel), deckView(_deckView),
cardSizeSlider(_cardSizeSlider), rootCard(std::move(_rootCard)), setInfoForCard(_setInfoForCard), cardSizeSlider(_cardSizeSlider), rootCard(std::move(_rootCard)), setInfoForCard(_setInfoForCard),
@ -49,9 +49,9 @@ PrintingSelectorCardDisplayWidget::PrintingSelectorCardDisplayWidget(QWidget *pa
// 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 =
QString(setInfoForCard.getPtr()->getLongName() + " (" + setInfoForCard.getPtr()->getShortName() + ")"); QString(setInfoForCard->getPtr()->getLongName() + " (" + setInfoForCard->getPtr()->getShortName() + ")");
setNameAndCollectorsNumberDisplayWidget = new SetNameAndCollectorsNumberDisplayWidget( setNameAndCollectorsNumberDisplayWidget = new SetNameAndCollectorsNumberDisplayWidget(
this, combinedSetName, setInfoForCard.getProperty("num"), cardSizeSlider); this, combinedSetName, setInfoForCard->getProperty("num"), cardSizeSlider);
// Add the widgets to the layout // Add the widgets to the layout
layout->addWidget(overlayWidget, 0, Qt::AlignHCenter); layout->addWidget(overlayWidget, 0, Qt::AlignHCenter);

View file

@ -29,7 +29,7 @@ public:
QTreeView *_deckView, QTreeView *_deckView,
QSlider *_cardSizeSlider, QSlider *_cardSizeSlider,
CardInfoPtr _rootCard, CardInfoPtr _rootCard,
const CardInfoPerSet &_setInfoForCard, CardInfoPerSet *_setInfoForCard,
QString &_currentZone); QString &_currentZone);
public slots: public slots:
@ -44,7 +44,7 @@ private:
QSlider *cardSizeSlider; QSlider *cardSizeSlider;
CardInfoPtr rootCard; CardInfoPtr rootCard;
CardInfoPtr setCard; CardInfoPtr setCard;
CardInfoPerSet setInfoForCard; CardInfoPerSet *setInfoForCard;
QString currentZone; QString currentZone;
PrintingSelectorCardOverlayWidget *overlayWidget; PrintingSelectorCardOverlayWidget *overlayWidget;
}; };

View file

@ -29,7 +29,7 @@ PrintingSelectorCardOverlayWidget::PrintingSelectorCardOverlayWidget(QWidget *pa
QTreeView *_deckView, QTreeView *_deckView,
QSlider *_cardSizeSlider, QSlider *_cardSizeSlider,
CardInfoPtr _rootCard, CardInfoPtr _rootCard,
const CardInfoPerSet &_setInfoForCard) CardInfoPerSet *_setInfoForCard)
: QWidget(parent), deckEditor(_deckEditor), deckModel(_deckModel), deckView(_deckView), : QWidget(parent), deckEditor(_deckEditor), deckModel(_deckModel), deckView(_deckView),
cardSizeSlider(_cardSizeSlider), rootCard(std::move(_rootCard)), setInfoForCard(_setInfoForCard) cardSizeSlider(_cardSizeSlider), rootCard(std::move(_rootCard)), setInfoForCard(_setInfoForCard)
{ {
@ -44,7 +44,7 @@ PrintingSelectorCardOverlayWidget::PrintingSelectorCardOverlayWidget(QWidget *pa
cardInfoPicture->setMinimumSize(0, 0); cardInfoPicture->setMinimumSize(0, 0);
cardInfoPicture->setScaleFactor(cardSizeSlider->value()); cardInfoPicture->setScaleFactor(cardSizeSlider->value());
setCard = CardDatabaseManager::getInstance()->getCardByNameAndProviderId(rootCard->getName(), setCard = CardDatabaseManager::getInstance()->getCardByNameAndProviderId(rootCard->getName(),
setInfoForCard.getProperty("uuid")); setInfoForCard->getProperty("uuid"));
cardInfoPicture->setCard(setCard); cardInfoPicture->setCard(setCard);
mainLayout->addWidget(cardInfoPicture); mainLayout->addWidget(cardInfoPicture);
@ -165,6 +165,24 @@ 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);
bool isPreferred = setInfoForCard->getProperty("preferred").toInt();
if (isPreferred) {
QAction *setUnpreferred = preferenceMenu->addAction("Set as not preferred");
connect(setUnpreferred, &QAction::triggered, deckEditor, [this]() {
this->setInfoForCard->setProperty("preferred", nullptr);
CardDatabaseManager::getInstance()->saveCardsToFile();
});
} else {
QAction *setPreferred = preferenceMenu->addAction("Set as preferred");
connect(setPreferred, &QAction::triggered, deckEditor, [this]() {
this->setInfoForCard->setProperty("preferred", "1");
CardDatabaseManager::getInstance()->saveCardsToFile();
});
}
// 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

@ -21,7 +21,7 @@ public:
QTreeView *_deckView, QTreeView *_deckView,
QSlider *_cardSizeSlider, QSlider *_cardSizeSlider,
CardInfoPtr _rootCard, CardInfoPtr _rootCard,
const CardInfoPerSet &_setInfoForCard); CardInfoPerSet *_setInfoForCard);
protected: protected:
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;
@ -43,7 +43,7 @@ private:
QSlider *cardSizeSlider; QSlider *cardSizeSlider;
CardInfoPtr rootCard; CardInfoPtr rootCard;
CardInfoPtr setCard; CardInfoPtr setCard;
CardInfoPerSet setInfoForCard; CardInfoPerSet *setInfoForCard;
}; };
#endif // PRINTING_SELECTOR_CARD_OVERLAY_WIDGET_H #endif // PRINTING_SELECTOR_CARD_OVERLAY_WIDGET_H

View file

@ -814,6 +814,14 @@ void CardDatabase::notifyEnabledSetsChanged()
emit cardDatabaseEnabledSetsChanged(); emit cardDatabaseEnabledSetsChanged();
} }
bool CardDatabase::saveCardsToFile()
{
QString fileName = SettingsCache::instance().getCustomCardDatabasePath() + "/cards.xml";
availableParsers.first()->saveToFile(sets, cards, fileName);
return true;
}
bool CardDatabase::saveCustomTokensToFile() bool CardDatabase::saveCustomTokensToFile()
{ {
QString fileName = QString fileName =

View file

@ -491,6 +491,7 @@ public:
void enableAllUnknownSets(); void enableAllUnknownSets();
void markAllSetsAsKnown(); void markAllSetsAsKnown();
void notifyEnabledSetsChanged(); void notifyEnabledSetsChanged();
bool saveCardsToFile();
public slots: public slots:
LoadStatus loadCardDatabases(); LoadStatus loadCardDatabases();