aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-02-24 15:22:56 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-02-24 15:22:56 +0100
commitf99a7b699a6169003fc8b56f652de44c2e834ca5 (patch)
treee31450089bc2b8e9abf0d69659e665628395a2aa /src
parent40c6df0e7c3f17204a6187eb2bc241f396720272 (diff)
Improve BaseTab pgn loading
Diffstat (limited to 'src')
-rw-r--r--src/base_tab/BasePanelBF.cpp2
-rw-r--r--src/base_tab/BaseTab.cpp48
-rw-r--r--src/base_tab/BaseTab.hpp5
-rw-r--r--src/base_tab/gamebase/GameBase.hpp5
-rw-r--r--src/base_tab/gamebase/PGNGameBase.cpp61
-rw-r--r--src/base_tab/gamebase/PGNGameBase.hpp14
6 files changed, 87 insertions, 48 deletions
diff --git a/src/base_tab/BasePanelBF.cpp b/src/base_tab/BasePanelBF.cpp
index 59dd152..e7a5dfb 100644
--- a/src/base_tab/BasePanelBF.cpp
+++ b/src/base_tab/BasePanelBF.cpp
@@ -33,7 +33,7 @@ BasePanelBF::BasePanelBF( wxWindow* parent, wxWindowID id, const wxPoint& pos, c
main_sizer->Add( top_sizer, 0, wxEXPAND, 5 );
- game_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxLC_ICON|wxLC_REPORT );
+ game_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxLC_REPORT );
main_sizer->Add( game_list, 1, wxALL|wxEXPAND, 5 );
wxBoxSizer* bottom_sizer;
diff --git a/src/base_tab/BaseTab.cpp b/src/base_tab/BaseTab.cpp
index 9be9274..f1fd107 100644
--- a/src/base_tab/BaseTab.cpp
+++ b/src/base_tab/BaseTab.cpp
@@ -4,19 +4,29 @@
BaseTab::BaseTab(wxFrame *parent)
: BasePanelBF(parent), TabInfos(TabInfos::BASE), base(NULL) {
- wxListItem col0;
- col0.SetId(0);
- col0.SetText(_("White"));
- col0.SetWidth(200);
- game_list->InsertColumn(0, col0);
-
- wxListItem col1;
- col1.SetId(1);
- col1.SetText(_("Black"));
- col1.SetWidth(200);
- game_list->InsertColumn(1, col1);
-
- //LoadFile("/home/loic/test.pgn");
+ game_list->InsertColumn(0, L"id", wxLIST_FORMAT_LEFT, 50);
+ game_list->InsertColumn(1, L"White", wxLIST_FORMAT_LEFT, 200);
+ game_list->InsertColumn(2, L"Black", wxLIST_FORMAT_LEFT, 200);
+ game_list->InsertColumn(3, L"Event", wxLIST_FORMAT_LEFT, 200);
+ game_list->InsertColumn(4, L"Round", wxLIST_FORMAT_LEFT, 100);
+ game_list->InsertColumn(5, L"Result", wxLIST_FORMAT_LEFT, 200);
+ game_list->InsertColumn(6, L"Result", wxLIST_FORMAT_LEFT, 200);
+
+ this->Bind(wxEVT_BUTTON, &BaseTab::OnBim, this, wxID_ANY);
+ this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseTab::OnOpenGame, this, wxID_ANY);
+}
+
+void BaseTab::OnBim(wxCommandEvent &event) {
+ //LoadFile("/home/loic/hartwig.pgn");
+}
+
+void BaseTab::OnOpenGame(wxListEvent &event) {
+ wxLogDebug("Open!");
+ long id=std::stoi(event.GetItem().GetText().ToStdString());
+ Game *g = base->GetGame(id);
+ if (g != NULL) {
+ wxLogDebug("Open game: %s", g->GetTag("White"));
+ }
}
void BaseTab::ApplyPreferences() {}
@@ -29,9 +39,15 @@ void BaseTab::LoadFile(std::string path) {
}
if (base != NULL) {
- while (base->HasNextGame()) {
- Game *g = base->GetNextGame();
- long itemIndex = game_list->InsertItem(0, g->GetTag("White")); // want this for col. 1
+ long id = 0;
+ while (base->NextGame()) {
+ long index = game_list->InsertItem(0, std::to_string(id)); // want this for col. 1
+ game_list->SetItem(index, 1, base->GetTag("White"));
+ game_list->SetItem(index, 2, base->GetTag("Black"));
+ game_list->SetItem(index, 3, base->GetTag("Event"));
+ game_list->SetItem(index, 4, base->GetTag("Round"));
+ game_list->SetItem(index, 5, base->GetTag("Result"));
+ id++;
}
}
} \ No newline at end of file
diff --git a/src/base_tab/BaseTab.hpp b/src/base_tab/BaseTab.hpp
index 30d839a..5a71cd7 100644
--- a/src/base_tab/BaseTab.hpp
+++ b/src/base_tab/BaseTab.hpp
@@ -1,13 +1,16 @@
-#include "ochess.hpp"
#include "BasePanelBF.h"
#include "gamebase/GameBase.hpp"
#include "gamebase/PGNGameBase.hpp"
+#include "ochess.hpp"
class BaseTab : public BasePanelBF, public TabInfos {
GameBase *base;
+
public:
BaseTab(wxFrame *parent);
void ApplyPreferences();
void LoadFile(std::string path);
+ void OnBim(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 9982a7d..828248c 100644
--- a/src/base_tab/gamebase/GameBase.hpp
+++ b/src/base_tab/gamebase/GameBase.hpp
@@ -4,7 +4,8 @@
class GameBase {
public:
- virtual bool HasNextGame() = 0;
virtual Game *GetGame(std::uint32_t id) = 0;
- virtual Game *GetNextGame() = 0;
+ virtual bool NextGame() = 0;
+ virtual std::string GetTag(std::string tag) = 0;
+ virtual void Reset() = 0;
}; \ No newline at end of file
diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp
index 39775d1..08c8803 100644
--- a/src/base_tab/gamebase/PGNGameBase.cpp
+++ b/src/base_tab/gamebase/PGNGameBase.cpp
@@ -1,35 +1,54 @@
#include "PGNGameBase.hpp"
-PGNGameBase::PGNGameBase(std::string pgn_file)
- : pgn(new pgnp::PGN()), hasNextGame(false) {
+PGNGameBase::PGNGameBase(std::string pgn_file) : pgn(new pgnp::PGN()) {
+ file = pgn_file;
pgn->FromFile(pgn_file);
- ParseNextGame();
}
-bool PGNGameBase::HasNextGame() { return (hasNextGame); }
-
-void PGNGameBase::ParseNextGame() {
+bool PGNGameBase::NextGame() {
+ bool game_found = false;
try {
pgn->ParseNextGame();
- hasNextGame = true;
+ game_found = true;
} catch (...) {
- hasNextGame = false;
+ game_found = false;
}
+ return (game_found);
}
-Game *PGNGameBase::GetNextGame() {
- pgnp::HalfMove *pgnp_moves = new pgnp::HalfMove();
- pgn->GetMoves(pgnp_moves);
- std::string fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
- if (pgn->HasTag("FEN")) {
- fen = pgn->GetTagValue("FEN");
- }
- HalfMove *m = new HalfMove(pgnp_moves, fen);
- Game *g = new Game(m, fen);
- for (std::string &s : pgn->GetTagList()) {
- g->SetTag(s, pgn->GetTagValue(s));
+std::string PGNGameBase::GetTag(std::string tag) {
+ if (pgn->HasTag(tag)) {
+ return (pgn->GetTagValue(tag));
}
+ return ("");
+}
- ParseNextGame();
- return (g);
+void PGNGameBase::Reset() {
+ delete pgn;
+ pgn = new pgnp::PGN();
+ pgn->FromFile(file);
+}
+
+Game *PGNGameBase::GetGame(std::uint32_t id) {
+ Reset();
+ std::uint32_t curid = 0;
+ while(NextGame()) {
+ if (id == curid) {
+ pgnp::HalfMove *pgnp_moves = new pgnp::HalfMove();
+ pgn->GetMoves(pgnp_moves);
+ std::string fen =
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
+ if (pgn->HasTag("FEN")) {
+ fen = pgn->GetTagValue("FEN");
+ }
+ HalfMove *m = new HalfMove(pgnp_moves, fen);
+ Game *g = new Game(m, fen);
+ for (std::string &s : pgn->GetTagList()) {
+ g->SetTag(s, pgn->GetTagValue(s));
+ }
+ return (g);
+ }
+ curid++;
+ }
+ return (NULL);
}
diff --git a/src/base_tab/gamebase/PGNGameBase.hpp b/src/base_tab/gamebase/PGNGameBase.hpp
index b58bdca..1ad58a1 100644
--- a/src/base_tab/gamebase/PGNGameBase.hpp
+++ b/src/base_tab/gamebase/PGNGameBase.hpp
@@ -2,14 +2,14 @@
#include "pgnp.hpp"
class PGNGameBase : public GameBase {
- pgnp::PGN *pgn;
- bool hasNextGame;
+ pgnp::PGN *pgn;
+ bool hasNextGame;
+ std::string file;
- void ParseNextGame();
public:
PGNGameBase(std::string pgn_file);
-
- bool HasNextGame();
- Game *GetGame(std::uint32_t id) { return (new Game()); };
- Game *GetNextGame();
+ Game *GetGame(std::uint32_t id);
+ bool NextGame();
+ std::string GetTag(std::string tag);
+ void Reset();
}; \ No newline at end of file