From 8e01d5b96a5b92b146e7cbc1eea80d80ed3a1db3 Mon Sep 17 00:00:00 2001
From: Loic Guegan <manzerbredes@mailbox.org>
Date: Sun, 25 Dec 2022 15:26:16 +0100
Subject: [PATCH] Add game list manager

---
 src/base_tab/BaseGameTab.cpp     | 25 ++++++++-----------------
 src/base_tab/BaseGameTab.hpp     |  4 +++-
 src/base_tab/GameListManager.cpp | 24 ++++++++++++++++++++++++
 src/base_tab/GameListManager.hpp | 11 +++++++++++
 4 files changed, 46 insertions(+), 18 deletions(-)
 create mode 100644 src/base_tab/GameListManager.cpp
 create mode 100644 src/base_tab/GameListManager.hpp

diff --git a/src/base_tab/BaseGameTab.cpp b/src/base_tab/BaseGameTab.cpp
index a652478..c5b3958 100644
--- a/src/base_tab/BaseGameTab.cpp
+++ b/src/base_tab/BaseGameTab.cpp
@@ -9,13 +9,7 @@ BaseGameTab::BaseGameTab(wxFrame *parent, std::string base_file, TabInfos *main_
     : TabBase_TabGames(parent), base_file(base_file),
       base(NULL),main_tab(main_tab) {
 
-  game_list->InsertColumn(0, L"id", wxLIST_FORMAT_LEFT, 50);
-  game_list->InsertColumn(1, L"White", wxLIST_FORMAT_LEFT, 200);
-  game_list->InsertColumn(2, L"Black", wxLIST_FORMAT_LEFT, 200);
-  game_list->InsertColumn(3, L"Event", wxLIST_FORMAT_LEFT, 150);
-  game_list->InsertColumn(4, L"Round", wxLIST_FORMAT_LEFT, 100);
-  game_list->InsertColumn(5, L"Result", wxLIST_FORMAT_LEFT, 200);
-  game_list->InsertColumn(6, L"ECO", wxLIST_FORMAT_LEFT, 200);
+  glm=new GameListManager(game_list);
 
   this->Bind(wxEVT_BUTTON, &BaseGameTab::OnDelete, this, ID_DELETE_BUTTON);
   this->Bind(wxEVT_BUTTON, &BaseGameTab::OnSave, this, ID_SAVE_BUTTON);
@@ -130,17 +124,14 @@ void BaseGameTab::LoadFile() {
   }
 
   if (base != NULL) {
-    long id = 0;
     while (base->NextGame()) {
-      long index =
-          game_list->InsertItem(0, std::to_string(id)); // want this for col. 1
-      game_list->SetItem(index, 1, base->GetTag("White"));
-      game_list->SetItem(index, 2, base->GetTag("Black"));
-      game_list->SetItem(index, 3, base->GetTag("Event"));
-      game_list->SetItem(index, 4, base->GetTag("Round"));
-      game_list->SetItem(index, 5, base->GetTag("Result"));
-      game_list->SetItem(index, 6, base->GetTag("ECO"));
-      id++;
+      glm->AddGame(
+        base->GetTag("White"),
+        base->GetTag("Black"),
+        base->GetTag("Event"),
+        base->GetTag("Round"),
+        base->GetTag("Result"),
+        base->GetTag("ECO"));
     }
   }
 
diff --git a/src/base_tab/BaseGameTab.hpp b/src/base_tab/BaseGameTab.hpp
index 4c338cf..45cc552 100644
--- a/src/base_tab/BaseGameTab.hpp
+++ b/src/base_tab/BaseGameTab.hpp
@@ -1,7 +1,7 @@
 
 #include "gamebase/GameBase.hpp"
 #include "gamebase/PGNGameBase.hpp"
-#include "ochess.hpp"
+#include "GameListManager.hpp"
 
 // Foreign events
 wxDECLARE_EVENT(OPEN_GAME_EVENT, wxCommandEvent);
@@ -14,9 +14,11 @@ class BaseGameTab : public TabBase_TabGames {
   std::unordered_map<long, std::shared_ptr<Game>> edited;
   std::string base_file;
   TabInfos *main_tab;
+  GameListManager *glm;
 
 public:
   BaseGameTab(wxFrame *parent, std::string base_file, TabInfos *main_tab);
+  ~BaseGameTab() {delete(glm);};
 
   void ApplyPreferences();
   void LoadFile();
diff --git a/src/base_tab/GameListManager.cpp b/src/base_tab/GameListManager.cpp
new file mode 100644
index 0000000..7595088
--- /dev/null
+++ b/src/base_tab/GameListManager.cpp
@@ -0,0 +1,24 @@
+#include "GameListManager.hpp"
+
+
+GameListManager::GameListManager(wxListCtrl *game_list): game_list(game_list), game_counter(0) {
+  game_list->InsertColumn(0, L"Id", wxLIST_FORMAT_LEFT, 50);
+  game_list->InsertColumn(1, L"White", wxLIST_FORMAT_LEFT, 200);
+  game_list->InsertColumn(2, L"Black", wxLIST_FORMAT_LEFT, 200);
+  game_list->InsertColumn(3, L"Event", wxLIST_FORMAT_LEFT, 150);
+  game_list->InsertColumn(4, L"Round", wxLIST_FORMAT_LEFT, 100);
+  game_list->InsertColumn(5, L"Result", wxLIST_FORMAT_LEFT, 200);
+  game_list->InsertColumn(6, L"ECO", wxLIST_FORMAT_LEFT, 200);
+}
+
+void GameListManager::AddGame(CType W,CType B,CType Evt,CType Rnd, CType Res, CType Eco){
+  long index =
+            game_list->InsertItem(0, std::to_string(game_counter)); // want this for col. 1
+  game_list->SetItem(index, 1, W);
+  game_list->SetItem(index, 2, B);
+  game_list->SetItem(index, 3, Evt);
+  game_list->SetItem(index, 4, Rnd);
+  game_list->SetItem(index, 5, Res);
+  game_list->SetItem(index, 6, Eco);
+  game_counter++;
+}
diff --git a/src/base_tab/GameListManager.hpp b/src/base_tab/GameListManager.hpp
new file mode 100644
index 0000000..6f8aa06
--- /dev/null
+++ b/src/base_tab/GameListManager.hpp
@@ -0,0 +1,11 @@
+#include "ochess.hpp"
+
+typedef std::string CType;
+
+class GameListManager {
+    wxListCtrl *game_list;
+    long game_counter;
+public:
+    GameListManager(wxListCtrl *game_list);
+    void AddGame(CType W,CType B,CType Evt,CType Rnd, CType Res, CType Eco);
+};
\ No newline at end of file