From 2bd85f53bcaeb12090b9ac2d4cf7c781b280e678 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 26 Dec 2022 08:26:02 +0100 Subject: [PATCH] Game list can now be sorted --- src/MainWindow.cpp | 4 ++-- src/base_tab/GameListManager.cpp | 40 ++++++++++++++++++++------------ src/base_tab/GameListManager.hpp | 7 +++++- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7e50150..5ac3d0a 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -59,8 +59,8 @@ MainWindow::MainWindow() NewGame(std::shared_ptr(new Game())); // Temporary TO REMOVE JUST FOR TESTS: - //BaseTab *bt = new BaseTab((wxFrame *)notebook, "/home/loic/Downloads/PGN.pgn"); - //this->AddPage(bt,bt); + BaseTab *bt = new BaseTab((wxFrame *)notebook, "/home/loic/pgn/twic1467.pgn"); + this->AddPage(bt,bt); } void MainWindow::AddPage(wxWindow* window, TabInfos* infos){ diff --git a/src/base_tab/GameListManager.cpp b/src/base_tab/GameListManager.cpp index fef0241..07c9feb 100644 --- a/src/base_tab/GameListManager.cpp +++ b/src/base_tab/GameListManager.cpp @@ -13,7 +13,7 @@ GameListManager::GameListManager(wxListCtrl *game_list): game_list(game_list), g void GameListManager::AddGame(CType White,CType Black,CType Event,CType Round, CType Result, CType Eco){ // Update rows elements - rows.push_back({White,Black,Event,Round,Result,Eco}); + rows.push_back({game_counter,White,Black,Event,Round,Result,Eco}); // Display the row DisplayRow(game_counter); game_counter++; @@ -22,7 +22,7 @@ void GameListManager::AddGame(CType White,CType Black,CType Event,CType Round, C void GameListManager::DisplayRow(long id){ RType row=rows[id]; long index = - game_list->InsertItem(game_counter, std::to_string(id)); // want this for col. 1 + game_list->InsertItem(game_counter, std::to_string(row.id)); // want this for col. 1 game_list->SetItem(index, 1, row.White); game_list->SetItem(index, 2, row.Black); game_list->SetItem(index, 3, row.Event); @@ -30,16 +30,16 @@ void GameListManager::DisplayRow(long id){ game_list->SetItem(index, 5, row.Result); game_list->SetItem(index, 6, row.Eco); - if(std::find(opened_items.begin(), opened_items.end(), index) != opened_items.end()) - MarkItemAsOpen(index); - if(std::find(deleted_items.begin(), deleted_items.end(), index) != deleted_items.end()) - MarkItemAsDeleted(index); + if(std::find(opened_games.begin(), opened_games.end(), row.id) != opened_games.end()) + BG_OPEN(index); + if(std::find(deleted_games.begin(), deleted_games.end(), row.id) != deleted_games.end()) + BG_DELETE(index); } void GameListManager::Clear(){ game_list->DeleteAllItems(); - deleted_items.clear(); - opened_items.clear(); + deleted_games.clear(); + opened_games.clear(); rows.clear(); } @@ -48,13 +48,25 @@ void GameListManager::ClearDisplayedRow(){ } void GameListManager::MarkItemAsOpen(long item){ - opened_items.push_back(item); - game_list->SetItemBackgroundColour(item, *wxGREEN); + opened_games.push_back(rows[item].id); + BG_OPEN(item); } void GameListManager::MarkItemAsDeleted(long item){ - deleted_items.push_back(item); - game_list->SetItemBackgroundColour(item, *wxRED); + deleted_games.push_back(rows[item].id); + BG_DELETE(item); +} + +void GameListManager::SortBy(short col){ + ClearDisplayedRow(); + switch(col){ + case 1: + std::sort(rows.begin(),rows.end(), [&](RType a, RType b){return(a.White < b.White);}); + break; + default: + std::sort(rows.begin(),rows.end(), [&](RType a, RType b){return(a.id < b.id);}); + } + DISPLAY_ALL_ROWS(); } std::vector GameListManager::GetSelectedItems(){ @@ -94,8 +106,6 @@ void GameListManager::Filter(std::string terms){ void GameListManager::ClearFilter() { ClearDisplayedRow(); - for(int i=0;i #define TERMS_IN(COL) (row.COL.find(terms) != std::string::npos) +#define BG_OPEN(INDEX) game_list->SetItemBackgroundColour(INDEX, *wxGREEN) +#define BG_DELETE(INDEX) game_list->SetItemBackgroundColour(INDEX, *wxRED) +#define DISPLAY_ALL_ROWS() {for(int i=0;i rows; - std::vector deleted_items, opened_items; + std::vector deleted_games, opened_games; void DisplayRow(long id); void ClearDisplayedRow(); @@ -35,4 +39,5 @@ public: long GetItemGameId(long item); void Filter(std::string terms); void ClearFilter(); + void SortBy(short col); }; \ No newline at end of file