aboutsummaryrefslogtreecommitdiff
path: root/src/base_tab/BaseImportTab.cpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-12-26 16:23:14 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-12-26 16:23:14 +0100
commit3263bda23b8bccb9958471be064603d958f08253 (patch)
tree390886397e25b27d78993442ed560e19928211de /src/base_tab/BaseImportTab.cpp
parent1c2d2a14ac1b8eab0504f657b02ab10290f92bf6 (diff)
Improve game import in db
Diffstat (limited to 'src/base_tab/BaseImportTab.cpp')
-rw-r--r--src/base_tab/BaseImportTab.cpp74
1 files changed, 70 insertions, 4 deletions
diff --git a/src/base_tab/BaseImportTab.cpp b/src/base_tab/BaseImportTab.cpp
index 9b2f541..6395fdf 100644
--- a/src/base_tab/BaseImportTab.cpp
+++ b/src/base_tab/BaseImportTab.cpp
@@ -1,14 +1,38 @@
#include "BaseImportTab.hpp"
+#include <algorithm>
+#include "gamebase/GameBase.hpp"
-BaseImportTab::BaseImportTab(wxFrame *parent, TabInfos *main_tab):
-TabBase_TabImport(parent), main_tab(main_tab)
+BaseImportTab::BaseImportTab(wxFrame *parent, std::shared_ptr<GameBase> db, TabInfos *main_tab):
+TabBase_TabImport(parent), main_tab(main_tab), base(db)
{
- glm=new GameListManager(game_list);
+ glm=std::make_shared<GameListManager>(game_list);
RefreshImportLists();
+ RefreshPendingImports();
this->Bind(wxEVT_BUTTON, &BaseImportTab::OnLoad, this, ID_LOAD_BUTTON);
+ this->Bind(wxEVT_BUTTON, &BaseImportTab::OnImportGame, this, ID_IMPORT_GAME_BUTTON);
+ this->Bind(wxEVT_BUTTON, &BaseImportTab::OnImportSelection, this, ID_IMPORT_SELECTION);
+ this->Bind(wxEVT_BUTTON, &BaseImportTab::OnImportDatabase, this, ID_IMPORT_DB);
+
opened_db_list->SetHint("No other database open");
}
+void BaseImportTab::OnImportDatabase(wxCommandEvent &event){
+ if(std::find(databases_to_import.begin(), databases_to_import.end(), selected_base) == databases_to_import.end()){
+ databases_to_import.push_back(selected_base);
+ RefreshPendingImports();
+ }
+ else SHOW_DIALOG_INFO("Database already prepared for import");
+}
+
+void BaseImportTab::RefreshPendingImports(){
+ int ngames=games_to_import.size();
+ int ndb=databases_to_import.size();
+ if(ngames+ndb>0){
+ pending_imports->SetLabel(" Pending imports: "+std::to_string(ngames)+" games and "+std::to_string(ndb)+" databases");
+ }else
+ pending_imports->SetLabel("");
+}
+
void BaseImportTab::RefreshImportLists(){
opened_game_list->Clear();
opened_db_list->Clear();
@@ -26,6 +50,48 @@ void BaseImportTab::RefreshImportLists(){
}
}
+void BaseImportTab::OnImportSelection(wxCommandEvent &event){
+ long selected = -1;
+ while ((selected = game_list->GetNextItem(selected, wxLIST_NEXT_ALL,
+ wxLIST_STATE_SELECTED)) !=
+ wxNOT_FOUND) {
+ games_to_import.push_back(selected_base->GetGame(glm->GetItemGameId(selected)));
+ }
+ RefreshPendingImports();
+}
+
+void BaseImportTab::OnImportGame(wxCommandEvent &event){
+ TabInfos *game_tab=(TabInfos*)opened_game_list->GetClientData(opened_game_list->GetSelection());
+ std::shared_ptr<Game> g=game_tab->GetGame();
+ if(std::find(games_to_import.begin(), games_to_import.end(), g) == games_to_import.end()){ wxLogDebug("Import!");
+ games_to_import.push_back(g);
+ RefreshPendingImports();
+ }
+ else SHOW_DIALOG_INFO("Game already prepared for import");
+}
+
void BaseImportTab::OnLoad(wxCommandEvent &event){
-wxLogDebug("Load!");
+ TabInfos *game_tab=(TabInfos*)opened_db_list->GetClientData(opened_db_list->GetSelection());
+ selected_base.reset();
+ selected_base=game_tab->GetBase();
+ glm->Clear();
+
+ // Load all games (for now :)
+ selected_base->Reset();
+ while (selected_base->NextGame()) {
+ glm->AddGame(
+ selected_base->GetTag("White"),
+ selected_base->GetTag("Black"),
+ selected_base->GetTag("Event"),
+ selected_base->GetTag("Round"),
+ selected_base->GetTag("Result"),
+ selected_base->GetTag("ECO"));
+ }
+}
+
+void BaseImportTab::Reset(std::shared_ptr<GameBase> base){
+ this->base=base;
+ this->games_to_import.clear();
+ this->databases_to_import.clear();
+ glm->Clear();
}