diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp index 21ec205fd..b97032126 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp @@ -125,7 +125,7 @@ void VisualDatabaseDisplayFilterSaveLoadWidget::refreshFilterList() // Refresh the filter file list QDir dir(SettingsCache::instance().getFiltersPath()); - QStringList filterFiles = dir.entryList(QStringList() << "*.json", QDir::Files, QDir::Time); + QStringList filterFiles = dir.entryList(QStringList() << "*.json", QDir::Files, QDir::Name); // Loop through the filter files and create widgets for them for (const QString &filename : filterFiles) { diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp index e0ededd50..b74d49ab7 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp @@ -1,5 +1,6 @@ #include "visual_database_display_name_filter_widget.h" +#include "../../../../dialogs/dlg_load_deck_from_clipboard.h" #include "../../../tabs/abstract_tab_deck_editor.h" #include @@ -35,6 +36,13 @@ VisualDatabaseDisplayNameFilterWidget::VisualDatabaseDisplayNameFilterWidget(QWi layout->addWidget(loadFromDeckButton); connect(loadFromDeckButton, &QPushButton::clicked, this, &VisualDatabaseDisplayNameFilterWidget::actLoadFromDeck); + + loadFromClipboardButton = new QPushButton(this); + layout->addWidget(loadFromClipboardButton); + + connect(loadFromClipboardButton, &QPushButton::clicked, this, + &VisualDatabaseDisplayNameFilterWidget::actLoadFromClipboard); + connect(filterModel, &FilterTreeModel::layoutChanged, this, [this]() { QTimer::singleShot(100, this, &VisualDatabaseDisplayNameFilterWidget::syncWithFilterModel); }); @@ -46,6 +54,8 @@ void VisualDatabaseDisplayNameFilterWidget::retranslateUi() searchBox->setPlaceholderText(tr("Filter by name...")); loadFromDeckButton->setText(tr("Load from Deck")); loadFromDeckButton->setToolTip(tr("Apply all card names in currently loaded deck as exact match name filters")); + loadFromClipboardButton->setText(tr("Load from Clipboard")); + loadFromClipboardButton->setToolTip(tr("Apply all card names in clipboard as exact match name filters")); } void VisualDatabaseDisplayNameFilterWidget::actLoadFromDeck() @@ -75,6 +85,20 @@ void VisualDatabaseDisplayNameFilterWidget::actLoadFromDeck() updateFilterModel(); } +void VisualDatabaseDisplayNameFilterWidget::actLoadFromClipboard() +{ + DlgLoadDeckFromClipboard dlg(this); + if (!dlg.exec()) + return; + + QStringList cardsInClipboard = dlg.getDeckList()->getCardList(); + for (QString cardName : cardsInClipboard) { + createNameFilter(cardName); + } + + updateFilterModel(); +} + void VisualDatabaseDisplayNameFilterWidget::createNameFilter(const QString &name) { if (activeFilters.contains(name)) @@ -85,7 +109,11 @@ void VisualDatabaseDisplayNameFilterWidget::createNameFilter(const QString &name button->setStyleSheet("QPushButton { background-color: lightgray; border: 1px solid gray; padding: 5px; }" "QPushButton:hover { background-color: red; color: white; }"); - connect(button, &QPushButton::clicked, this, [this, name]() { removeNameFilter(name); }); + connect(button, &QPushButton::clicked, this, [this, name]() { + removeNameFilter(name); + QTimer::singleShot(0, this, + &VisualDatabaseDisplayNameFilterWidget::updateFilterModel); // Avoid concurrent modification + }); flowWidget->addWidget(button); activeFilters[name] = button; @@ -96,9 +124,6 @@ void VisualDatabaseDisplayNameFilterWidget::removeNameFilter(const QString &name if (activeFilters.contains(name)) { activeFilters[name]->deleteLater(); // Safe deletion activeFilters.remove(name); - - QTimer::singleShot(0, this, - &VisualDatabaseDisplayNameFilterWidget::updateFilterModel); // Avoid concurrent modification } } diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.h b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.h index 91ad56160..b0989c5d7 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_name_filter_widget.h @@ -35,11 +35,13 @@ private: QLineEdit *searchBox; FlowWidget *flowWidget; QPushButton *loadFromDeckButton; + QPushButton *loadFromClipboardButton; QMap activeFilters; // Store active name filter buttons private slots: void actLoadFromDeck(); + void actLoadFromClipboard(); }; #endif // VISUAL_DATABASE_DISPLAY_NAME_FILTER_WIDGET_H diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp index f394f508f..ae0b0e34b 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_widget.cpp @@ -95,7 +95,15 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent, clearFilterWidget = new QToolButton(); clearFilterWidget->setFixedSize(32, 32); clearFilterWidget->setIcon(QPixmap("theme:icons/delete")); - connect(clearFilterWidget, &QToolButton::clicked, this, [this] { filterModel->clear(); }); + connect(clearFilterWidget, &QToolButton::clicked, this, [this] { + filterModel->blockSignals(true); + filterModel->filterTree()->blockSignals(true); + filterModel->clear(); + filterModel->blockSignals(false); + filterModel->filterTree()->blockSignals(false); + emit filterModel->filterTree()->changed(); + emit filterModel->layoutChanged(); + }); quickFilterSaveLoadWidget = new SettingsButtonWidget(this); quickFilterSaveLoadWidget->setButtonIcon(QPixmap("theme:icons/lock"));