From 745cdd89fdd67adb541901dc969bf3950cd710a3 Mon Sep 17 00:00:00 2001 From: DanielSvoboda Date: Fri, 21 Feb 2025 03:29:30 -0300 Subject: [PATCH] QT: Fix search in Grid mode (#2490) * QT: Fix search in Grid mode * Fix performance? * Fix performance List * +fix --- src/qt_gui/game_info.cpp | 3 +++ src/qt_gui/game_info.h | 1 + src/qt_gui/main_window.cpp | 13 +++++++++++++ 3 files changed, 17 insertions(+) diff --git a/src/qt_gui/game_info.cpp b/src/qt_gui/game_info.cpp index adbf392ed..947f25d84 100644 --- a/src/qt_gui/game_info.cpp +++ b/src/qt_gui/game_info.cpp @@ -49,6 +49,9 @@ void GameInfoClass::GetGameInfo(QWidget* parent) { return readGameInfo(Common::FS::PathFromQString(path)); }).results(); + // used to retrieve values after performing a search + m_games_backup = m_games; + // Progress bar, please be patient :) QProgressDialog dialog(tr("Loading game list, please wait :3"), tr("Cancel"), 0, 0, parent); dialog.setWindowTitle(tr("Loading...")); diff --git a/src/qt_gui/game_info.h b/src/qt_gui/game_info.h index 380c79e70..0759ccc52 100644 --- a/src/qt_gui/game_info.h +++ b/src/qt_gui/game_info.h @@ -17,6 +17,7 @@ public: ~GameInfoClass(); void GetGameInfo(QWidget* parent = nullptr); QVector m_games; + QVector m_games_backup; static bool CompareStrings(GameInfo& a, GameInfo& b) { std::string name_a = a.name, name_b = b.name; diff --git a/src/qt_gui/main_window.cpp b/src/qt_gui/main_window.cpp index 949d7062e..0da6428aa 100644 --- a/src/qt_gui/main_window.cpp +++ b/src/qt_gui/main_window.cpp @@ -413,6 +413,7 @@ void MainWindow::CreateConnects() { int slider_pos = Config::getSliderPosition(); ui->sizeSlider->setEnabled(true); ui->sizeSlider->setSliderPosition(slider_pos); + ui->mw_searchbar->setText(""); }); // Grid connect(ui->setlistModeGridAct, &QAction::triggered, m_dock_widget.data(), [this]() { @@ -430,6 +431,7 @@ void MainWindow::CreateConnects() { int slider_pos_grid = Config::getSliderPositionGrid(); ui->sizeSlider->setEnabled(true); ui->sizeSlider->setSliderPosition(slider_pos_grid); + ui->mw_searchbar->setText(""); }); // Elf Viewer connect(ui->setlistElfAct, &QAction::triggered, m_dock_widget.data(), [this]() { @@ -658,14 +660,24 @@ void MainWindow::StartGame() { } } +bool isTable; void MainWindow::SearchGameTable(const QString& text) { if (isTableList) { + if (isTable != true) { + m_game_info->m_games = m_game_info->m_games_backup; + m_game_list_frame->PopulateGameList(); + isTable = true; + } for (int row = 0; row < m_game_list_frame->rowCount(); row++) { QString game_name = QString::fromStdString(m_game_info->m_games[row].name); bool match = (game_name.contains(text, Qt::CaseInsensitive)); // Check only in column 1 m_game_list_frame->setRowHidden(row, !match); } } else { + isTable = false; + m_game_info->m_games = m_game_info->m_games_backup; + m_game_grid_frame->PopulateGameGrid(m_game_info->m_games, false); + QVector filteredGames; for (const auto& gameInfo : m_game_info->m_games) { QString game_name = QString::fromStdString(gameInfo.name); @@ -674,6 +686,7 @@ void MainWindow::SearchGameTable(const QString& text) { } } std::sort(filteredGames.begin(), filteredGames.end(), m_game_info->CompareStrings); + m_game_info->m_games = filteredGames; m_game_grid_frame->PopulateGameGrid(filteredGames, true); } }