aboutsummaryrefslogtreecommitdiff
path: root/src/base_tab/BaseGameTab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/base_tab/BaseGameTab.cpp')
-rw-r--r--src/base_tab/BaseGameTab.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/base_tab/BaseGameTab.cpp b/src/base_tab/BaseGameTab.cpp
index dafa71a..ae652cc 100644
--- a/src/base_tab/BaseGameTab.cpp
+++ b/src/base_tab/BaseGameTab.cpp
@@ -5,9 +5,9 @@
wxDEFINE_EVENT(OPEN_GAME_EVENT, wxCommandEvent);
-BaseGameTab::BaseGameTab(wxFrame *parent, std::string base_file)
+BaseGameTab::BaseGameTab(wxFrame *parent, std::string base_file, TabInfos *main_tab)
: TabBase_TabGames(parent), base_file(base_file),
- base(NULL) {
+ base(NULL),main_tab(main_tab) {
game_list->InsertColumn(0, L"id", wxLIST_FORMAT_LEFT, 50);
game_list->InsertColumn(1, L"White", wxLIST_FORMAT_LEFT, 200);
@@ -56,11 +56,25 @@ void BaseGameTab::OnDelete(wxCommandEvent &event) {
void BaseGameTab::OnSave(wxCommandEvent &event) {
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.begin(),
- edited.end()); // Add edited game (since they are also deleted)
+ 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);
+
+ // CLose all opened games in this database
+ wxCommandEvent closeLinkedTabEvent(CLOSE_LINKED_TAB, GetId());
+ closeLinkedTabEvent.SetClientData(main_tab);
+ ProcessEvent(closeLinkedTabEvent);
+
game_list->DeleteAllItems();
edited.clear();
deleted.clear();
@@ -72,7 +86,7 @@ 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));
if (g != NULL) {
- edited.push_back(*g);
+ edited[id]=*g;
deleted.push_back(id);
game_list->SetItemBackgroundColour(event.GetIndex(), *wxGREEN);
wxCommandEvent openGameEvent(OPEN_GAME_EVENT, GetId());