From ec0caaf421ee2bafc70b5afdee395e8a3b723979 Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Sun, 19 Jan 2025 13:32:39 +0100 Subject: [PATCH] Give deckList a signal to emit when the tags change and hook up the display widget to that. (#5497) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- .../deck_preview_deck_tags_display_widget.cpp | 12 +++++++++- .../deck_preview_deck_tags_display_widget.h | 2 ++ .../deck_preview_tag_addition_widget.cpp | 1 - .../visual_deck_storage_widget.cpp | 1 + .../visual_deck_storage_widget.h | 1 + .../src/game/deckview/deck_view_container.cpp | 22 ++----------------- .../src/game/deckview/deck_view_container.h | 3 ++- common/decklist.h | 4 ++++ 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp index e849d2716..f4cab85fe 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp @@ -21,11 +21,21 @@ DeckPreviewDeckTagsDisplayWidget::DeckPreviewDeckTagsDisplayWidget(DeckPreviewWi 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()) { flowWidget->addWidget(new DeckPreviewTagDisplayWidget(this, tag)); } flowWidget->addWidget(new DeckPreviewTagAdditionWidget(this, tr("Edit tags ..."))); 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 ..."))); } \ No newline at end of file diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h index 4f62f764c..a6a1c8de4 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.h @@ -13,7 +13,9 @@ class DeckPreviewDeckTagsDisplayWidget : public QWidget public: explicit DeckPreviewDeckTagsDisplayWidget(DeckPreviewWidget *_parent, DeckLoader *_deckLoader); + void refreshTags(); DeckPreviewWidget *parent; DeckLoader *deckLoader; + FlowWidget *flowWidget; }; #endif // DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp index 77eb4357e..3572daaee 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp @@ -45,7 +45,6 @@ void DeckPreviewTagAdditionWidget::mousePressEvent(QMouseEvent *event) QStringList updatedTags = dialog.getActiveTags(); parent->deckLoader->setTags(updatedTags); parent->deckLoader->saveToFile(parent->parent->filePath, DeckLoader::CockatriceFormat); - parent->parent->parent->refreshBannerCards(); } } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp index 541b6f7ec..124b35c34 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp @@ -78,6 +78,7 @@ void VisualDeckStorageWidget::deckPreviewClickedEvent(QMouseEvent *event, DeckPr void VisualDeckStorageWidget::deckPreviewDoubleClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance) { emit deckPreviewDoubleClicked(event, instance); + emit deckLoadRequested(instance->filePath); } void VisualDeckStorageWidget::refreshBannerCards() diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h index a38be381b..f294a1790 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h @@ -35,6 +35,7 @@ signals: void bannerCardsRefreshed(); void deckPreviewClicked(QMouseEvent *event, DeckPreviewWidget *instance); void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance); + void deckLoadRequested(QString &filePath); private: QVBoxLayout *layout; diff --git a/cockatrice/src/game/deckview/deck_view_container.cpp b/cockatrice/src/game/deckview/deck_view_container.cpp index 6c36caf10..a2be59670 100644 --- a/cockatrice/src/game/deckview/deck_view_container.cpp +++ b/cockatrice/src/game/deckview/deck_view_container.cpp @@ -86,8 +86,8 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent) connect(deckView, SIGNAL(sideboardPlanChanged()), this, SLOT(sideboardPlanChanged())); visualDeckStorageWidget = new VisualDeckStorageWidget(this); - connect(visualDeckStorageWidget, &VisualDeckStorageWidget::deckPreviewDoubleClicked, this, - &DeckViewContainer::loadVisualDeck); + connect(visualDeckStorageWidget, &VisualDeckStorageWidget::deckLoadRequested, this, + &DeckViewContainer::loadDeckFromFile); deckViewLayout = new QVBoxLayout; deckViewLayout->addLayout(buttonHBox); @@ -178,24 +178,6 @@ void DeckViewContainer::refreshShortcuts() 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() { switchToDeckSelectView(); diff --git a/cockatrice/src/game/deckview/deck_view_container.h b/cockatrice/src/game/deckview/deck_view_container.h index 13edabbf0..280816b03 100644 --- a/cockatrice/src/game/deckview/deck_view_container.h +++ b/cockatrice/src/game/deckview/deck_view_container.h @@ -55,7 +55,6 @@ private: private slots: void switchToDeckSelectView(); void switchToDeckLoadedView(); - void loadVisualDeck(QMouseEvent *event, DeckPreviewWidget *instance); void loadLocalDeck(); void loadRemoteDeck(); void unloadDeck(); @@ -77,6 +76,8 @@ public: void readyAndUpdate(); void setSideboardLocked(bool locked); void setDeck(const DeckLoader &deck); + +public slots: void loadDeckFromFile(const QString &filePath); }; diff --git a/common/decklist.h b/common/decklist.h index 79dca4e6a..a48f152e8 100644 --- a/common/decklist.h +++ b/common/decklist.h @@ -272,6 +272,7 @@ protected: signals: void deckHashChanged(); + void deckTagsChanged(); public slots: void setName(const QString &_name = QString()) @@ -285,14 +286,17 @@ public slots: void setTags(const QStringList &_tags = QStringList()) { tags = _tags; + emit deckTagsChanged(); } void addTag(const QString &_tag) { tags.append(_tag); + emit deckTagsChanged(); } void clearTags() { tags.clear(); + emit deckTagsChanged(); } void setBannerCard(const QPair &_bannerCard = QPair()) {