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 new_games_bases; std::vector 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(tinfo->GetBase())); + } else if (tinfo->type == TabInfos::GAME) { + new_games.push_back(static_cast(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 #include "AppendGameDialog.hpp" +#include 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 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;