From 27ac369fb6b773f642eabed087194ff7e95f9156 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Fri, 30 Dec 2022 15:09:24 +0100 Subject: [PATCH] Enable game saving --- src/base_tab/gamebase/GameBase.cpp | 16 ++++++++++++++++ src/base_tab/gamebase/GameBase.hpp | 3 ++- src/game_tab/left_panel/GameTabLeftPanel.cpp | 11 +++++++++-- src/game_tab/left_panel/GameTabLeftPanel.hpp | 1 + 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/base_tab/gamebase/GameBase.cpp b/src/base_tab/gamebase/GameBase.cpp index 3d7b5d3..a5710df 100644 --- a/src/base_tab/gamebase/GameBase.cpp +++ b/src/base_tab/gamebase/GameBase.cpp @@ -16,4 +16,20 @@ std::shared_ptr OpenDatabase(const std::string &dbpath, bool createIfN std::shared_ptr OpenGameX(const std::string &dbpath, long id){ std::shared_ptr base=OpenDatabase(dbpath); return base->GetGame(id); +} + +void SaveGame(const std::string &dbpath, std::shared_ptr g){ + wxFileName file(dbpath); + wxString ext = file.GetExt().Lower(); + // Create data structure + std::vector> new_games; + new_games.push_back(g); + std::vector dummy_empty_bases; + std::vector dummy_empty_ignores; + // Save the game + if (ext == "pgn") { + PGNGameBase::CreateDatabaseFile(dbpath); // Erase if exist + GameBase *b=new PGNGameBase(dbpath); + b->Save(dummy_empty_ignores,dummy_empty_bases, new_games); + } } \ No newline at end of file diff --git a/src/base_tab/gamebase/GameBase.hpp b/src/base_tab/gamebase/GameBase.hpp index b84047b..1ef5f59 100644 --- a/src/base_tab/gamebase/GameBase.hpp +++ b/src/base_tab/gamebase/GameBase.hpp @@ -43,4 +43,5 @@ std::shared_ptr OpenDatabase(const std::string &dbpath, bool createIfN * @param id * @return std::shared_ptr */ -std::shared_ptr OpenGameX(const std::string &dbpath, long id); \ No newline at end of file +std::shared_ptr OpenGameX(const std::string &dbpath, long id); +void SaveGame(const std::string &dbpath, std::shared_ptr g); \ No newline at end of file diff --git a/src/game_tab/left_panel/GameTabLeftPanel.cpp b/src/game_tab/left_panel/GameTabLeftPanel.cpp index c5bf8ae..4f09bdd 100644 --- a/src/game_tab/left_panel/GameTabLeftPanel.cpp +++ b/src/game_tab/left_panel/GameTabLeftPanel.cpp @@ -32,9 +32,16 @@ GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, std::shared_ptr game) void GameTabLeftPanel::OnToolClick(wxCommandEvent &event){ short id=event.GetId(); if(id==0){ - if(related_file.size()>0){ - // Todo implement save file + if(!related_file.size()>0){ + wxFileDialog + newFileDialog(this, _("Save Game"), "", "", + "PGN files (*.pgn)|*.pgn", wxFD_SAVE|wxFD_OVERWRITE_PROMPT); + if (newFileDialog.ShowModal() == wxID_CANCEL) + return; + // Create and open new db + related_file = newFileDialog.GetPath().ToStdString(); } + SaveGame(related_file,game); } } diff --git a/src/game_tab/left_panel/GameTabLeftPanel.hpp b/src/game_tab/left_panel/GameTabLeftPanel.hpp index 25cbcf0..d9995e4 100644 --- a/src/game_tab/left_panel/GameTabLeftPanel.hpp +++ b/src/game_tab/left_panel/GameTabLeftPanel.hpp @@ -3,6 +3,7 @@ #include "../Game.hpp" #include "board/BoardCanvas.hpp" #include "ochess.hpp" +#include "base_tab/gamebase/GameBase.hpp" // Foreign events wxDECLARE_EVENT(GAME_CHANGE, wxCommandEvent);