Give deckList a signal to emit when the tags change and hook up the display widget to that. (#5497)

* Give deckList a signal to emit when the tags change and hook up the display widget to that.

* Reload from file when loading a visual deck to ensure latest changes propagate to the decklist.

* Eliminate loadVisualDeck and use loadDeckFromFile instead.

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2025-01-19 13:32:39 +01:00 committed by GitHub
parent 55b490ade0
commit ec0caaf421
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 23 additions and 23 deletions

View file

@ -21,11 +21,21 @@ DeckPreviewDeckTagsDisplayWidget::DeckPreviewDeckTagsDisplayWidget(DeckPreviewWi
setFixedHeight(100); setFixedHeight(100);
auto *flowWidget = new FlowWidget(this, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded); connect(deckLoader, &DeckList::deckTagsChanged, this, &DeckPreviewDeckTagsDisplayWidget::refreshTags);
flowWidget = new FlowWidget(this, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded);
for (const QString &tag : this->deckLoader->getTags()) { for (const QString &tag : this->deckLoader->getTags()) {
flowWidget->addWidget(new DeckPreviewTagDisplayWidget(this, tag)); flowWidget->addWidget(new DeckPreviewTagDisplayWidget(this, tag));
} }
flowWidget->addWidget(new DeckPreviewTagAdditionWidget(this, tr("Edit tags ..."))); flowWidget->addWidget(new DeckPreviewTagAdditionWidget(this, tr("Edit tags ...")));
layout->addWidget(flowWidget); layout->addWidget(flowWidget);
}
void DeckPreviewDeckTagsDisplayWidget::refreshTags()
{
flowWidget->clearLayout();
for (const QString &tag : this->deckLoader->getTags()) {
flowWidget->addWidget(new DeckPreviewTagDisplayWidget(this, tag));
}
flowWidget->addWidget(new DeckPreviewTagAdditionWidget(this, tr("Edit tags ...")));
} }

View file

@ -13,7 +13,9 @@ class DeckPreviewDeckTagsDisplayWidget : public QWidget
public: public:
explicit DeckPreviewDeckTagsDisplayWidget(DeckPreviewWidget *_parent, DeckLoader *_deckLoader); explicit DeckPreviewDeckTagsDisplayWidget(DeckPreviewWidget *_parent, DeckLoader *_deckLoader);
void refreshTags();
DeckPreviewWidget *parent; DeckPreviewWidget *parent;
DeckLoader *deckLoader; DeckLoader *deckLoader;
FlowWidget *flowWidget;
}; };
#endif // DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H #endif // DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H

View file

@ -45,7 +45,6 @@ void DeckPreviewTagAdditionWidget::mousePressEvent(QMouseEvent *event)
QStringList updatedTags = dialog.getActiveTags(); QStringList updatedTags = dialog.getActiveTags();
parent->deckLoader->setTags(updatedTags); parent->deckLoader->setTags(updatedTags);
parent->deckLoader->saveToFile(parent->parent->filePath, DeckLoader::CockatriceFormat); parent->deckLoader->saveToFile(parent->parent->filePath, DeckLoader::CockatriceFormat);
parent->parent->parent->refreshBannerCards();
} }
} }

View file

@ -78,6 +78,7 @@ void VisualDeckStorageWidget::deckPreviewClickedEvent(QMouseEvent *event, DeckPr
void VisualDeckStorageWidget::deckPreviewDoubleClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance) void VisualDeckStorageWidget::deckPreviewDoubleClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance)
{ {
emit deckPreviewDoubleClicked(event, instance); emit deckPreviewDoubleClicked(event, instance);
emit deckLoadRequested(instance->filePath);
} }
void VisualDeckStorageWidget::refreshBannerCards() void VisualDeckStorageWidget::refreshBannerCards()

View file

@ -35,6 +35,7 @@ signals:
void bannerCardsRefreshed(); void bannerCardsRefreshed();
void deckPreviewClicked(QMouseEvent *event, DeckPreviewWidget *instance); void deckPreviewClicked(QMouseEvent *event, DeckPreviewWidget *instance);
void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance); void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance);
void deckLoadRequested(QString &filePath);
private: private:
QVBoxLayout *layout; QVBoxLayout *layout;

View file

@ -86,8 +86,8 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent)
connect(deckView, SIGNAL(sideboardPlanChanged()), this, SLOT(sideboardPlanChanged())); connect(deckView, SIGNAL(sideboardPlanChanged()), this, SLOT(sideboardPlanChanged()));
visualDeckStorageWidget = new VisualDeckStorageWidget(this); visualDeckStorageWidget = new VisualDeckStorageWidget(this);
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::deckPreviewDoubleClicked, this, connect(visualDeckStorageWidget, &VisualDeckStorageWidget::deckLoadRequested, this,
&DeckViewContainer::loadVisualDeck); &DeckViewContainer::loadDeckFromFile);
deckViewLayout = new QVBoxLayout; deckViewLayout = new QVBoxLayout;
deckViewLayout->addLayout(buttonHBox); deckViewLayout->addLayout(buttonHBox);
@ -178,24 +178,6 @@ void DeckViewContainer::refreshShortcuts()
sideboardLockButton->setShortcut(shortcuts.getSingleShortcut("DeckViewContainer/sideboardLockButton")); sideboardLockButton->setShortcut(shortcuts.getSingleShortcut("DeckViewContainer/sideboardLockButton"));
} }
void DeckViewContainer::loadVisualDeck(QMouseEvent *event, DeckPreviewWidget *instance)
{
Q_UNUSED(event);
QString deckString = instance->deckLoader->writeToString_Native();
if (deckString.length() > MAX_FILE_LENGTH) {
QMessageBox::critical(this, tr("Error"), tr("The selected file could not be loaded."));
return;
}
Command_DeckSelect cmd;
cmd.set_deck(deckString.toStdString());
PendingCommand *pend = parentGame->prepareGameCommand(cmd);
connect(pend, SIGNAL(finished(Response, CommandContainer, QVariant)), this,
SLOT(deckSelectFinished(const Response &)));
parentGame->sendGameCommand(pend, playerId);
}
void DeckViewContainer::unloadDeck() void DeckViewContainer::unloadDeck()
{ {
switchToDeckSelectView(); switchToDeckSelectView();

View file

@ -55,7 +55,6 @@ private:
private slots: private slots:
void switchToDeckSelectView(); void switchToDeckSelectView();
void switchToDeckLoadedView(); void switchToDeckLoadedView();
void loadVisualDeck(QMouseEvent *event, DeckPreviewWidget *instance);
void loadLocalDeck(); void loadLocalDeck();
void loadRemoteDeck(); void loadRemoteDeck();
void unloadDeck(); void unloadDeck();
@ -77,6 +76,8 @@ public:
void readyAndUpdate(); void readyAndUpdate();
void setSideboardLocked(bool locked); void setSideboardLocked(bool locked);
void setDeck(const DeckLoader &deck); void setDeck(const DeckLoader &deck);
public slots:
void loadDeckFromFile(const QString &filePath); void loadDeckFromFile(const QString &filePath);
}; };

View file

@ -272,6 +272,7 @@ protected:
signals: signals:
void deckHashChanged(); void deckHashChanged();
void deckTagsChanged();
public slots: public slots:
void setName(const QString &_name = QString()) void setName(const QString &_name = QString())
@ -285,14 +286,17 @@ public slots:
void setTags(const QStringList &_tags = QStringList()) void setTags(const QStringList &_tags = QStringList())
{ {
tags = _tags; tags = _tags;
emit deckTagsChanged();
} }
void addTag(const QString &_tag) void addTag(const QString &_tag)
{ {
tags.append(_tag); tags.append(_tag);
emit deckTagsChanged();
} }
void clearTags() void clearTags()
{ {
tags.clear(); tags.clear();
emit deckTagsChanged();
} }
void setBannerCard(const QPair<QString, QString> &_bannerCard = QPair<QString, QString>()) void setBannerCard(const QPair<QString, QString> &_bannerCard = QPair<QString, QString>())
{ {