diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 973911627..165e1b08f 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -205,6 +205,7 @@ set(cockatrice_SOURCES src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp src/interface/widgets/visual_database_display/visual_database_display_widget.cpp src/interface/widgets/visual_database_display/visual_database_filter_display_widget.cpp + src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp index 2302ebb9d..33ee67a1f 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp @@ -4,6 +4,7 @@ #include "../../../../cards/card_info_picture_with_text_overlay_widget.h" #include "../../../../cards/card_size_widget.h" #include "../../../../cards/deck_card_zone_display_widget.h" +#include "../../../../visual_deck_editor/visual_deck_display_options_widget.h" #include "../api_response/deck/archidekt_api_response_deck.h" #include @@ -23,6 +24,12 @@ ArchidektApiResponseDeckDisplayWidget::ArchidektApiResponseDeckDisplayWidget(QWi connect(openInEditorButton, &QPushButton::clicked, this, &ArchidektApiResponseDeckDisplayWidget::actOpenInDeckEditor); + displayOptionsWidget = new VisualDeckDisplayOptionsWidget(this); + layout->addWidget(displayOptionsWidget); + + connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::groupCriteriaChanged, this, + &ArchidektApiResponseDeckDisplayWidget::onGroupCriteriaChange); + scrollArea = new QScrollArea(this); scrollArea->setWidgetResizable(true); scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -73,6 +80,12 @@ void ArchidektApiResponseDeckDisplayWidget::retranslateUi() openInEditorButton->setText(tr("Open Deck in Deck Editor")); } +void ArchidektApiResponseDeckDisplayWidget::onGroupCriteriaChange(const QString &activeGroupCriteria) +{ + model->setActiveGroupCriteria(DeckListModelGroupCriteria::fromString(activeGroupCriteria)); + model->sort(1, Qt::AscendingOrder); +} + void ArchidektApiResponseDeckDisplayWidget::actOpenInDeckEditor() { auto loader = new DeckLoader(this); @@ -122,13 +135,13 @@ void ArchidektApiResponseDeckDisplayWidget::constructZoneWidgetsFromDeckListMode new DeckCardZoneDisplayWidget(zoneContainer, model, nullptr, persistent, model->data(persistent.sibling(persistent.row(), 1), Qt::EditRole).toString(), "maintype", {"name"}, DisplayType::Overlap, 20, 10, cardSizeSlider); - /* - connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget, + + connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::sortCriteriaChanged, zoneDisplayWidget, &DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged); - connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget, + connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::groupCriteriaChanged, zoneDisplayWidget, &DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged); - connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget, - &DeckCardZoneDisplayWidget::refreshDisplayType);*/ + connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::displayTypeChanged, zoneDisplayWidget, + &DeckCardZoneDisplayWidget::refreshDisplayType); zoneContainerLayout->addWidget(zoneDisplayWidget); indexToWidgetMap.insert(persistent, zoneDisplayWidget); diff --git a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.h b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.h index 0cd1b4479..5aaa32433 100644 --- a/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.h +++ b/cockatrice/src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.h @@ -4,6 +4,7 @@ #include "../../../../../deck_loader/deck_loader.h" #include "../../../../cards/card_size_widget.h" #include "../../../../general/layout_containers/flow_widget.h" +#include "../../../../visual_deck_editor/visual_deck_display_options_widget.h" #include "../api_response/deck/archidekt_api_response_deck.h" #include "deck_list_model.h" @@ -30,13 +31,16 @@ public: void clearAllDisplayWidgets(); void decklistModelReset(); void constructZoneWidgetsFromDeckListModel(); - void resizeEvent(QResizeEvent *event) override; + +private slots: + void onGroupCriteriaChange(const QString &activeGroupCriteria); private: ArchidektApiResponseDeck response; CardSizeWidget *cardSizeSlider; QVBoxLayout *layout; QPushButton *openInEditorButton; + VisualDeckDisplayOptionsWidget *displayOptionsWidget; QScrollArea *scrollArea; QWidget *zoneContainer; QVBoxLayout *zoneContainerLayout; @@ -44,6 +48,9 @@ private: QHash indexToWidgetMap; QVBoxLayout *containerLayout; DeckListModel *model; + +protected slots: + void resizeEvent(QResizeEvent *event) override; }; #endif // COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_DISPLAY_WIDGET_H diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp new file mode 100644 index 000000000..c190038a5 --- /dev/null +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp @@ -0,0 +1,124 @@ +#include "visual_deck_display_options_widget.h" + +#include "../tabs/visual_deck_editor/tab_deck_editor_visual.h" + +VisualDeckDisplayOptionsWidget::VisualDeckDisplayOptionsWidget(QWidget *parent) +{ + groupAndSortLayout = new QHBoxLayout(this); + groupAndSortLayout->setAlignment(Qt::AlignLeft); + this->setLayout(groupAndSortLayout); + + groupByLabel = new QLabel(this); + + groupByComboBox = new QComboBox(this); + if (auto visualDeckEditorWidget = qobject_cast(parent)) { + if (auto tabWidget = qobject_cast(visualDeckEditorWidget)) { + // Inside a central widget QWidget container inside TabDeckEditorVisual + if (auto tab = qobject_cast(tabWidget->parent()->parent())) { + auto originalBox = tab->getDeckDockWidget()->getGroupByComboBox(); + groupByComboBox->setModel(originalBox->model()); + groupByComboBox->setModelColumn(originalBox->modelColumn()); + + // Original -> clone + connect(originalBox, QOverload::of(&QComboBox::currentIndexChanged), + [this](int index) { groupByComboBox->setCurrentIndex(index); }); + + // Clone -> original + connect(groupByComboBox, QOverload::of(&QComboBox::currentIndexChanged), + [originalBox](int index) { originalBox->setCurrentIndex(index); }); + } + } + } else { + groupByComboBox->addItem( + tr(qPrintable(DeckListModelGroupCriteria::toString(DeckListModelGroupCriteria::MAIN_TYPE))), + DeckListModelGroupCriteria::MAIN_TYPE); + groupByComboBox->addItem( + tr(qPrintable(DeckListModelGroupCriteria::toString(DeckListModelGroupCriteria::MANA_COST))), + DeckListModelGroupCriteria::MANA_COST); + groupByComboBox->addItem( + tr(qPrintable(DeckListModelGroupCriteria::toString(DeckListModelGroupCriteria::COLOR))), + DeckListModelGroupCriteria::COLOR); + groupByComboBox->setMinimumWidth(300); + connect(groupByComboBox, QOverload::of(&QComboBox::currentTextChanged), this, + &VisualDeckDisplayOptionsWidget::groupCriteriaChanged); + emit groupCriteriaChanged(groupByComboBox->currentText()); + } + + sortByLabel = new QLabel(this); + + sortCriteriaButton = new SettingsButtonWidget(this); + + sortLabel = new QLabel(sortCriteriaButton); + sortLabel->setWordWrap(true); + + QStringList sortProperties = {"colors", "cmc", "name", "maintype"}; + sortByListWidget = new QListWidget(); + sortByListWidget->setSelectionMode(QAbstractItemView::SingleSelection); + sortByListWidget->setDragDropMode(QAbstractItemView::InternalMove); + sortByListWidget->setDefaultDropAction(Qt::MoveAction); + + for (const QString &property : sortProperties) { + QListWidgetItem *item = new QListWidgetItem(property, sortByListWidget); + item->setFlags(item->flags() | Qt::ItemIsDragEnabled | Qt::ItemIsSelectable | Qt::ItemIsEnabled); + } + + connect(sortByListWidget->model(), &QAbstractItemModel::rowsMoved, this, + &VisualDeckDisplayOptionsWidget::onSortCriteriaChange); + onSortCriteriaChange(); + + sortByListWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + + sortCriteriaButton->addSettingsWidget(sortLabel); + sortCriteriaButton->addSettingsWidget(sortByListWidget); + + displayTypeButton = new QPushButton(this); + connect(displayTypeButton, &QPushButton::clicked, this, &VisualDeckDisplayOptionsWidget::updateDisplayType); + + groupAndSortLayout->addWidget(groupByLabel); + groupAndSortLayout->addWidget(groupByComboBox); + groupAndSortLayout->addWidget(sortByLabel); + groupAndSortLayout->addWidget(sortCriteriaButton); + groupAndSortLayout->addWidget(displayTypeButton); + + retranslateUi(); +} + +void VisualDeckDisplayOptionsWidget::retranslateUi() +{ + groupByLabel->setText(tr("Group by:")); + groupByComboBox->setToolTip(tr("Change how cards are divided into categories/groups.")); + sortByLabel->setText(tr("Sort by:")); + sortLabel->setText(tr("Click and drag to change the sort order within the groups")); + sortCriteriaButton->setToolTip(tr("Configure how cards are sorted within their groups")); + displayTypeButton->setText(tr("Toggle Layout: Overlap")); + displayTypeButton->setToolTip( + tr("Change how cards are displayed within zones (i.e. overlapped or fully visible.)")); +} + +void VisualDeckDisplayOptionsWidget::onSortCriteriaChange() +{ + QStringList selectedCriteria; + for (int i = 0; i < sortByListWidget->count(); ++i) { + QListWidgetItem *item = sortByListWidget->item(i); + selectedCriteria.append(item->text()); // Collect user-defined sort order + } + + emit sortCriteriaChanged(selectedCriteria); +} + +void VisualDeckDisplayOptionsWidget::updateDisplayType() +{ + // Toggle the display type + currentDisplayType = (currentDisplayType == DisplayType::Overlap) ? DisplayType::Flat : DisplayType::Overlap; + + // Update UI and emit signal + switch (currentDisplayType) { + case DisplayType::Flat: + displayTypeButton->setText(tr("Toggle Layout: Flat")); + break; + case DisplayType::Overlap: + displayTypeButton->setText(tr("Toggle Layout: Overlap")); + break; + } + emit displayTypeChanged(currentDisplayType); +} diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.h b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.h new file mode 100644 index 000000000..0f5ab36dc --- /dev/null +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.h @@ -0,0 +1,55 @@ +#ifndef COCKATRICE_VISUAL_DECK_DISPLAY_OPTIONS_WIDGET_H +#define COCKATRICE_VISUAL_DECK_DISPLAY_OPTIONS_WIDGET_H +#include "visual_deck_editor_widget.h" + +#include +#include + +class VisualDeckDisplayOptionsWidget : public QWidget +{ + Q_OBJECT +signals: + void displayTypeChanged(const DisplayType &displayType); + void groupCriteriaChanged(const QString &activeGroupCriteria); + void sortCriteriaChanged(const QStringList &activeSortCriteria); + +public slots: + void retranslateUi(); + +public: + explicit VisualDeckDisplayOptionsWidget(QWidget *parent); + + DisplayType getDisplayType() const + { + return currentDisplayType; + } + + QString getActiveGroupCriteria() const + { + return activeGroupCriteria; + } + + QStringList getActiveSortCriteria() const + { + return activeSortCriteria; + } + +private slots: + void onSortCriteriaChange(); + void updateDisplayType(); + +private: + QHBoxLayout *groupAndSortLayout; + DisplayType currentDisplayType = DisplayType::Overlap; + QPushButton *displayTypeButton; + QLabel *groupByLabel; + QComboBox *groupByComboBox; + QString activeGroupCriteria = "maintype"; + SettingsButtonWidget *sortCriteriaButton; + QLabel *sortByLabel; + QLabel *sortLabel; + QListWidget *sortByListWidget; + QStringList activeSortCriteria = {"name", "cmc", "colors", "maintype"}; +}; + +#endif // COCKATRICE_VISUAL_DECK_DISPLAY_OPTIONS_WIDGET_H diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp index 5acad9df1..76cfe8c8e 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp @@ -9,6 +9,7 @@ #include "../general/layout_containers/flow_widget.h" #include "../tabs/visual_deck_editor/tab_deck_editor_visual.h" #include "../tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.h" +#include "visual_deck_display_options_widget.h" #include #include @@ -109,75 +110,22 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, } }); - groupAndSortContainer = new QWidget(this); - groupAndSortLayout = new QHBoxLayout(groupAndSortContainer); - groupAndSortLayout->setAlignment(Qt::AlignLeft); - groupAndSortContainer->setLayout(groupAndSortLayout); + displayOptionsAndSearch = new QWidget(this); + displayOptionsAndSearchLayout = new QHBoxLayout(displayOptionsAndSearch); + displayOptionsAndSearchLayout->setAlignment(Qt::AlignLeft); + displayOptionsAndSearch->setLayout(displayOptionsAndSearchLayout); - groupByLabel = new QLabel(groupAndSortContainer); + displayOptionsWidget = new VisualDeckDisplayOptionsWidget(this); + connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::displayTypeChanged, this, + &VisualDeckEditorWidget::displayTypeChanged); + connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::groupCriteriaChanged, this, + &VisualDeckEditorWidget::activeGroupCriteriaChanged); + connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::sortCriteriaChanged, this, + &VisualDeckEditorWidget::activeSortCriteriaChanged); - groupByComboBox = new QComboBox(this); - if (auto tabWidget = qobject_cast(parent)) { - // Inside a central widget QWidget container inside TabDeckEditorVisual - if (auto tab = qobject_cast(tabWidget->parent()->parent())) { - auto originalBox = tab->getDeckDockWidget()->getGroupByComboBox(); - groupByComboBox->setModel(originalBox->model()); - groupByComboBox->setModelColumn(originalBox->modelColumn()); - - // Original -> clone - connect(originalBox, QOverload::of(&QComboBox::currentIndexChanged), - [this](int index) { groupByComboBox->setCurrentIndex(index); }); - - // Clone -> original - connect(groupByComboBox, QOverload::of(&QComboBox::currentIndexChanged), - [originalBox](int index) { originalBox->setCurrentIndex(index); }); - } - } else { - QStringList groupProperties = {"maintype", "colors", "cmc", "name"}; - groupByComboBox->addItems(groupProperties); - groupByComboBox->setMinimumWidth(300); - connect(groupByComboBox, QOverload::of(&QComboBox::currentTextChanged), this, - &VisualDeckEditorWidget::actChangeActiveGroupCriteria); - actChangeActiveGroupCriteria(); - } - - sortByLabel = new QLabel(groupAndSortContainer); - - sortCriteriaButton = new SettingsButtonWidget(this); - - sortLabel = new QLabel(sortCriteriaButton); - sortLabel->setWordWrap(true); - - QStringList sortProperties = {"colors", "cmc", "name", "maintype"}; - sortByListWidget = new QListWidget(); - sortByListWidget->setSelectionMode(QAbstractItemView::SingleSelection); - sortByListWidget->setDragDropMode(QAbstractItemView::InternalMove); - sortByListWidget->setDefaultDropAction(Qt::MoveAction); - - for (const QString &property : sortProperties) { - QListWidgetItem *item = new QListWidgetItem(property, sortByListWidget); - item->setFlags(item->flags() | Qt::ItemIsDragEnabled | Qt::ItemIsSelectable | Qt::ItemIsEnabled); - } - - connect(sortByListWidget->model(), &QAbstractItemModel::rowsMoved, this, - &VisualDeckEditorWidget::actChangeActiveSortCriteria); - actChangeActiveSortCriteria(); - - sortByListWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - - sortCriteriaButton->addSettingsWidget(sortLabel); - sortCriteriaButton->addSettingsWidget(sortByListWidget); - - displayTypeButton = new QPushButton(this); - connect(displayTypeButton, &QPushButton::clicked, this, &VisualDeckEditorWidget::updateDisplayType); - - groupAndSortLayout->addWidget(groupByLabel); - groupAndSortLayout->addWidget(groupByComboBox); - groupAndSortLayout->addWidget(sortByLabel); - groupAndSortLayout->addWidget(sortCriteriaButton); - groupAndSortLayout->addWidget(displayTypeButton); - groupAndSortLayout->addWidget(searchBar); - groupAndSortLayout->addWidget(searchPushButton); + displayOptionsAndSearchLayout->addWidget(displayOptionsWidget); + displayOptionsAndSearchLayout->addWidget(searchBar); + displayOptionsAndSearchLayout->addWidget(searchPushButton); scrollArea = new QScrollArea(this); scrollArea->setWidgetResizable(true); @@ -197,7 +145,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance(), &SettingsCache::setVisualDeckEditorCardSize); - mainLayout->addWidget(groupAndSortContainer); + mainLayout->addWidget(displayOptionsAndSearch); mainLayout->addWidget(scrollArea); mainLayout->addWidget(cardSizeWidget); @@ -218,17 +166,9 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, void VisualDeckEditorWidget::retranslateUi() { searchBar->setPlaceholderText(tr("Type a card name here for suggestions from the database...")); - groupByLabel->setText(tr("Group by:")); - groupByComboBox->setToolTip(tr("Change how cards are divided into categories/groups.")); - sortByLabel->setText(tr("Sort by:")); - sortLabel->setText(tr("Click and drag to change the sort order within the groups")); searchPushButton->setText(tr("Quick search and add card")); searchPushButton->setToolTip(tr("Search for closest match in the database (with auto-suggestions) and add " "preferred printing to the deck on pressing enter")); - sortCriteriaButton->setToolTip(tr("Configure how cards are sorted within their groups")); - displayTypeButton->setText(tr("Toggle Layout: Overlap")); - displayTypeButton->setToolTip( - tr("Change how cards are displayed within zones (i.e. overlapped or fully visible.)")); } void VisualDeckEditorWidget::setSelectionModel(QItemSelectionModel *model) @@ -326,8 +266,9 @@ void VisualDeckEditorWidget::constructZoneWidgetForIndex(QPersistentModelIndex p { DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget( zoneContainer, deckListModel, selectionModel, persistent, - deckListModel->data(persistent.sibling(persistent.row(), 1), Qt::EditRole).toString(), activeGroupCriteria, - activeSortCriteria, currentDisplayType, 20, 10, cardSizeWidget); + deckListModel->data(persistent.sibling(persistent.row(), 1), Qt::EditRole).toString(), + displayOptionsWidget->getActiveGroupCriteria(), displayOptionsWidget->getActiveSortCriteria(), + displayOptionsWidget->getDisplayType(), 20, 10, cardSizeWidget); connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover); connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick); connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::requestCleanup, this, @@ -338,7 +279,7 @@ void VisualDeckEditorWidget::constructZoneWidgetForIndex(QPersistentModelIndex p &DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged); connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget, &DeckCardZoneDisplayWidget::refreshDisplayType); - zoneDisplayWidget->refreshDisplayType(currentDisplayType); + zoneDisplayWidget->refreshDisplayType(displayOptionsWidget->getDisplayType()); zoneContainerLayout->addWidget(zoneDisplayWidget); indexToWidgetMap.insert(persistent, zoneDisplayWidget); @@ -370,48 +311,12 @@ void VisualDeckEditorWidget::updateZoneWidgets() { } -void VisualDeckEditorWidget::updateDisplayType() -{ - // Toggle the display type - currentDisplayType = (currentDisplayType == DisplayType::Overlap) ? DisplayType::Flat : DisplayType::Overlap; - - // Update UI and emit signal - switch (currentDisplayType) { - case DisplayType::Flat: - displayTypeButton->setText(tr("Toggle Layout: Flat")); - break; - case DisplayType::Overlap: - displayTypeButton->setText(tr("Toggle Layout: Overlap")); - break; - } - emit displayTypeChanged(currentDisplayType); -} - void VisualDeckEditorWidget::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); zoneContainer->setMaximumWidth(scrollArea->viewport()->width()); } -void VisualDeckEditorWidget::actChangeActiveGroupCriteria() -{ - activeGroupCriteria = groupByComboBox->currentText(); - emit activeGroupCriteriaChanged(activeGroupCriteria); -} - -void VisualDeckEditorWidget::actChangeActiveSortCriteria() -{ - QStringList selectedCriteria; - for (int i = 0; i < sortByListWidget->count(); ++i) { - QListWidgetItem *item = sortByListWidget->item(i); - selectedCriteria.append(item->text()); // Collect user-defined sort order - } - - activeSortCriteria = selectedCriteria; - - emit activeSortCriteriaChanged(selectedCriteria); -} - void VisualDeckEditorWidget::decklistModelReset() { clearAllDisplayWidgets(); diff --git a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.h b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.h index 524762d89..3a60d09a7 100644 --- a/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.h +++ b/cockatrice/src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.h @@ -23,6 +23,7 @@ #include #include +class VisualDeckDisplayOptionsWidget; class DeckCardZoneDisplayWidget; enum class DisplayType { @@ -55,7 +56,6 @@ public: public slots: void decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight); void updateZoneWidgets(); - void updateDisplayType(); void cleanupInvalidZones(DeckCardZoneDisplayWidget *displayWidget); void onCardAddition(const QModelIndex &parent, int first, int last); void onCardRemoval(const QModelIndex &parent, int first, int last); @@ -73,8 +73,6 @@ signals: protected slots: void onHover(const ExactCard &hoveredCard); void onCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName); - void actChangeActiveGroupCriteria(); - void actChangeActiveSortCriteria(); void decklistModelReset(); private: @@ -85,19 +83,10 @@ private: CardDatabaseDisplayModel *cardDatabaseDisplayModel; CardCompleterProxyModel *proxyModel; QCompleter *completer; + QWidget *displayOptionsAndSearch; + QHBoxLayout *displayOptionsAndSearchLayout; + VisualDeckDisplayOptionsWidget *displayOptionsWidget; QPushButton *searchPushButton; - DisplayType currentDisplayType = DisplayType::Overlap; - QPushButton *displayTypeButton; - QWidget *groupAndSortContainer; - QHBoxLayout *groupAndSortLayout; - QLabel *groupByLabel; - QComboBox *groupByComboBox; - QString activeGroupCriteria = "maintype"; - SettingsButtonWidget *sortCriteriaButton; - QLabel *sortByLabel; - QLabel *sortLabel; - QListWidget *sortByListWidget; - QStringList activeSortCriteria = {"name", "cmc", "colors", "maintype"}; QScrollArea *scrollArea; QWidget *zoneContainer; QVBoxLayout *zoneContainerLayout; diff --git a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.h b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.h index 9b96c0ce6..9e69042f2 100644 --- a/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.h +++ b/libcockatrice_models/libcockatrice/models/deck_list/deck_list_model.h @@ -74,6 +74,29 @@ enum Type MANA_COST, /**< Group cards by their total mana cost. */ COLOR /**< Group cards by their color identity. */ }; +static inline QString toString(Type t) +{ + switch (t) { + case MAIN_TYPE: + return "Main Type"; + case MANA_COST: + return "Mana Cost"; + case COLOR: + return "Colors"; + } + return {}; +} + +static inline Type fromString(const QString &s) +{ + if (s == "Main Type") + return MAIN_TYPE; + if (s == "Mana Cost") + return MANA_COST; + if (s == "Colors") + return COLOR; + return MAIN_TYPE; // default +} } // namespace DeckListModelGroupCriteria /**