mirror of
https://gitlab.com/manzerbredes/ochess.git
synced 2025-04-07 02:26:29 +02:00
98 lines
2.9 KiB
C++
98 lines
2.9 KiB
C++
#include "GameTab.hpp"
|
|
#include <wx/clipbrd.h>
|
|
|
|
wxDEFINE_EVENT(GAME_CHANGE, wxCommandEvent);
|
|
|
|
GameTab::GameTab(wxFrame *parent, std::shared_ptr<Game> game)
|
|
: wxPanel(parent), game(game), TabInfos(TabInfos::GAME) {
|
|
// Splitter
|
|
wxSplitterWindow *splitter = new wxSplitterWindow(this, wxID_ANY);
|
|
splitter->SetSashGravity(0.8);
|
|
// Panels
|
|
game->BuildAndVerify();
|
|
board_panel = new GameTabLeftPanel((wxFrame *)splitter, game);
|
|
editor_panel = new GameTabRightPanel((wxFrame *)splitter, game);
|
|
splitter->SplitVertically(board_panel, editor_panel);
|
|
|
|
// Setup splitter
|
|
wxBoxSizer *topSizer = new wxBoxSizer(wxHORIZONTAL);
|
|
topSizer->Add(splitter, 1, wxEXPAND);
|
|
SetSizerAndFit(topSizer);
|
|
|
|
// Refresh panels
|
|
wxCommandEvent event(REFRESH_TAB_TITLE, GetId());
|
|
event.SetEventObject(this);
|
|
OnRefreshTabTitle(event);
|
|
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){
|
|
if(e.GetKeyCode() == WXK_RIGHT){
|
|
bp->NextMove(true);
|
|
} else if(e.GetKeyCode() == WXK_LEFT){
|
|
bp->PreviousMove(true);
|
|
}
|
|
ed->Notify();
|
|
});
|
|
splitter->Bind(wxEVT_KEY_UP, [p=this,bp=board_panel,ed=editor_panel](wxKeyEvent &e){
|
|
if(e.GetKeyCode() == WXK_RIGHT){
|
|
bp->NextMove(false);
|
|
} else if(e.GetKeyCode() == WXK_LEFT){
|
|
bp->PreviousMove(false);
|
|
}
|
|
ed->Notify();
|
|
});
|
|
Bind(wxEVT_MOUSEWHEEL, [p=this,bp=board_panel,ed=editor_panel](wxMouseEvent& event){
|
|
if(event.GetWheelRotation()<0){
|
|
bp->NextMove(true);
|
|
}else {
|
|
bp->PreviousMove(true);
|
|
}
|
|
ed->Notify();
|
|
});
|
|
|
|
}
|
|
|
|
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);
|
|
} else if(id==1){
|
|
Game *g=new Game(&(*game));
|
|
wxGetApp().NewGame(std::shared_ptr<Game>(g));
|
|
}
|
|
}
|
|
|
|
void GameTab::OnGameChange(wxCommandEvent &event) {
|
|
board_panel->Notify(false,false);
|
|
editor_panel->Notify();
|
|
}
|
|
|
|
void GameTab::OnRefreshTabTitle(wxCommandEvent &event) {
|
|
std::string white = game->GetTag("White");
|
|
std::string black = game->GetTag("Black");
|
|
if (white.size() == 0 && black.size() == 0) {
|
|
SetLabel("New Game");
|
|
} else {
|
|
SetLabel(white + "-" + black);
|
|
}
|
|
event.SetEventObject(this);
|
|
event.Skip();
|
|
}
|
|
|
|
void GameTab::ApplyPreferences() {
|
|
board_panel->ApplyPreferences();
|
|
editor_panel->ApplyPreferences();
|
|
}
|