#include "BaseTab.hpp" #include "AppendGameDialog.hpp" #include BaseTab::BaseTab(wxFrame *parent, std::string base_file) : TabBase(parent), TabInfos(TabInfos::BASE), base_file(base_file){ // First open the database OpenDatabase(base_file); // Games tab games_tab=new BaseGameTab((wxFrame *)notebook,base,this); notebook->AddPage(games_tab, "Games list",true); // true for selecting the tab // Import tab import_tab=new BaseImportTab((wxFrame *)notebook,this); notebook->AddPage(import_tab, "Import games"); // Manage tab manage_tab=new BaseManageTab((wxFrame *)notebook, base, games_tab->glm); notebook->AddPage(manage_tab, "Manage database"); // Refresh dynamic elements of the database (tab title, available db for import etc.) Refresh(); // Bindings this->Bind(OPEN_GAME_EVENT, &BaseTab::OnOpenGame, this, wxID_ANY); this->Bind(wxEVT_BUTTON, &BaseTab::OnSave, this, ID_SAVE_BUTTON); } void BaseTab::OnOpenGame(wxCommandEvent &event){ std::shared_ptr *g = (std::shared_ptr*)event.GetClientData(); this->game=*g; // Ask MainFrame to open a new game // TODO: Simplify that is, use wxWidget main app to do it wxCommandEvent newGameEvent(NEW_GAME_EVENT, GetId()); newGameEvent.SetEventObject(this); newGameEvent.SetClientData((TabInfos*)this); ProcessEvent(newGameEvent); } void BaseTab::Refresh(){ import_tab->RefreshImportLists(); SetLabel(wxFileName(base->GetFilePath()).GetName()+" [DB]"); // Propagated to MainWindow tab title automatically by wxWidget } void BaseTab::OpenDatabase(std::string dbpath) { wxFileName file(dbpath); wxString ext = file.GetExt().Lower(); if (ext == "pgn") { base.reset(); base = std::shared_ptr(new PGNGameBase(dbpath)); } } void BaseTab::OnSave(wxCommandEvent &event) { std::vector> dummy_empty_base; base->Save(games_tab->GetDeletedGameIds(), dummy_empty_base, games_tab->GetEditedGames()); // Close all opened games in this database wxCommandEvent closeLinkedTabEvent(CLOSE_LINKED_TAB, GetId()); closeLinkedTabEvent.SetClientData((TabInfos*)this); ProcessEvent(closeLinkedTabEvent); // Reopen the saved database OpenDatabase(base_file); games_tab->Reset(base); manage_tab->Reset(base); }