aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-02-26 12:48:52 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-02-26 12:48:52 +0100
commitb1a82ff56811565d11ef3b6506c5a7f3d8b595e9 (patch)
treeab02508785096d8b434866402b57f9996efb19db /src
parente0a1894928abb8361f959a147066e94e2cda996b (diff)
Now games can be imported
Diffstat (limited to 'src')
-rw-r--r--src/MainWindow.cpp4
-rw-r--r--src/base_tab/AppendGameDialog.cpp14
-rw-r--r--src/base_tab/BaseTab.cpp7
-rw-r--r--src/base_tab/gamebase/PGNGameBase.cpp14
-rw-r--r--src/game_tab/Game.cpp6
5 files changed, 38 insertions, 7 deletions
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index bc417b6..5ba01ad 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -57,9 +57,9 @@ MainWindow::MainWindow()
Bind(NEW_GAME_EVENT, &MainWindow::OnNewGame, this, wxID_ANY);
Bind(wxEVT_CLOSE_WINDOW, &MainWindow::OnClose, this);
- /*BaseTab *bt = new BaseTab((wxFrame *)notebook, "/home/loic/hartwig.pgn");
+ BaseTab *bt = new BaseTab((wxFrame *)notebook, "/home/loic/hartwig_tests.pgn");
notebook->AddPage(bt, bt->GetLabel());
- notebook->SetSelection(notebook->GetPageIndex(bt));*/
+ notebook->SetSelection(notebook->GetPageIndex(bt));
}
void MainWindow::OnSettings(wxCommandEvent &event) {
diff --git a/src/base_tab/AppendGameDialog.cpp b/src/base_tab/AppendGameDialog.cpp
index 8a76028..bfa33f3 100644
--- a/src/base_tab/AppendGameDialog.cpp
+++ b/src/base_tab/AppendGameDialog.cpp
@@ -24,5 +24,19 @@ void AppendGameDialog::OnImport(wxCommandEvent &event) {
std::vector<GameBase *> new_games_bases;
std::vector<Game *> new_games;
+ wxArrayInt selections;
+ game_list->GetSelections(selections);
+
+ for (int &i : selections) {
+ TabInfos *tinfo = tinfos[i];
+ if (tinfo->type == TabInfos::BASE) {
+ new_games_bases.push_back(static_cast<GameBase *>(tinfo->GetBase()));
+ } else if (tinfo->type == TabInfos::GAME) {
+ new_games.push_back(static_cast<Game *>(tinfo->GetGame()));
+ }
+ }
+
+ base->Save(to_ignore, new_games_bases, new_games);
+
this->Close();
} \ No newline at end of file
diff --git a/src/base_tab/BaseTab.cpp b/src/base_tab/BaseTab.cpp
index 3816b59..fab165e 100644
--- a/src/base_tab/BaseTab.cpp
+++ b/src/base_tab/BaseTab.cpp
@@ -1,6 +1,6 @@
#include "BaseTab.hpp"
-#include <wx/filename.h>
#include "AppendGameDialog.hpp"
+#include <wx/filename.h>
BaseTab::BaseTab(wxFrame *parent, std::string base_file)
: BasePanelBF(parent), base_file(base_file), TabInfos(TabInfos::BASE),
@@ -25,8 +25,11 @@ BaseTab::BaseTab(wxFrame *parent, std::string base_file)
}
void BaseTab::OnImport(wxCommandEvent &event) {
- AppendGameDialog *dia=new AppendGameDialog(this,base);
+ AppendGameDialog *dia = new AppendGameDialog(this, base);
dia->ShowModal();
+ game_list->DeleteAllItems();
+ deleted.clear();
+ LoadFile();
}
void BaseTab::OnDelete(wxCommandEvent &event) {
diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp
index 3be65d7..7a1a6a4 100644
--- a/src/base_tab/gamebase/PGNGameBase.cpp
+++ b/src/base_tab/gamebase/PGNGameBase.cpp
@@ -84,6 +84,20 @@ void PGNGameBase::Save(std::vector<std::uint32_t> to_ignore,
}
// Now add new games
+ for (GameBase *current : new_games_bases) {
+ current->Reset();
+ while (current->NextGame()) {
+ if (several) {
+ new_pgn.Write("\n\n");
+ } else {
+ several = true;
+ }
+ Game *g = current->GetCurrentGame();
+ new_pgn.Write(g->GetPGN());
+ delete g;
+ }
+ }
+
for (Game *g : new_games) {
if (several) {
new_pgn.Write("\n\n");
diff --git a/src/game_tab/Game.cpp b/src/game_tab/Game.cpp
index 48e48bf..e26efd7 100644
--- a/src/game_tab/Game.cpp
+++ b/src/game_tab/Game.cpp
@@ -1,13 +1,13 @@
#include "Game.hpp"
-Game::Game() : current(NULL), moves(NULL) {
+Game::Game() : current(NULL), moves(NULL), result("*") {
tags["White"] = "";
tags["Black"] = "";
initial_fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
board = "rnbqkbnrpppppppp PPPPPPPPRNBQKBNR";
}
-Game::Game(std::string fen) : current(NULL), moves(NULL) {
+Game::Game(std::string fen) : current(NULL), moves(NULL), result("*") {
tags["White"] = "";
tags["Black"] = "";
tags["FEN"] = fen;
@@ -15,7 +15,7 @@ Game::Game(std::string fen) : current(NULL), moves(NULL) {
board = chessarbiter::FENParser::Parse(fen).board;
}
-Game::Game(HalfMove *m, std::string initial_fen) {
+Game::Game(HalfMove *m, std::string initial_fen): result("*") {
moves = m;
current = m;
this->initial_fen = initial_fen;