mirror of
https://gitlab.com/manzerbredes/ochess.git
synced 2025-05-03 10:17:46 +00:00
Improve db tab
This commit is contained in:
parent
42ca3ee005
commit
c49b48df01
9 changed files with 711 additions and 150 deletions
src/base_tab
|
@ -3,125 +3,21 @@
|
|||
#include <wx/filename.h>
|
||||
|
||||
BaseTab::BaseTab(wxFrame *parent, std::string base_file)
|
||||
: TabBase_TabGames(parent), base_file(base_file), TabInfos(TabInfos::BASE),
|
||||
base(NULL) {
|
||||
: TabBase(parent), TabInfos(TabInfos::BASE){
|
||||
|
||||
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);
|
||||
// Games tab
|
||||
games_tab=new BaseGameTab((wxFrame *)notebook,base_file);
|
||||
notebook->AddPage(games_tab, "Games",true); // true for selecting the tab
|
||||
|
||||
this->Bind(wxEVT_BUTTON, &BaseTab::OnDelete, this, ID_DELETE_BUTTON);
|
||||
this->Bind(wxEVT_BUTTON, &BaseTab::OnSave, this, ID_SAVE_BUTTON);
|
||||
this->Bind(wxEVT_BUTTON, &BaseTab::OnExport, this, ID_EXPORT_BUTTON);
|
||||
this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseTab::OnOpenGame, this, wxID_ANY);
|
||||
this->Bind(wxEVT_BUTTON, &BaseTab::OnImport, this, ID_IMPORT_BUTTON);
|
||||
// Import tab
|
||||
import_tab=new BaseImportTab((wxFrame *)notebook);
|
||||
notebook->AddPage(import_tab, "Import");
|
||||
|
||||
current_base->SetLabel(base_file);
|
||||
LoadFile();
|
||||
}
|
||||
|
||||
void BaseTab::OnImport(wxCommandEvent &event) {
|
||||
AppendGameDialog *dia = new AppendGameDialog(this, base);
|
||||
dia->ShowModal();
|
||||
game_list->DeleteAllItems();
|
||||
deleted.clear();
|
||||
edited.clear();
|
||||
LoadFile();
|
||||
}
|
||||
|
||||
void BaseTab::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 BaseTab::OnSave(wxCommandEvent &event) {
|
||||
std::vector<std::shared_ptr<GameBase>> new_games_bases;
|
||||
std::vector<std::shared_ptr<Game>> 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 BaseTab::OnOpenGame(wxListEvent &event) {
|
||||
wxLogDebug("Open!");
|
||||
long id = std::stoi(event.GetItem().GetText().ToStdString());
|
||||
std::shared_ptr<Game> *g = new std::shared_ptr<Game>(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);
|
||||
}
|
||||
RefreshLabel();
|
||||
}
|
||||
|
||||
void BaseTab::ApplyPreferences() {}
|
||||
|
||||
void BaseTab::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 BaseTab::LoadFile() {
|
||||
wxFileName file(base_file);
|
||||
wxString ext = file.GetExt().Lower();
|
||||
if (ext == "pgn") {
|
||||
base = std::shared_ptr<GameBase>(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);
|
||||
}
|
||||
void BaseTab::RefreshLabel(){
|
||||
SetLabel("Database XX");
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue