From 5691b7b30f966f72ce1cac18e4573132b351cbbd Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 26 Dec 2022 19:20:36 +0100 Subject: [PATCH] Improve database management --- src/MainWindow.cpp | 13 ++++++++++++- src/base_tab/BaseTab.cpp | 3 +++ src/base_tab/gamebase/GameBase.hpp | 5 +++++ src/base_tab/gamebase/PGNGameBase.cpp | 5 +++++ src/base_tab/gamebase/PGNGameBase.hpp | 1 + 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 62b17e1..0602110 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -35,7 +35,8 @@ MainWindow::MainWindow() menu_game->Append(3, "New from FEN", "Create new game using FEN"); // Game base menu - menu_db->Append(5, "Open", "Open a database"); + menu_db->Append(7, "New", "Create database"); + menu_db->Append(5, "Open", "Open database"); // Engine menu menu_engine->Append(6, "New", "Create a new engine configuration"); @@ -129,6 +130,16 @@ void MainWindow::OnMenuItemClick(wxCommandEvent &event) { OpenFile(); } else if (id == 6) { NewEngine(); + } else if (id == 7) { + wxFileDialog + newFileDialog(this, _("Create database file"), "", "", + "PGN files (*.pgn)|*.pgn", wxFD_SAVE|wxFD_OVERWRITE_PROMPT); + if (newFileDialog.ShowModal() == wxID_CANCEL) + return; + // Create and open new db + std::string path = newFileDialog.GetPath().ToStdString(); + BaseTab *bt = new BaseTab((wxFrame *)notebook, path); + AddPage(bt,bt); } } diff --git a/src/base_tab/BaseTab.cpp b/src/base_tab/BaseTab.cpp index bc40e60..8b58ca9 100644 --- a/src/base_tab/BaseTab.cpp +++ b/src/base_tab/BaseTab.cpp @@ -48,7 +48,10 @@ void BaseTab::Refresh(){ void BaseTab::OpenDatabase(std::string dbpath) { wxFileName file(dbpath); wxString ext = file.GetExt().Lower(); + wxLogDebug("Here"); if (ext == "pgn") { + if(!file.Exists()) + PGNGameBase::CreateDatabaseFile(dbpath); base.reset(); base = std::shared_ptr(new PGNGameBase(dbpath)); } diff --git a/src/base_tab/gamebase/GameBase.hpp b/src/base_tab/gamebase/GameBase.hpp index 89ba278..c87078d 100644 --- a/src/base_tab/gamebase/GameBase.hpp +++ b/src/base_tab/gamebase/GameBase.hpp @@ -22,4 +22,9 @@ public: * @param base */ virtual void Export(std::shared_ptr base) = 0; + + /** + * @brief An additionnal static method is expected with the following signature: + * static void CreateDatabaseFile(std::string path); + */ }; \ No newline at end of file diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp index 147899b..9ee5038 100644 --- a/src/base_tab/gamebase/PGNGameBase.cpp +++ b/src/base_tab/gamebase/PGNGameBase.cpp @@ -28,6 +28,11 @@ std::string PGNGameBase::GetTag(std::string tag) { return (""); } +void PGNGameBase::CreateDatabaseFile(std::string path){ + wxFile empty_pgn(path, wxFile::write); + empty_pgn.Close(); +} + std::shared_ptr PGNGameBase::GetCurrentGame() { pgnp::HalfMove *pgnp_moves = new pgnp::HalfMove(); pgn->GetMoves(pgnp_moves); diff --git a/src/base_tab/gamebase/PGNGameBase.hpp b/src/base_tab/gamebase/PGNGameBase.hpp index b184318..3f145ca 100644 --- a/src/base_tab/gamebase/PGNGameBase.hpp +++ b/src/base_tab/gamebase/PGNGameBase.hpp @@ -22,4 +22,5 @@ public: std::string GetFilePath() {return(file);}; static std::string GetMovesPGN(HalfMove *m, bool needDots); static std::string GetPGN(std::shared_ptr g); + static void CreateDatabaseFile(std::string path); }; \ No newline at end of file