diff --git a/src/game_tab/GameTab.cpp b/src/game_tab/GameTab.cpp index 27f7638..a9a12da 100644 --- a/src/game_tab/GameTab.cpp +++ b/src/game_tab/GameTab.cpp @@ -26,6 +26,7 @@ GameTab::GameTab(wxFrame *parent, std::shared_ptr game) board_panel->Notify(false, false); editor_panel->Notify(); + board_panel->Bind(wxEVT_TOOL,&GameTab::OnToolClick,this); Bind(REFRESH_TAB_TITLE, &GameTab::OnRefreshTabTitle, this, wxID_ANY); Bind(GAME_CHANGE, &GameTab::OnGameChange, this, wxID_ANY); splitter->Bind(wxEVT_KEY_DOWN, [p=this,bp=board_panel,ed=editor_panel](wxKeyEvent &e){ @@ -46,6 +47,22 @@ GameTab::GameTab(wxFrame *parent, std::shared_ptr game) }); } +void GameTab::OnToolClick(wxCommandEvent &event){ + short id=event.GetId(); + if(id==0){ + if(!related_file.size()>0){ + wxFileDialog + newFileDialog(this, _("Save Game"), "", "", + "PGN files (*.pgn)|*.pgn", wxFD_SAVE|wxFD_OVERWRITE_PROMPT); + if (newFileDialog.ShowModal() == wxID_CANCEL) + return; + // Create and open new db + related_file = newFileDialog.GetPath().ToStdString(); + } + SaveGame(related_file,game); + } +} + void GameTab::OnGameChange(wxCommandEvent &event) { board_panel->Notify(false,false); editor_panel->Notify(); diff --git a/src/game_tab/GameTab.hpp b/src/game_tab/GameTab.hpp index 9eb08c1..f951ae7 100644 --- a/src/game_tab/GameTab.hpp +++ b/src/game_tab/GameTab.hpp @@ -17,6 +17,7 @@ class GameTab : public wxPanel, public TabInfos { GameTabRightPanel *editor_panel; GameTabLeftPanel *board_panel; std::shared_ptr game; + std::string related_file; void RefreshLabel(); void OnRefreshTabTitle(wxCommandEvent &event); @@ -27,4 +28,6 @@ public: void ApplyPreferences(); std::shared_ptr GetGame() { return (std::shared_ptr(game)); } std::shared_ptr GetBase() { return (std::shared_ptr(NULL)); }; + void OnToolClick(wxCommandEvent &event); + void OnLink(){board_panel->DisableSaveTool();}; }; diff --git a/src/game_tab/left_panel/GameTabLeftPanel.cpp b/src/game_tab/left_panel/GameTabLeftPanel.cpp index 4f09bdd..33383fd 100644 --- a/src/game_tab/left_panel/GameTabLeftPanel.cpp +++ b/src/game_tab/left_panel/GameTabLeftPanel.cpp @@ -5,7 +5,7 @@ GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, std::shared_ptr game) : TabGameLeftPanel(parent), game(game), repeat(false) { // Configure toolbal - game_toolbar->AddTool(0, wxT("Exit application"), + game_toolbar->AddTool(0, wxT("Save As"), wxArtProvider::GetBitmap(wxART_FILE_SAVE, wxART_TOOLBAR)); // Add board @@ -26,24 +26,9 @@ GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, std::shared_ptr game) Bind(wxEVT_BUTTON, &GameTabLeftPanel::OnZoomOut, this, ZOOM_OUT_BTN); Bind(wxEVT_KEY_DOWN, [p=this](wxKeyEvent &e){e.ResumePropagation(1);e.Skip();}); Bind(wxEVT_KEY_UP, [p=this](wxKeyEvent &e){e.ResumePropagation(1);e.Skip();}); - game_toolbar->Bind(wxEVT_TOOL,&GameTabLeftPanel::OnToolClick,this); } -void GameTabLeftPanel::OnToolClick(wxCommandEvent &event){ - short id=event.GetId(); - if(id==0){ - if(!related_file.size()>0){ - wxFileDialog - newFileDialog(this, _("Save Game"), "", "", - "PGN files (*.pgn)|*.pgn", wxFD_SAVE|wxFD_OVERWRITE_PROMPT); - if (newFileDialog.ShowModal() == wxID_CANCEL) - return; - // Create and open new db - related_file = newFileDialog.GetPath().ToStdString(); - } - SaveGame(related_file,game); - } -} + void GameTabLeftPanel::PreviousMove(bool isKeyDown) { if(isKeyDown){ diff --git a/src/game_tab/left_panel/GameTabLeftPanel.hpp b/src/game_tab/left_panel/GameTabLeftPanel.hpp index d9995e4..3adbaee 100644 --- a/src/game_tab/left_panel/GameTabLeftPanel.hpp +++ b/src/game_tab/left_panel/GameTabLeftPanel.hpp @@ -15,7 +15,6 @@ class GameTabLeftPanel : public TabGameLeftPanel { void NotifyEditor(); std::string last_absolute_move; bool repeat; - std::string related_file; public: GameTabLeftPanel(wxFrame *parent, std::shared_ptr game); @@ -29,5 +28,5 @@ public: void OnSwap(wxCommandEvent &event); void OnRefreshBoard(wxCommandEvent &event); void ApplyPreferences(); - void OnToolClick(wxCommandEvent &event); + void DisableSaveTool(){game_toolbar->EnableTool(0,false);}; }; \ No newline at end of file diff --git a/src/ochess.cpp b/src/ochess.cpp index e9dd94f..605c1a2 100644 --- a/src/ochess.cpp +++ b/src/ochess.cpp @@ -39,4 +39,5 @@ long TabInfos::tab_count=0; void TabInfos::Link(TabInfos *tab){ this->is_linked=true; this->linked_id=tab->id; + this->OnLink(); } \ No newline at end of file diff --git a/src/ochess.hpp b/src/ochess.hpp index 745aa20..ca97d20 100644 --- a/src/ochess.hpp +++ b/src/ochess.hpp @@ -56,6 +56,8 @@ public: TabInfos(Type type_) : type(type_), id(tab_count), is_linked(false) { tab_count++; } void Link(TabInfos *tab); virtual void Refresh(){}; + /// @brief Call when tab is linked to another one + virtual void OnLink(){}; virtual void ApplyPreferences() {}; virtual std::shared_ptr GetGame() = 0; virtual std::shared_ptr GetBase() = 0;