diff --git a/cockatrice/src/interface/widgets/server/game_selector.cpp b/cockatrice/src/interface/widgets/server/game_selector.cpp index 0ff2a5542..f14cc6d82 100644 --- a/cockatrice/src/interface/widgets/server/game_selector.cpp +++ b/cockatrice/src/interface/widgets/server/game_selector.cpp @@ -91,7 +91,6 @@ GameSelector::GameSelector(AbstractClient *_client, bool filtersSetToDefault = showFilters && gameListProxyModel->areFilterParametersSetToDefaults(); clearFilterButton->setEnabled(!filtersSetToDefault); connect(clearFilterButton, &QPushButton::clicked, this, &GameSelector::actClearFilter); - connect(gameListProxyModel, &GamesProxyModel::filtersChanged, this, &GameSelector::checkClearFilterButtonState); if (room) { createButton = new QPushButton; @@ -189,16 +188,15 @@ void GameSelector::actSetFilter() dlg.getShowOnlyIfSpectatorsCanChat(), dlg.getShowOnlyIfSpectatorsCanSeeHands()); gameListProxyModel->saveFilterParameters(gameTypeMap); - updateTitle(); -} - -void GameSelector::checkClearFilterButtonState() -{ clearFilterButton->setEnabled(!gameListProxyModel->areFilterParametersSetToDefaults()); + + updateTitle(); } void GameSelector::actClearFilter() { + clearFilterButton->setEnabled(false); + gameListProxyModel->resetFilterParameters(); gameListProxyModel->saveFilterParameters(gameTypeMap); diff --git a/cockatrice/src/interface/widgets/server/game_selector.h b/cockatrice/src/interface/widgets/server/game_selector.h index fa91e5f96..ea0a4feb0 100644 --- a/cockatrice/src/interface/widgets/server/game_selector.h +++ b/cockatrice/src/interface/widgets/server/game_selector.h @@ -40,7 +40,6 @@ private slots: * Updates the proxy model with selected filter parameters and refreshes the displayed game list. */ void actSetFilter(); - void checkClearFilterButtonState(); /** * @brief Clears all filters applied to the game list. diff --git a/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp b/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp index f7eacd636..daab4d6eb 100644 --- a/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp +++ b/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp @@ -19,46 +19,32 @@ GameSelectorQuickFilterToolBar::GameSelectorQuickFilterToolBar(QWidget *parent, mainLayout->setSpacing(5); searchBar = new QLineEdit(this); - searchBar->setText(model->getGameNameFilter()); - connect(searchBar, &QLineEdit::textChanged, this, [this](const QString &text) { - applyFilters([&](auto &, auto &, auto &, auto &, auto &, auto &, auto &, QString &gameNameFilter, auto &, - auto &, auto &, auto &, auto &, auto &, auto &, auto &, auto &) { gameNameFilter = text; }); - }); + searchBar->setText(model->getCreatorNameFilters().join(", ")); + connect(searchBar, &QLineEdit::textChanged, this, [this](const QString &text) { model->setGameNameFilter(text); }); hideGamesNotCreatedByBuddiesCheckBox = new QCheckBox(this); - hideGamesNotCreatedByBuddiesCheckBox->setChecked(model->getHideNotBuddyCreatedGames()); + hideGamesNotCreatedByBuddiesCheckBox->setChecked(model->getHideBuddiesOnlyGames()); connect(hideGamesNotCreatedByBuddiesCheckBox, &QCheckBox::toggled, this, [this](bool checked) { - applyFilters([&](auto &, auto &, auto &, auto &, auto &, bool &hideNotBuddyCreatedGames, auto &, auto &, - QStringList &creatorNameFilters, auto &, auto &, auto &, auto &, auto &, auto &, auto &, - auto &) { - hideNotBuddyCreatedGames = checked; - - if (checked) { - QStringList buddyNames; - for (auto buddy : tabSupervisor->getUserListManager()->getBuddyList().values()) { - buddyNames << QString::fromStdString(buddy.name()); - } - creatorNameFilters = buddyNames; - } else { - creatorNameFilters.clear(); + if (checked) { + QStringList buddyNames; + for (auto buddy : tabSupervisor->getUserListManager()->getBuddyList().values()) { + buddyNames << QString::fromStdString(buddy.name()); } - }); + model->setCreatorNameFilters(buddyNames); + } else { + model->setCreatorNameFilters({}); + } }); hideFullGamesCheckBox = new QCheckBox(this); hideFullGamesCheckBox->setChecked(model->getHideFullGames()); - connect(hideFullGamesCheckBox, &QCheckBox::toggled, this, [this](bool checked) { - applyFilters([&](auto &, auto &, bool &hideFullGames, auto &, auto &, auto &, auto &, auto &, auto &, auto &, - auto &, auto &, auto &, auto &, auto &, auto &, auto &) { hideFullGames = checked; }); - }); + connect(hideFullGamesCheckBox, &QCheckBox::toggled, this, + [this](bool checked) { model->setHideFullGames(checked); }); hideStartedGamesCheckBox = new QCheckBox(this); hideStartedGamesCheckBox->setChecked(model->getHideGamesThatStarted()); - connect(hideStartedGamesCheckBox, &QCheckBox::toggled, this, [this](bool checked) { - applyFilters([&](auto &, auto &, auto &, bool &hideGamesThatStarted, auto &, auto &, auto &, auto &, auto &, - auto &, auto &, auto &, auto &, auto &, auto &, auto &, - auto &) { hideGamesThatStarted = checked; }); - }); + connect(hideStartedGamesCheckBox, &QCheckBox::toggled, this, + [this](bool checked) { model->setHideGamesThatStarted(checked); }); filterToFormatComboBox = new QComboBox(this); @@ -83,15 +69,13 @@ GameSelectorQuickFilterToolBar::GameSelectorQuickFilterToolBar(QWidget *parent, // Update proxy model on selection change connect(filterToFormatComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, [this](int index) { - applyFilters([&](auto &, auto &, auto &, auto &, auto &, auto &, auto &, auto &, auto &, - QSet &gameTypeFilter, auto &, auto &, auto &, auto &, auto &, auto &, auto &) { - QVariant data = filterToFormatComboBox->itemData(index); - if (!data.isValid()) { - gameTypeFilter.clear(); - } else { - gameTypeFilter = {data.toInt()}; - } - }); + QVariant data = filterToFormatComboBox->itemData(index); + if (!data.isValid()) { + model->setGameTypeFilter({}); // empty = no filter + } else { + int typeId = data.toInt(); + model->setGameTypeFilter({typeId}); + } }); hideGamesNotCreatedByBuddiesCheckBox->setMinimumSize(20, 20); @@ -112,87 +96,9 @@ GameSelectorQuickFilterToolBar::GameSelectorQuickFilterToolBar(QWidget *parent, setLayout(mainLayout); - syncFromModel(); - - connect(model, &GamesProxyModel::filtersChanged, this, &GameSelectorQuickFilterToolBar::syncFromModel); - retranslateUi(); } -void GameSelectorQuickFilterToolBar::syncFromModel() -{ - QSignalBlocker b1(searchBar); - QSignalBlocker b2(filterToFormatComboBox); - QSignalBlocker b3(hideGamesNotCreatedByBuddiesCheckBox); - QSignalBlocker b4(hideFullGamesCheckBox); - QSignalBlocker b5(hideStartedGamesCheckBox); - - searchBar->setText(model->getGameNameFilter()); - - hideGamesNotCreatedByBuddiesCheckBox->setChecked(model->getHideNotBuddyCreatedGames()); - hideFullGamesCheckBox->setChecked(model->getHideFullGames()); - hideStartedGamesCheckBox->setChecked(model->getHideGamesThatStarted()); - - QSet types = model->getGameTypeFilter(); - if (types.size() == 1) { - int idx = filterToFormatComboBox->findData(*types.begin()); - filterToFormatComboBox->setCurrentIndex(idx >= 0 ? idx : 0); - } else { - filterToFormatComboBox->setCurrentIndex(0); - } -} - -void GameSelectorQuickFilterToolBar::applyFilters(std::function &, - int &, - int &, - QTime &, - bool &, - bool &, - bool &, - bool &)> mutator) -{ - bool hideBuddiesOnlyGames = model->getHideBuddiesOnlyGames(); - bool hideIgnoredUserGames = model->getHideIgnoredUserGames(); - bool hideFullGames = model->getHideFullGames(); - bool hideGamesThatStarted = model->getHideGamesThatStarted(); - bool hidePasswordProtectedGames = model->getHidePasswordProtectedGames(); - bool hideNotBuddyCreatedGames = model->getHideNotBuddyCreatedGames(); - bool hideOpenDecklistGames = model->getHideOpenDecklistGames(); - - QString gameNameFilter = model->getGameNameFilter(); - QStringList creatorNameFilters = model->getCreatorNameFilters(); - QSet gameTypeFilter = model->getGameTypeFilter(); - - int minPlayers = model->getMaxPlayersFilterMin(); - int maxPlayers = model->getMaxPlayersFilterMax(); - QTime maxGameAge = model->getMaxGameAge(); - - bool showOnlyIfSpectatorsCanWatch = model->getShowOnlyIfSpectatorsCanWatch(); - bool showSpectatorPasswordProtected = model->getShowSpectatorPasswordProtected(); - bool showOnlyIfSpectatorsCanChat = model->getShowOnlyIfSpectatorsCanChat(); - bool showOnlyIfSpectatorsCanSeeHands = model->getShowOnlyIfSpectatorsCanSeeHands(); - - mutator(hideBuddiesOnlyGames, hideIgnoredUserGames, hideFullGames, hideGamesThatStarted, hidePasswordProtectedGames, - hideNotBuddyCreatedGames, hideOpenDecklistGames, gameNameFilter, creatorNameFilters, gameTypeFilter, - minPlayers, maxPlayers, maxGameAge, showOnlyIfSpectatorsCanWatch, showSpectatorPasswordProtected, - showOnlyIfSpectatorsCanChat, showOnlyIfSpectatorsCanSeeHands); - - model->setGameFilters(hideBuddiesOnlyGames, hideIgnoredUserGames, hideFullGames, hideGamesThatStarted, - hidePasswordProtectedGames, hideNotBuddyCreatedGames, hideOpenDecklistGames, gameNameFilter, - creatorNameFilters, gameTypeFilter, minPlayers, maxPlayers, maxGameAge, - showOnlyIfSpectatorsCanWatch, showSpectatorPasswordProtected, showOnlyIfSpectatorsCanChat, - showOnlyIfSpectatorsCanSeeHands); -} - void GameSelectorQuickFilterToolBar::retranslateUi() { searchBar->setPlaceholderText(tr("Filter by game name...")); diff --git a/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.h b/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.h index c658418f9..642fdd1c4 100644 --- a/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.h +++ b/cockatrice/src/interface/widgets/server/game_selector_quick_filter_toolbar.h @@ -18,24 +18,6 @@ public: TabSupervisor *tabSupervisor, GamesProxyModel *model, const QMap &allGameTypes); - void syncFromModel(); - void applyFilters(std::function &, - int &, - int &, - QTime &, - bool &, - bool &, - bool &, - bool &)> mutator); void retranslateUi(); private: diff --git a/cockatrice/src/interface/widgets/server/games_model.cpp b/cockatrice/src/interface/widgets/server/games_model.cpp index 1f05308b8..05d363fee 100644 --- a/cockatrice/src/interface/widgets/server/games_model.cpp +++ b/cockatrice/src/interface/widgets/server/games_model.cpp @@ -326,7 +326,6 @@ void GamesProxyModel::setGameFilters(bool _hideBuddiesOnlyGames, #else invalidateFilter(); #endif - emit filtersChanged(); } int GamesProxyModel::getNumFilteredGames() const diff --git a/cockatrice/src/interface/widgets/server/games_model.h b/cockatrice/src/interface/widgets/server/games_model.h index c6884093d..56c806fb6 100644 --- a/cockatrice/src/interface/widgets/server/games_model.h +++ b/cockatrice/src/interface/widgets/server/games_model.h @@ -138,9 +138,6 @@ private: bool showOnlyIfSpectatorsCanChat; bool showOnlyIfSpectatorsCanSeeHands; -signals: - void filtersChanged(); - public: /** * @brief Constructs a GamesProxyModel. diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_button.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_button.h deleted file mode 100644 index 5d9f7f944..000000000 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_button.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef COCKATRICE_VISUAL_DATABASE_DISPLAY_FILTER_BUTTON_H -#define COCKATRICE_VISUAL_DATABASE_DISPLAY_FILTER_BUTTON_H - -#include - -const QString visualDatabaseDisplayFilterButtonStyle = QString(R"( - QPushButton { - background-color: palette(button); - color: palette(button-text); - padding: 5px 10px; - border-radius: 4px; - border: 1px solid palette(dark); - } - QPushButton:checked { - background-color: palette(highlight); - color: palette(highlighted-text); - border: 1px solid palette(shadow); - } -)"); - -#endif // COCKATRICE_VISUAL_DATABASE_DISPLAY_FILTER_BUTTON_H diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp index 633f07af7..0df948016 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp @@ -1,7 +1,6 @@ #include "visual_database_display_format_legality_filter_widget.h" #include "../../../filters/filter_tree_model.h" -#include "visual_database_display_filter_button.h" #include #include @@ -81,7 +80,8 @@ void VisualDatabaseDisplayFormatLegalityFilterWidget::createFormatButtons() for (auto it = allFormatsWithCount.begin(); it != allFormatsWithCount.end(); ++it) { auto *button = new QPushButton(it.key(), flowWidget); button->setCheckable(true); - button->setStyleSheet(visualDatabaseDisplayFilterButtonStyle); + button->setStyleSheet("QPushButton { background-color: lightgray; border: 1px solid gray; padding: 5px; }" + "QPushButton:checked { background-color: green; color: white; }"); flowWidget->addWidget(button); formatButtons[it.key()] = button; diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp index c44489c1b..bc8e914bd 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp @@ -1,7 +1,6 @@ #include "visual_database_display_main_type_filter_widget.h" #include "../../../filters/filter_tree_model.h" -#include "visual_database_display_filter_button.h" #include #include @@ -76,8 +75,8 @@ void VisualDatabaseDisplayMainTypeFilterWidget::createMainTypeButtons() for (auto it = allMainCardTypesWithCount.begin(); it != allMainCardTypesWithCount.end(); ++it) { auto *button = new QPushButton(it.key(), flowWidget); button->setCheckable(true); - - button->setStyleSheet(visualDatabaseDisplayFilterButtonStyle); + button->setStyleSheet("QPushButton { background-color: lightgray; border: 1px solid gray; padding: 5px; }" + "QPushButton:checked { background-color: green; color: white; }"); flowWidget->addWidget(button); typeButtons[it.key()] = button; diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp index 2751ee971..5098696dd 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp @@ -3,7 +3,6 @@ #include "../../../interface/widgets/dialogs/dlg_load_deck_from_clipboard.h" #include "../../../interface/widgets/tabs/abstract_tab_deck_editor.h" #include "../deck_editor/deck_state_manager.h" -#include "visual_database_display_filter_button.h" #include @@ -96,8 +95,8 @@ void VisualDatabaseDisplayNameFilterWidget::createNameFilter(const QString &name // Create a button for the filter auto *button = new QPushButton(name, flowWidget); - - button->setStyleSheet(visualDatabaseDisplayFilterButtonStyle); + 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); diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp index b72116461..3339bc561 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp @@ -2,7 +2,6 @@ #include "../../../client/settings/cache_settings.h" #include "../../../filters/filter_tree_model.h" -#include "visual_database_display_filter_button.h" #include #include @@ -102,8 +101,8 @@ void VisualDatabaseDisplaySetFilterWidget::createSetButtons() auto *button = new QPushButton(longName + " (" + shortName + ")", flowWidget); button->setCheckable(true); - - button->setStyleSheet(visualDatabaseDisplayFilterButtonStyle); + button->setStyleSheet("QPushButton { background-color: lightgray; border: 1px solid gray; padding: 5px; }" + "QPushButton:checked { background-color: green; color: white; }"); flowWidget->addWidget(button); setButtons[shortName] = button; diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp index 6d4bcb58e..57559d12c 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp @@ -1,7 +1,6 @@ #include "visual_database_display_sub_type_filter_widget.h" #include "../../../filters/filter_tree_model.h" -#include "visual_database_display_filter_button.h" #include #include @@ -81,8 +80,8 @@ void VisualDatabaseDisplaySubTypeFilterWidget::createSubTypeButtons() for (auto it = allSubCardTypesWithCount.begin(); it != allSubCardTypesWithCount.end(); ++it) { auto *button = new QPushButton(it.key(), flowWidget); button->setCheckable(true); - - button->setStyleSheet(visualDatabaseDisplayFilterButtonStyle); + button->setStyleSheet("QPushButton { background-color: lightgray; border: 1px solid gray; padding: 5px; }" + "QPushButton:checked { background-color: green; color: white; }"); flowWidget->addWidget(button); typeButtons[it.key()] = button;