#include "BoardPanel.hpp" #include BoardPanel::BoardPanel(wxFrame *parent, Game *game) : wxPanel(parent), game(game) { wxBoxSizer *board_panel_sizer = new wxBoxSizer(wxVERTICAL); board_canvas = new BoardCanvas((wxFrame *)this); board_panel_sizer->Add(board_canvas, 1, wxEXPAND); // Left Panel buttons wxBoxSizer *board_panel_button_sizer = new wxBoxSizer(wxHORIZONTAL); board_panel_button_sizer->Add( new wxBitmapButton(this, SWAP_BTN, LoadPNG("swap")), 0); board_panel_button_sizer->Add( new wxBitmapButton(this, ZOOM_IN_BTN, LoadPNG("zoomin")), 0); board_panel_button_sizer->Add( new wxBitmapButton(this, ZOOM_OUT_BTN, LoadPNG("zoomout")), 0); board_panel_button_sizer->Add(new wxButton(this, COPY_FEN_BTN, L"Copy FEN"), 0, wxEXPAND); board_panel_sizer->Add(board_panel_button_sizer, 0); this->SetSizer(board_panel_sizer); Bind(PLAY_MOVE_EVENT, &BoardPanel::OnPlay, this, wxID_ANY); Bind(PREVIOUS_MOVE_EVENT, &BoardPanel::OnPreviousMove, this, wxID_ANY); Bind(NEXT_MOVE_EVENT, &BoardPanel::OnNextMove, this, wxID_ANY); Bind(wxEVT_BUTTON, &BoardPanel::OnSwap, this, SWAP_BTN); Bind(wxEVT_BUTTON, &BoardPanel::OnZoomIn, this, ZOOM_IN_BTN); Bind(wxEVT_BUTTON, &BoardPanel::OnZoomOut, this, ZOOM_OUT_BTN); Bind(wxEVT_BUTTON, &BoardPanel::OnCopyFEN, this, COPY_FEN_BTN); } void BoardPanel::OnPreviousMove(wxCommandEvent &event) { game->Previous(); Notify(); NotifyEditor(); } void BoardPanel::OnZoomIn(wxCommandEvent &event) { wxLogDebug("Clicked on zoom in"); board_canvas->Zoom(10); } void BoardPanel::OnZoomOut(wxCommandEvent &event) { wxLogDebug("Clicked on zoom out"); board_canvas->Zoom(-10); } void BoardPanel::OnSwap(wxCommandEvent &event) { wxLogDebug("Clicked on swap"); board_canvas->Swap(); } void BoardPanel::OnNextMove(wxCommandEvent &event) { wxLogDebug("Game tab received NEXT_MOVE_EVENT"); game->Next(); Notify(); NotifyEditor(); } void BoardPanel::OnPlay(wxCommandEvent &event) { wxLogDebug("Game tab received PLAY_MOVE_EVENT"); if (game->Play(event.GetString().ToStdString())) { NotifyEditor(); } Notify(); } void BoardPanel::OnCopyFEN(wxCommandEvent &event) { wxLogDebug("Clicked on copy fen"); if (wxTheClipboard->Open()) { wxTheClipboard->SetData(new wxTextDataObject(game->GetFen())); wxTheClipboard->Close(); } } void BoardPanel::Notify() { std::string fen = game->GetFen(); std::map captures; HalfMove *m = game->GetCurrentMove(); if (m != NULL) { captures = m->GetLineCaptures(); } board_canvas->SetupBoard(chessarbiter::FENParser::Parse(fen).board, game->IsBlackToPlay(), captures); } void BoardPanel::NotifyEditor() { wxCommandEvent previousEvent(GAME_CHANGE, GetId()); previousEvent.SetEventObject(this); ProcessEvent(previousEvent); } void BoardPanel::ApplyPreferences() { board_canvas->ApplyPreferences(); }