aboutsummaryrefslogtreecommitdiff
path: root/src/base_tab
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-02-25 14:57:09 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-02-25 14:57:09 +0100
commit98488e899a750703562d868d734251cfe032e294 (patch)
tree9bd60859300f4d14f00e4c28d8f87e6a5396abb4 /src/base_tab
parentcbcc455e339a6fec87f16369e450620ef7692a34 (diff)
Enable database export
Diffstat (limited to 'src/base_tab')
-rw-r--r--src/base_tab/BasePanelBF.cpp2
-rw-r--r--src/base_tab/BasePanelBF.h3
-rw-r--r--src/base_tab/BaseTab.cpp18
-rw-r--r--src/base_tab/BaseTab.hpp1
-rw-r--r--src/base_tab/gamebase/GameBase.hpp1
-rw-r--r--src/base_tab/gamebase/PGNGameBase.cpp39
-rw-r--r--src/base_tab/gamebase/PGNGameBase.hpp1
7 files changed, 54 insertions, 11 deletions
diff --git a/src/base_tab/BasePanelBF.cpp b/src/base_tab/BasePanelBF.cpp
index 4c25cf9..96ced01 100644
--- a/src/base_tab/BasePanelBF.cpp
+++ b/src/base_tab/BasePanelBF.cpp
@@ -24,7 +24,7 @@ BasePanelBF::BasePanelBF( wxWindow* parent, wxWindowID id, const wxPoint& pos, c
save_button = new wxButton( this, ID_SAVE_BUTTON, wxT("Save"), wxDefaultPosition, wxDefaultSize, 0 );
top_sizer->Add( save_button, 0, wxALL, 5 );
- export_button = new wxButton( this, wxID_ANY, wxT("Export"), wxDefaultPosition, wxDefaultSize, 0 );
+ export_button = new wxButton( this, ID_EXPORT_BUTTON, wxT("Export"), wxDefaultPosition, wxDefaultSize, 0 );
top_sizer->Add( export_button, 0, wxALL, 5 );
diff --git a/src/base_tab/BasePanelBF.h b/src/base_tab/BasePanelBF.h
index 167ce99..1b74915 100644
--- a/src/base_tab/BasePanelBF.h
+++ b/src/base_tab/BasePanelBF.h
@@ -28,7 +28,8 @@
///////////////////////////////////////////////////////////////////////////
#define ID_SAVE_BUTTON 1000
-#define ID_DELETE_BUTTON 1001
+#define ID_EXPORT_BUTTON 1001
+#define ID_DELETE_BUTTON 1002
///////////////////////////////////////////////////////////////////////////////
/// Class BasePanelBF
diff --git a/src/base_tab/BaseTab.cpp b/src/base_tab/BaseTab.cpp
index 9234a47..f7cf48f 100644
--- a/src/base_tab/BaseTab.cpp
+++ b/src/base_tab/BaseTab.cpp
@@ -15,6 +15,7 @@ BaseTab::BaseTab(wxFrame *parent, std::string base_file)
this->Bind(wxEVT_BUTTON, &BaseTab::OnDelete, this, ID_DELETE_BUTTON);
this->Bind(wxEVT_BUTTON, &BaseTab::OnSave, this, ID_SAVE_BUTTON);
+ this->Bind(wxEVT_BUTTON, &BaseTab::OnExport, this, ID_EXPORT_BUTTON);
this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseTab::OnOpenGame, this, wxID_ANY);
current_base->SetLabel(base_file);
LoadFile();
@@ -65,6 +66,23 @@ void BaseTab::OnOpenGame(wxListEvent &event) {
void BaseTab::ApplyPreferences() {}
+void BaseTab::OnExport(wxCommandEvent &event) {
+ wxFileDialog openFileDialog(this, _("Export database"), "", "",
+ "Database files (*.pgn)|*.pgn",
+ wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
+ if (openFileDialog.ShowModal() != wxID_CANCEL) {
+ std::string path = openFileDialog.GetPath().ToStdString();
+ wxFileName file(base_file);
+ wxString ext = file.GetExt().Lower();
+ GameBase *base;
+ if (ext == "pgn") {
+ base = new PGNGameBase(path);
+ base->Save(this->base);
+ delete base;
+ }
+ }
+}
+
void BaseTab::LoadFile() {
wxFileName file(base_file);
wxString ext = file.GetExt().Lower();
diff --git a/src/base_tab/BaseTab.hpp b/src/base_tab/BaseTab.hpp
index cd3aff0..f58e182 100644
--- a/src/base_tab/BaseTab.hpp
+++ b/src/base_tab/BaseTab.hpp
@@ -20,5 +20,6 @@ public:
void LoadFile();
void OnDelete(wxCommandEvent &event);
void OnSave(wxCommandEvent &event);
+ void OnExport(wxCommandEvent &event);
void OnOpenGame(wxListEvent &event);
}; \ No newline at end of file
diff --git a/src/base_tab/gamebase/GameBase.hpp b/src/base_tab/gamebase/GameBase.hpp
index db58bcc..cf87a9c 100644
--- a/src/base_tab/gamebase/GameBase.hpp
+++ b/src/base_tab/gamebase/GameBase.hpp
@@ -14,4 +14,5 @@ public:
virtual bool NextGame() = 0;
virtual std::string GetTag(std::string tag) = 0;
virtual void Reset() = 0;
+ virtual void Save(GameBase *base) = 0;
}; \ No newline at end of file
diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp
index bd83abc..dc6341c 100644
--- a/src/base_tab/gamebase/PGNGameBase.cpp
+++ b/src/base_tab/gamebase/PGNGameBase.cpp
@@ -68,11 +68,16 @@ void PGNGameBase::Save(std::vector<std::uint32_t> to_ignore,
Reset();
std::uint32_t id = 0;
+ bool several = false;
while (NextGame()) {
if (std::find(to_ignore.begin(), to_ignore.end(), id) == to_ignore.end()) {
+ if (several) {
+ new_pgn.Write("\n\n");
+ } else {
+ several = true;
+ }
Game *g = GetCurrentGame();
new_pgn.Write(g->GetPGN());
- new_pgn.Write("\n\n");
delete g;
}
id++;
@@ -80,18 +85,34 @@ void PGNGameBase::Save(std::vector<std::uint32_t> to_ignore,
// Now add new games
for (Game *g : new_games) {
+ if (several) {
+ new_pgn.Write("\n\n");
+ } else {
+ several = true;
+ }
new_pgn.Write(g->GetPGN());
- new_pgn.Write("\n\n");
}
- // new_games->Reset();
- // while (new_games->NextGame()) {
- // Game *g = new_games->GetCurrentGame();
- // new_pgn.Write(g->GetPGN());
- // delete g;
- // }
-
new_pgn.Close();
wxCopyFile(tmp, file);
wxRemoveFile(tmp);
}
+
+void PGNGameBase::Save(GameBase *base) {
+ wxFile new_pgn(file, wxFile::write);
+
+ base->Reset();
+ bool several = false;
+ while (base->NextGame()) {
+ if (several) {
+ new_pgn.Write("\n\n");
+ } else {
+ several = true;
+ }
+ Game *g = base->GetCurrentGame();
+ new_pgn.Write(g->GetPGN());
+ delete g;
+ }
+
+ new_pgn.Close();
+}
diff --git a/src/base_tab/gamebase/PGNGameBase.hpp b/src/base_tab/gamebase/PGNGameBase.hpp
index 7a1a63d..e153701 100644
--- a/src/base_tab/gamebase/PGNGameBase.hpp
+++ b/src/base_tab/gamebase/PGNGameBase.hpp
@@ -16,4 +16,5 @@ public:
std::vector<GameBase *> new_games_bases,
std::vector<Game *> new_games);
void Reset();
+ void Save(GameBase *base);
}; \ No newline at end of file