#include "BaseGameTab.hpp" #include "AppendGameDialog.hpp" #include BaseGameTab::BaseGameTab(wxFrame *parent, std::string base_file) : TabBase_TabGames(parent), base_file(base_file), base(NULL) { 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, 150); 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"ECO", wxLIST_FORMAT_LEFT, 200); this->Bind(wxEVT_BUTTON, &BaseGameTab::OnDelete, this, ID_DELETE_BUTTON); this->Bind(wxEVT_BUTTON, &BaseGameTab::OnSave, this, ID_SAVE_BUTTON); this->Bind(wxEVT_BUTTON, &BaseGameTab::OnExport, this, ID_EXPORT_BUTTON); this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseGameTab::OnOpenGame, this, wxID_ANY); this->Bind(wxEVT_BUTTON, &BaseGameTab::OnImport, this, ID_IMPORT_BUTTON); current_base->SetLabel(base_file); LoadFile(); } void BaseGameTab::OnImport(wxCommandEvent &event) { AppendGameDialog *dia = new AppendGameDialog(this, base); dia->ShowModal(); game_list->DeleteAllItems(); deleted.clear(); edited.clear(); LoadFile(); } void BaseGameTab::OnDelete(wxCommandEvent &event) { long selected = -1; while ((selected = game_list->GetNextItem(selected, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)) != wxNOT_FOUND) { wxListItem listItem; listItem.m_itemId = selected; // sets row listItem.m_col = 0; // sets column game_list->GetItem(listItem); // gets item deleted.push_back(std::stoi(listItem.GetText().ToStdString())); for (std::uint32_t &i : deleted) { wxLogDebug("%d", i); } game_list->SetItemBackgroundColour(selected, *wxRED); } } void BaseGameTab::OnSave(wxCommandEvent &event) { std::vector> new_games_bases; std::vector> new_games; new_games.insert( new_games.end(), edited.begin(), edited.end()); // Add edited game (since they are also deleted) base->Save(deleted, new_games_bases, new_games); game_list->DeleteAllItems(); edited.clear(); deleted.clear(); LoadFile(); } void BaseGameTab::OnOpenGame(wxListEvent &event) { wxLogDebug("Open!"); long id = std::stoi(event.GetItem().GetText().ToStdString()); std::shared_ptr *g = new std::shared_ptr(base->GetGame(id)); if (g != NULL) { edited.push_back(*g); deleted.push_back(id); game_list->SetItemBackgroundColour(event.GetIndex(), *wxGREEN); wxCommandEvent newGameEvent(NEW_GAME_EVENT, GetId()); newGameEvent.SetEventObject(this); newGameEvent.SetClientData(g); ProcessEvent(newGameEvent); } } void BaseGameTab::ApplyPreferences() {} void BaseGameTab::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->Export(this->base); delete base; } } } void BaseGameTab::LoadFile() { wxFileName file(base_file); wxString ext = file.GetExt().Lower(); if (ext == "pgn") { base = std::shared_ptr(new PGNGameBase(base_file)); SetLabel(file.GetName() + "(PGN)"); } if (base != NULL) { 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")); game_list->SetItem(index, 6, base->GetTag("ECO")); id++; } } wxCommandEvent event(REFRESH_TAB_TITLE, GetId()); event.SetEventObject(this); ProcessEvent(event); }