aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/MainWindow.cpp13
-rw-r--r--src/base_tab/BaseTab.cpp3
-rw-r--r--src/base_tab/gamebase/GameBase.hpp5
-rw-r--r--src/base_tab/gamebase/PGNGameBase.cpp5
-rw-r--r--src/base_tab/gamebase/PGNGameBase.hpp1
5 files changed, 26 insertions, 1 deletions
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<GameBase>(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<GameBase> 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<Game> 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<Game> g);
+ static void CreateDatabaseFile(std::string path);
}; \ No newline at end of file