mirror of
https://gitlab.com/manzerbredes/ochess.git
synced 2025-04-07 02:26:29 +02:00
70 lines
No EOL
2.2 KiB
C++
70 lines
No EOL
2.2 KiB
C++
#include "BaseTab.hpp"
|
|
#include "AppendGameDialog.hpp"
|
|
#include <wx/filename.h>
|
|
|
|
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<Game> *g = (std::shared_ptr<Game>*)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<GameBase>(new PGNGameBase(dbpath));
|
|
}
|
|
}
|
|
|
|
void BaseTab::OnSave(wxCommandEvent &event) {
|
|
std::vector<std::shared_ptr<GameBase>> 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);
|
|
} |