diff --git a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual.cpp b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual.cpp index c03fe7f77..fad34ba3a 100644 --- a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual.cpp +++ b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual.cpp @@ -305,7 +305,7 @@ void TabDeckEditorVisual::loadLayout() databaseDisplayDockWidget->setMinimumSize(100, 100); databaseDisplayDockWidget->setMaximumSize(1400, 5000); - QTimer::singleShot(100, this, SLOT(freeDocksSize())); + QTimer::singleShot(100, this, &TabDeckEditorVisual::freeDocksSize); } void TabDeckEditorVisual::retranslateUi() @@ -457,6 +457,7 @@ void TabDeckEditorVisual::dockTopLevelChanged(bool topLevel) if (o == deckAnalyticsDock) { aDeckAnalyticsDockFloating->setChecked(topLevel); + return; } if (o == printingSelectorDockWidget) { diff --git a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp index 089c1c2ab..3c0452008 100644 --- a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp +++ b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp @@ -5,11 +5,11 @@ TabDeckEditorVisualTabWidget::TabDeckEditorVisualTabWidget(QWidget *parent, AbstractTabDeckEditor *_deckEditor, - DeckListModel *model, - CardDatabaseModel *card_database_model, - CardDatabaseDisplayModel *card_database_display_model) - : QTabWidget(parent), deckEditor(_deckEditor), deckModel(model), cardDatabaseModel(card_database_model), - cardDatabaseDisplayModel(card_database_display_model) + DeckListModel *_deckModel, + CardDatabaseModel *_cardDatabaseModel, + CardDatabaseDisplayModel *_cardDatabaseDisplayModel) + : QTabWidget(parent), deckEditor(_deckEditor), deckModel(_deckModel), cardDatabaseModel(_cardDatabaseModel), + cardDatabaseDisplayModel(_cardDatabaseDisplayModel) { this->setTabsClosable(true); // Enable tab closing connect(this, &QTabWidget::tabCloseRequested, this, &TabDeckEditorVisualTabWidget::handleTabClose); @@ -28,7 +28,7 @@ TabDeckEditorVisualTabWidget::TabDeckEditorVisualTabWidget(QWidget *parent, &AbstractTabDeckEditor::actAddCard); visualDatabaseDisplay = - new VisualDatabaseDisplayWidget(this, deckEditor, cardDatabaseModel, cardDatabaseDisplayModel); + new VisualDatabaseDisplayWidget(this, deckEditor, _cardDatabaseModel, _cardDatabaseDisplayModel); visualDatabaseDisplay->setObjectName("visualDatabaseView"); connect(visualDatabaseDisplay, &VisualDatabaseDisplayWidget::cardHoveredDatabaseDisplay, this, &TabDeckEditorVisualTabWidget::onCardChangedDatabaseDisplay); diff --git a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h index 17233d296..bc76d55be 100644 --- a/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h +++ b/cockatrice/src/client/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h @@ -15,11 +15,11 @@ class TabDeckEditorVisualTabWidget : public QTabWidget Q_OBJECT public: - explicit TabDeckEditorVisualTabWidget(QWidget *parent = nullptr, - AbstractTabDeckEditor *deckEditor = nullptr, - DeckListModel *deckModel = nullptr, - CardDatabaseModel *card_database_model = nullptr, - CardDatabaseDisplayModel *card_database_display_model = nullptr); + explicit TabDeckEditorVisualTabWidget(QWidget *parent, + AbstractTabDeckEditor *_deckEditor, + DeckListModel *_deckModel, + CardDatabaseModel *_cardDatabaseModel, + CardDatabaseDisplayModel *_cardDatabaseDisplayModel); // Utility functions void addNewTab(QWidget *widget, const QString &title); diff --git a/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp index a60f7d1df..62eeb0134 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp @@ -88,7 +88,7 @@ void FlatCardGroupDisplayWidget::updateCardDisplays() for (CardInfoPictureWithTextOverlayWidget *widget : existingWidgets) { if (!usedWidgets.contains(widget)) { flowWidget->layout()->removeWidget(widget); - delete widget; + widget->deleteLater(); } } diff --git a/cockatrice/src/client/ui/widgets/cards/deck_card_zone_display_widget.cpp b/cockatrice/src/client/ui/widgets/cards/deck_card_zone_display_widget.cpp index b5002d919..b485d1c62 100644 --- a/cockatrice/src/client/ui/widgets/cards/deck_card_zone_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/deck_card_zone_display_widget.cpp @@ -96,28 +96,30 @@ void DeckCardZoneDisplayWidget::addCardGroupIfItDoesNotExist() } } - if (!found) { - if (displayType == "overlap") { - auto *display_widget = new OverlappedCardGroupDisplayWidget( - cardGroupContainer, deckListModel, zoneName, cardGroup, activeGroupCriteria, activeSortCriteria, - subBannerOpacity, cardSizeWidget); - connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), - this, SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); - connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr))); - connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget, - &CardGroupDisplayWidget::onActiveSortCriteriaChanged); - cardGroupLayout->addWidget(display_widget); - } else if (displayType == "flat") { - auto *display_widget = new FlatCardGroupDisplayWidget( - cardGroupContainer, deckListModel, zoneName, cardGroup, activeGroupCriteria, activeSortCriteria, - subBannerOpacity, cardSizeWidget); - connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), - this, SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); - connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr))); - connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget, - &CardGroupDisplayWidget::onActiveSortCriteriaChanged); - cardGroupLayout->addWidget(display_widget); - } + if (found) { + continue; + } + + if (displayType == "overlap") { + auto *display_widget = new OverlappedCardGroupDisplayWidget( + cardGroupContainer, deckListModel, zoneName, cardGroup, activeGroupCriteria, activeSortCriteria, + subBannerOpacity, cardSizeWidget); + connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, + SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); + connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr))); + connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget, + &CardGroupDisplayWidget::onActiveSortCriteriaChanged); + cardGroupLayout->addWidget(display_widget); + } else if (displayType == "flat") { + auto *display_widget = new FlatCardGroupDisplayWidget(cardGroupContainer, deckListModel, zoneName, + cardGroup, activeGroupCriteria, activeSortCriteria, + subBannerOpacity, cardSizeWidget); + connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this, + SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *))); + connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr))); + connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget, + &CardGroupDisplayWidget::onActiveSortCriteriaChanged); + cardGroupLayout->addWidget(display_widget); } } } @@ -133,7 +135,6 @@ void DeckCardZoneDisplayWidget::deleteCardGroupIfItDoesNotExist() if (!validGroups.contains(cardGroupDisplayWidget->cardGroupCategory)) { cardGroupLayout->removeWidget(cardGroupDisplayWidget); cardGroupDisplayWidget->deleteLater(); // Properly delete the widget after the event loop cycles - } else { } } } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp index 17f20a28f..cf9c95071 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.cpp @@ -123,11 +123,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_ groupAndSortContainer->setLayout(groupAndSortLayout); groupByComboBox = new QComboBox(); - QStringList groupProperties; - groupProperties << "maintype" - << "colors" - << "cmc" - << "name"; + QStringList groupProperties = {"maintype", "colors", "cmc", "name"}; groupByComboBox->addItems(groupProperties); groupByComboBox->setMinimumWidth(300); connect(groupByComboBox, QOverload::of(&QComboBox::currentTextChanged), this, @@ -137,6 +133,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_ sortCriteriaButton = new SettingsButtonWidget(this); sortLabel = new QLabel(sortCriteriaButton); + sortLabel->setWordWrap(true); QStringList sortProperties = {"colors", "cmc", "name", "maintype"}; sortByListWidget = new QListWidget(); @@ -151,7 +148,6 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_ connect(sortByListWidget->model(), &QAbstractItemModel::rowsMoved, this, &VisualDeckEditorWidget::actChangeActiveSortCriteria); - // connect(sortByListWidget, &QListWidget::itemChanged, this, &VisualDeckEditorWidget::actChangeActiveSortCriteria); actChangeActiveSortCriteria(); sortByListWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); @@ -193,7 +189,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_ void VisualDeckEditorWidget::retranslateUi() { - sortLabel->setText(tr("Click and drag to change\nthe sort order within the groups")); + sortLabel->setText(tr("Click and drag to change the sort order within the groups")); searchPushButton->setText(tr("Quick search and add card")); displayTypeButton->setText(tr("Flat Layout")); } @@ -206,12 +202,19 @@ void VisualDeckEditorWidget::updateZoneWidgets() void VisualDeckEditorWidget::updateDisplayType() { - if (displayTypeButton->text() == tr("Overlap Layout")) { - emit displayTypeChanged("flat"); - displayTypeButton->setText("Flat Layout"); - } else { - emit displayTypeChanged("overlap"); - displayTypeButton->setText(tr("Overlap Layout")); + // Toggle the display type + currentDisplayType = (currentDisplayType == DisplayType::Overlap) ? DisplayType::Flat : DisplayType::Overlap; + + // Update UI and emit signal + switch (currentDisplayType) { + case DisplayType::Flat: + emit displayTypeChanged("flat"); + displayTypeButton->setText(tr("Flat Layout")); + break; + case DisplayType::Overlap: + emit displayTypeChanged("overlap"); + displayTypeButton->setText(tr("Overlap Layout")); + break; } } @@ -224,23 +227,24 @@ void VisualDeckEditorWidget::addZoneIfDoesNotExist() for (DeckCardZoneDisplayWidget *displayWidget : cardZoneDisplayWidgets) { if (displayWidget->zoneName == zone) { found = true; + break; } } - if (!found) { - DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget( - zoneContainer, deckListModel, zone, activeGroupCriteria, activeSortCriteria, 20, 10, cardSizeWidget); - connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover); - connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, - &VisualDeckEditorWidget::onCardClick); - connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget, - &DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged); - connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget, - &DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged); - connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget, - &DeckCardZoneDisplayWidget::refreshDisplayType); - zoneContainerLayout->addWidget(zoneDisplayWidget); + if (found) { + continue; } + DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget( + zoneContainer, deckListModel, zone, activeGroupCriteria, activeSortCriteria, 20, 10, cardSizeWidget); + connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover); + connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick); + connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget, + &DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged); + connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget, + &DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged); + connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget, + &DeckCardZoneDisplayWidget::refreshDisplayType); + zoneContainerLayout->addWidget(zoneDisplayWidget); } } @@ -251,9 +255,9 @@ void VisualDeckEditorWidget::deleteZoneIfDoesNotExist() for (DeckCardZoneDisplayWidget *displayWidget : cardZoneDisplayWidgets) { bool found = false; for (const QString &zone : *deckListModel->getZones()) { - if (displayWidget->zoneName == zone) { found = true; + break; } } @@ -291,49 +295,13 @@ void VisualDeckEditorWidget::actChangeActiveSortCriteria() void VisualDeckEditorWidget::decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight) { // Might use these at some point. - (void)topLeft; - (void)bottomRight; + Q_UNUSED(topLeft); + Q_UNUSED(bottomRight); // Necessary to delay this in this manner else the updateDisplay will nuke widgets while their onClick event // hasn't returned yet. Interval of 0 means QT will schedule this after the current event loop has finished. updateZoneWidgets(); } -/*void VisualDeckEditorWidget::sortCards() -{ - QStringList sortCriteria; - sortCriteria.append(activeSortCriteria); - this->sortCardList(sortCriteria, Qt::SortOrder::AscendingOrder); - QString lastSortCriteriaValue = ""; - overlapCategories = new QWidget(scrollArea); - overlapCategoriesLayout = new QVBoxLayout(overlapCategories); - OverlapWidget *printings_group_widget = new OverlapWidget(80, 1, 1, Qt::Vertical, overlapCategories); - overlap_control_widget->connectOverlapWidget(printings_group_widget); - for (int i = 0; i < cards->size(); i++) { - CardInfoPtr info = cards->at(i); - if (info) { - if (info->getProperty(activeSortCriteria) != lastSortCriteriaValue) { - printings_group_widget->adjustMaxColumnsAndRows(); - lastSortCriteriaValue = info->getProperty(activeSortCriteria); - printings_group_widget = new OverlapWidget(80, 1, 1, Qt::Vertical, overlapCategories); - overlapCategoriesLayout->addWidget(printings_group_widget); - overlap_control_widget->connectOverlapWidget(printings_group_widget); - } - CardInfoPictureWithTextOverlayWidget* display = new -CardInfoPictureWithTextOverlayWidget(printings_group_widget, true); - - display->setCard(info); - printings_group_widget->addWidget(display); - update(); - } else { - qDebug() << "Card not found in database!"; - } - } - printings_group_widget->adjustMaxColumnsAndRows(); - - scrollArea->setWidget(overlapCategories); - update(); -}*/ - void VisualDeckEditorWidget::onHover(CardInfoPtr hoveredCard) { emit activeCardChanged(hoveredCard); diff --git a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.h index 0a5d2db6f..3b644ff1e 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_editor/visual_deck_editor_widget.h @@ -17,6 +17,12 @@ #include #include +enum class DisplayType +{ + Flat, + Overlap +}; + class VisualDeckEditorWidget : public QWidget { Q_OBJECT @@ -62,6 +68,7 @@ private: CardCompleterProxyModel *proxyModel; QCompleter *completer; QPushButton *searchPushButton; + DisplayType currentDisplayType = DisplayType::Overlap; QPushButton *displayTypeButton; QWidget *groupAndSortContainer; QHBoxLayout *groupAndSortLayout; diff --git a/cockatrice/src/game/cards/card_search_model.cpp b/cockatrice/src/game/cards/card_search_model.cpp index 8c256b3ee..56b5ea530 100644 --- a/cockatrice/src/game/cards/card_search_model.cpp +++ b/cockatrice/src/game/cards/card_search_model.cpp @@ -66,8 +66,6 @@ void CardSearchModel::updateSearchResults(const QString &query) emit dataChanged(index(0, 0), index(rowCount() - 1, 0)); emit layoutChanged(); - for (SearchResult &result : searchResults) { - qDebug() << result.card->getName(); - } + endResetModel(); }