From e67bffdbed2bcb07c61f59e6c7e7d4d06827e72c Mon Sep 17 00:00:00 2001 From: David Antunes Date: Sat, 21 Jun 2025 15:45:25 +0100 Subject: [PATCH] change the way favorites are saved to match #3119 --- src/qt_gui/game_grid_frame.cpp | 8 +++++--- src/qt_gui/game_list_frame.cpp | 22 ++++++++++++++++------ src/qt_gui/gui_context_menus.h | 11 ++++++++--- src/qt_gui/gui_settings.h | 4 ++++ 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/qt_gui/game_grid_frame.cpp b/src/qt_gui/game_grid_frame.cpp index 384c10dc7..dda73fa17 100644 --- a/src/qt_gui/game_grid_frame.cpp +++ b/src/qt_gui/game_grid_frame.cpp @@ -241,7 +241,8 @@ bool GameGridFrame::IsValidCellSelected() { void GameGridFrame::SetFavoriteIcon(QWidget* parentWidget, QVector m_games_, int gameCounter) { QString serialStr = QString::fromStdString(m_games_[gameCounter].serial); - bool isFavorite = m_gui_settings->GetValue(gui::favorites, serialStr, false).toBool(); + QList list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list)); + bool isFavorite = list.contains(serialStr); QLabel* label = new QLabel(parentWidget); label->setPixmap(QPixmap(":images/favorite_icon.png") @@ -264,8 +265,9 @@ bool GameGridFrame::CompareWithFavorite(GameInfo a, GameInfo b) { std::string serial_b = b.serial; QString serialStr_a = QString::fromStdString(a.serial); QString serialStr_b = QString::fromStdString(b.serial); - bool isFavorite_a = m_gui_settings->GetValue(gui::favorites, serialStr_a, false).toBool(); - bool isFavorite_b = m_gui_settings->GetValue(gui::favorites, serialStr_b, false).toBool(); + QList list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list)); + bool isFavorite_a = list.contains(serialStr_a); + bool isFavorite_b = list.contains(serialStr_b); if (isFavorite_a != isFavorite_b) { return isFavorite_a; } else { diff --git a/src/qt_gui/game_list_frame.cpp b/src/qt_gui/game_list_frame.cpp index 301685971..e4c40b4f9 100644 --- a/src/qt_gui/game_list_frame.cpp +++ b/src/qt_gui/game_list_frame.cpp @@ -96,9 +96,16 @@ GameListFrame::GameListFrame(std::shared_ptr gui_settings, QUrl(url_issues + m_game_info->m_games[row].compatibility.issue_number)); } else if (column == 10) { last_favorite = m_game_info->m_games[row].serial; - QString serialStr = QString::fromStdString(m_game_info->m_games[row].serial); - bool isFavorite = m_gui_settings->GetValue(gui::favorites, serialStr, false).toBool(); - m_gui_settings->SetValue(gui::favorites, serialStr, !isFavorite, true); + QString serialStr = QString::fromStdString(last_favorite); + QList list = + gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list)); + bool isFavorite = list.contains(serialStr); + if (isFavorite) { + list.removeOne(serialStr); + } else { + list.append(serialStr); + } + m_gui_settings->SetValue(gui::favorites_list, gui_settings::List2Var(list)); PopulateGameList(false); } }); @@ -250,8 +257,9 @@ bool GameListFrame::CompareWithFavorite(GameInfo a, GameInfo b, int columnIndex, std::string serial_b = b.serial; QString serialStr_a = QString::fromStdString(a.serial); QString serialStr_b = QString::fromStdString(b.serial); - bool isFavorite_a = m_gui_settings->GetValue(gui::favorites, serialStr_a, false).toBool(); - bool isFavorite_b = m_gui_settings->GetValue(gui::favorites, serialStr_b, false).toBool(); + QList list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list)); + bool isFavorite_a = list.contains(serialStr_a); + bool isFavorite_b = list.contains(serialStr_b); if (isFavorite_a != isFavorite_b) { return isFavorite_a; } else if (ascending) { @@ -439,8 +447,10 @@ void GameListFrame::SetRegionFlag(int row, int column, QString itemStr) { } void GameListFrame::SetFavoriteIcon(int row, int column) { + QString serialStr = QString::fromStdString(m_game_info->m_games[row].serial); - bool isFavorite = m_gui_settings->GetValue(gui::favorites, serialStr, false).toBool(); + QList list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list)); + bool isFavorite = list.contains(serialStr); QTableWidgetItem* item = new QTableWidgetItem(); QImage scaledPixmap = QImage(":images/favorite_icon.png"); diff --git a/src/qt_gui/gui_context_menus.h b/src/qt_gui/gui_context_menus.h index 275c6f79f..6c384c4bc 100644 --- a/src/qt_gui/gui_context_menus.h +++ b/src/qt_gui/gui_context_menus.h @@ -67,8 +67,8 @@ public: menu.addMenu(openFolderMenu); QString serialStr = QString::fromStdString(m_games[itemID].serial); - bool isFavorite = m_gui_settings->GetValue(gui::favorites, serialStr, false).toBool(); - + QList list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list)); + bool isFavorite = list.contains(serialStr); QAction* toggleFavorite; if (isFavorite) { @@ -316,7 +316,12 @@ public: } if (selected == toggleFavorite) { - m_gui_settings->SetValue(gui::favorites, serialStr, !isFavorite, true); + if (isFavorite) { + list.removeOne(serialStr); + } else { + list.append(serialStr); + } + m_gui_settings->SetValue(gui::favorites_list, gui_settings::List2Var(list)); changedFavorite = 1; } diff --git a/src/qt_gui/gui_settings.h b/src/qt_gui/gui_settings.h index c6aac0702..4c1eafc95 100644 --- a/src/qt_gui/gui_settings.h +++ b/src/qt_gui/gui_settings.h @@ -42,6 +42,10 @@ const gui_value gl_backgroundMusicVolume = gui_value(game_list, "backgroundMusic const gui_value gg_icon_size = gui_value(game_grid, "icon_size", 69); const gui_value gg_slider_pos = gui_value(game_grid, "slider_pos", 0); +// favorites list +const gui_value favorites_list = + gui_value(favorites, "favoritesList", QVariant::fromValue(QList())); + } // namespace gui class gui_settings : public settings {