ochess/src/base_tab/BaseGameTab.cpp

144 lines
4.1 KiB
C++
Raw Normal View History

2022-12-23 16:49:33 +01:00
#include "BaseGameTab.hpp"
#include <wx/filename.h>
2022-12-24 12:46:59 +01:00
wxDEFINE_EVENT(OPEN_GAME_EVENT, wxCommandEvent);
2022-12-26 12:51:48 +01:00
BaseGameTab::BaseGameTab(wxFrame *parent, std::shared_ptr<GameBase> base, TabInfos *main_tab)
: TabBase_TabGames(parent), main_tab(main_tab),base(base) {
glm=std::make_shared<GameListManager>(game_list);
Reset(base);
2022-12-23 16:49:33 +01:00
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnDelete, this, ID_DELETE_BUTTON);
this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseGameTab::OnOpenGame, this, wxID_ANY);
2022-12-25 18:30:56 +01:00
this->Bind(wxEVT_BUTTON, &BaseGameTab::OnApplyFilter, this, ID_APPLY_FILTER_BUTTON);
this->Bind(wxEVT_TEXT_ENTER, &BaseGameTab::OnApplyFilter, this, ID_SEARCH_TERMS);
2022-12-23 16:49:33 +01:00
2022-12-25 17:58:28 +01:00
search_terms->SetHint("e.g: Paul Morphy");
2022-12-23 16:49:33 +01:00
}
2022-12-25 18:30:56 +01:00
void BaseGameTab::OnApplyFilter(wxCommandEvent &event){
wxString terms=search_terms->GetValue();
if(terms.length()>0){
glm->Filter(terms.ToStdString());
} else {
glm->ClearFilter();
}
}
2022-12-23 16:49:33 +01:00
void BaseGameTab::OnImport(wxCommandEvent &event) {
2022-12-26 12:51:48 +01:00
// AppendGameDialog *dia = new AppendGameDialog(this, base);
// dia->ShowModal();
// glm->Clear();
// deleted.clear();
// edited.clear();
// LoadFile();
2022-12-23 16:49:33 +01:00
}
void BaseGameTab::OnDelete(wxCommandEvent &event) {
2022-12-25 17:30:22 +01:00
for(auto i: glm->GetSelectedItems()){
deleted.push_back(glm->GetItemGameId(i));
glm->MarkItemAsDeleted(i);
2022-12-23 16:49:33 +01:00
}
}
void BaseGameTab::OnSave(wxCommandEvent &event) {
2022-12-26 12:51:48 +01:00
// std::vector<std::shared_ptr<GameBase>> new_games_bases;
// // Build edited games vector
// std::vector<std::shared_ptr<Game>> edited_games;
// for (auto itr = edited.begin(); itr != edited.end(); itr++) {
// edited_games.push_back(itr->second);
// }
// // Combine new_games and edited games
// std::vector<std::shared_ptr<Game>> new_games;
// new_games.insert(
// new_games.end(), edited_games.begin(),
// edited_games.end()); // Add edited game (since they are also deleted)
// base->Save(deleted, new_games_bases, new_games);
2022-12-24 22:30:20 +01:00
2022-12-26 12:51:48 +01:00
// // Close all opened games in this database
// wxCommandEvent closeLinkedTabEvent(CLOSE_LINKED_TAB, GetId());
// closeLinkedTabEvent.SetClientData(main_tab);
// ProcessEvent(closeLinkedTabEvent);
// glm->Clear();
// edited.clear();
// deleted.clear();
// LoadFile();
2022-12-23 16:49:33 +01:00
}
void BaseGameTab::OnOpenGame(wxListEvent &event) {
long id = std::stoi(event.GetItem().GetText().ToStdString());
std::shared_ptr<Game> *g = new std::shared_ptr<Game>(base->GetGame(id));
2022-12-26 12:51:48 +01:00
wxLogDebug("kjkj");
2022-12-23 16:49:33 +01:00
if (g != NULL) {
2022-12-25 09:57:34 +01:00
if(edited.find(id) != edited.end()){
// TODO: Focus on the game tab and if close reopen it
wxLogDebug("Already opened!");
}
else {
wxLogDebug("Open game");
edited[id]=*g;
deleted.push_back(id);
2022-12-25 17:30:22 +01:00
glm->MarkItemAsOpen(event.GetIndex());
2022-12-25 09:57:34 +01:00
wxCommandEvent openGameEvent(OPEN_GAME_EVENT, GetId());
openGameEvent.SetEventObject(this);
openGameEvent.SetClientData(g);
ProcessEvent(openGameEvent);
}
2022-12-23 16:49:33 +01:00
}
}
2022-12-26 12:51:48 +01:00
std::vector<std::shared_ptr<Game>> BaseGameTab::GetEditedGames(){
std::vector<std::shared_ptr<Game>> games;
for(auto it = edited.begin(); it != edited.end(); it++){
games.push_back(it->second);
2022-12-23 16:49:33 +01:00
}
2022-12-26 12:51:48 +01:00
return(games);
2022-12-23 16:49:33 +01:00
}
2022-12-26 12:51:48 +01:00
void BaseGameTab::Reset(std::shared_ptr<GameBase> base){
glm->Clear();
edited.clear();
deleted.clear();
2022-12-23 16:49:33 +01:00
2022-12-26 12:51:48 +01:00
// Load all games (for now :)
2022-12-26 16:46:05 +01:00
SHOW_DIALOG_BUSY("Loading database...");
2022-12-26 12:51:48 +01:00
this->base=base;
2022-12-23 16:49:33 +01:00
if (base != NULL) {
while (base->NextGame()) {
2022-12-25 15:26:16 +01:00
glm->AddGame(
base->GetTag("White"),
base->GetTag("Black"),
base->GetTag("Event"),
base->GetTag("Round"),
base->GetTag("Result"),
base->GetTag("ECO"));
2022-12-23 16:49:33 +01:00
}
}
2022-12-26 12:51:48 +01:00
}
2022-12-23 16:49:33 +01:00
2022-12-26 12:51:48 +01:00
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;
// }
// }
2022-12-23 16:49:33 +01:00
}
2022-12-26 12:51:48 +01:00