aboutsummaryrefslogtreecommitdiff
path: root/src/game_tab/right_panel
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2023-01-02 12:02:11 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2023-01-02 12:02:11 +0100
commite40f98ccda04da3bb9811b354b770fb8c6b563e5 (patch)
tree3b0258e0cb3eca9f979d79d71da938fa7efb4bc8 /src/game_tab/right_panel
parentd05093513ec5124feed0dc6140789f48218b45c9 (diff)
parent042f6ca17012414d13235d3e04ea9012ff49f79c (diff)
Improve game tab
Diffstat (limited to 'src/game_tab/right_panel')
-rw-r--r--src/game_tab/right_panel/GameTabRightPanel.cpp61
-rw-r--r--src/game_tab/right_panel/GameTabRightPanel.hpp9
-rw-r--r--src/game_tab/right_panel/editor/EditorCanvas.cpp53
-rw-r--r--src/game_tab/right_panel/editor/EditorCanvas.hpp13
4 files changed, 31 insertions, 105 deletions
diff --git a/src/game_tab/right_panel/GameTabRightPanel.cpp b/src/game_tab/right_panel/GameTabRightPanel.cpp
index c88202b..dd0ebca 100644
--- a/src/game_tab/right_panel/GameTabRightPanel.cpp
+++ b/src/game_tab/right_panel/GameTabRightPanel.cpp
@@ -10,7 +10,7 @@ wxDEFINE_EVENT(NEXT_MOVE_EVENT, wxCommandEvent);
GameTabRightPanel::GameTabRightPanel(wxFrame *parent, std::shared_ptr<Game> game)
: TabGameRightPanel(parent), game(game), selected_item(-1),
live_engine(nullptr) {
- editor_canvas = new EditorCanvas((wxFrame *)editor_page);
+ editor_canvas = new EditorCanvas((wxFrame *)editor_page,game);
editor_canvas_sizer->Add(editor_canvas, 1, wxEXPAND);
tags_list->InsertColumn(0, L"Name", wxLIST_FORMAT_LEFT, 200);
tags_list->InsertColumn(1, L"Value", wxLIST_FORMAT_LEFT, 500);
@@ -22,16 +22,6 @@ GameTabRightPanel::GameTabRightPanel(wxFrame *parent, std::shared_ptr<Game> game
// Bind events
this->Bind(wxEVT_TEXT, &GameTabRightPanel::OnCommentChange, this,
COMMENT_INPUT_BOX);
- this->Bind(GOTO_MOVE_EVENT, &GameTabRightPanel::OnGotoMove, this, wxID_ANY);
- this->Bind(DELETE_MOVE_EVENT, &GameTabRightPanel::OnMoveDelete, this,
- wxID_ANY);
- this->Bind(PROMOTE_MOVE_EVENT, &GameTabRightPanel::OnMovePromote, this,
- wxID_ANY);
- this->Bind(SET_AS_MAINLINE_EVENT, &GameTabRightPanel::OnMoveSetAsMainline,
- this, wxID_ANY);
- /*this->Bind(NEXT_MOVE_EVENT, &GameTabRightPanel::OnNextMove, this, wxID_ANY);
- this->Bind(PREVIOUS_MOVE_EVENT, &GameTabRightPanel::OnPreviousMove, this,
- wxID_ANY);*/
this->Bind(wxEVT_LIST_ITEM_SELECTED, &GameTabRightPanel::OnTagSelected, this,
wxID_ANY);
this->Bind(wxEVT_LIST_ITEM_DESELECTED, &GameTabRightPanel::OnTagDeselected,
@@ -90,12 +80,6 @@ void GameTabRightPanel::OnTagDeselected(wxListEvent &event) {
delete_button->Enable(false);
}
-void GameTabRightPanel::NotifyBoard() {
- wxCommandEvent previousEvent(GAME_CHANGE, GetId());
- previousEvent.SetEventObject(this);
- ProcessEvent(previousEvent);
-}
-
void GameTabRightPanel::OnLiveEngineClose(wxCloseEvent &e) {
live_engine = nullptr;
e.Skip();
@@ -105,7 +89,12 @@ void GameTabRightPanel::OnCommentChange(wxCommandEvent &event) {
wxLogDebug("GameTabRightPanel: comment input change");
HalfMove *m = game->GetCurrentMove();
if (m != nullptr) {
- m->comment=event.GetString().ToStdString();
+ m->comment=event.GetString().Trim().ToStdString();
+ // Remove newlines:
+ for(char &c:m->comment){
+ if(c=='\n')
+ c=' ';
+ }
}
editor_canvas->Refresh();
}
@@ -143,29 +132,6 @@ void GameTabRightPanel::OnDelete(wxCommandEvent &event) {
}
}
-void GameTabRightPanel::OnGotoMove(wxCommandEvent &event) {
- wxLogDebug("GameTabRightPanel: received GOTO_MOVE_EVENT");
- game->SetCurrent((HalfMove *)event.GetClientData());
- Notify();
-}
-
-void GameTabRightPanel::OnMoveDelete(wxCommandEvent &event) {
- game->DeleteMove((HalfMove *)event.GetClientData());
- Notify();
-}
-
-void GameTabRightPanel::OnMovePromote(wxCommandEvent &event) {
- wxLogDebug("GameTabRightPanel: promote move called");
- game->PromoteMove((HalfMove *)event.GetClientData());
- Notify();
-}
-
-void GameTabRightPanel::OnMoveSetAsMainline(wxCommandEvent &event) {
- wxLogDebug("GameTabRightPanel: set move as mainline called");
- game->SetMoveAsMainline((HalfMove *)event.GetClientData());
- Notify();
-}
-
void GameTabRightPanel::Notify() {
HalfMove *m = game->GetCurrentMove();
if (m != nullptr) {
@@ -177,7 +143,6 @@ void GameTabRightPanel::Notify() {
if (live_engine != nullptr) {
live_engine->SetFEN(game->GetFen());
}
- NotifyBoard();
}
void GameTabRightPanel::ApplyPreferences() {
@@ -206,18 +171,6 @@ void GameTabRightPanel::RefreshTagsList() {
}
}
-void GameTabRightPanel::OnPreviousMove(wxCommandEvent &event) {
- game->Previous();
- Notify();
- NotifyBoard();
-}
-
-void GameTabRightPanel::OnNextMove(wxCommandEvent &event) {
- game->Next();
- Notify();
- NotifyBoard();
-}
-
std::string GameTabRightPanel::GetNagFromStr(std::string str){
// TODO: Bind more NAG!
if(str=="!")
diff --git a/src/game_tab/right_panel/GameTabRightPanel.hpp b/src/game_tab/right_panel/GameTabRightPanel.hpp
index 0a353b6..6f3aaaa 100644
--- a/src/game_tab/right_panel/GameTabRightPanel.hpp
+++ b/src/game_tab/right_panel/GameTabRightPanel.hpp
@@ -1,3 +1,5 @@
+#include <algorithm>
+
#include "../Game.hpp"
#include "LiveEngineDialog.hpp"
#include "editor/EditorCanvas.hpp"
@@ -23,20 +25,13 @@ class GameTabRightPanel : public TabGameRightPanel {
public:
GameTabRightPanel(wxFrame *parent, std::shared_ptr<Game> game);
- void NotifyBoard();
void Notify();
void OnCommentChange(wxCommandEvent &event);
- void OnGotoMove(wxCommandEvent &event);
- void OnMoveDelete(wxCommandEvent &event);
- void OnMovePromote(wxCommandEvent &event);
- void OnMoveSetAsMainline(wxCommandEvent &event);
void RefreshTagsList();
void OnTagSelected(wxListEvent &event);
void OnTagDeselected(wxListEvent &event);
void OnApply(wxCommandEvent &event);
void OnDelete(wxCommandEvent &event);
- void OnPreviousMove(wxCommandEvent &event);
- void OnNextMove(wxCommandEvent &event);
void OnLiveAnalysis(wxCommandEvent &event);
void ApplyPreferences();
void OnLiveEngineClose(wxCloseEvent &e);
diff --git a/src/game_tab/right_panel/editor/EditorCanvas.cpp b/src/game_tab/right_panel/editor/EditorCanvas.cpp
index ae0c096..19d81ec 100644
--- a/src/game_tab/right_panel/editor/EditorCanvas.cpp
+++ b/src/game_tab/right_panel/editor/EditorCanvas.cpp
@@ -1,7 +1,7 @@
#include "EditorCanvas.hpp"
-EditorCanvas::EditorCanvas(wxFrame *parent)
- : wxPanel(parent), NeedRedraw(false) {
+EditorCanvas::EditorCanvas(wxFrame *parent, std::shared_ptr<Game> game)
+ : wxPanel(parent), game(game) {
hide_icon = LoadPNG("hide", wxSize(CGEditor::status.MoveIconWidth,
CGEditor::status.MoveIconWidth));
t.ResizePieces(CGEditor::status.MoveIconWidth);
@@ -14,13 +14,17 @@ EditorCanvas::EditorCanvas(wxFrame *parent)
color_comments_bg=wxColour(255, 255, 204);
color_current_move_bg=wxColour(216, 216, 216);
color_menu_item_bg=wxColour(216, 216, 216);
-
+ // The following should be called when using an EVT_PAINT handler
+ SetBackgroundStyle(wxBG_STYLE_PAINT);
+
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();});
}
void EditorCanvas::OnPaint(wxPaintEvent &event) {
wxPaintDC current_dc(this);
+ current_dc.SetBackground(*wxWHITE_BRUSH);
+ current_dc.Clear();
dc = &current_dc;
// Refresh canvas size
@@ -173,28 +177,18 @@ void EditorCanvas::DrawElement(const cgeditor::Element &e) {
}
}
void EditorCanvas::HandleEvent(const cgeditor::Event &e) {
- wxLogDebug("Editor event!");
if (e.type == cgeditor::Event::Goto) {
- wxCommandEvent event(GOTO_MOVE_EVENT, GetId());
- event.SetEventObject(this);
- event.SetClientData(e.move);
- ProcessEvent(event);
+ game->SetCurrent((HalfMove *)e.move);
} else if (e.type == cgeditor::Event::Delete) {
- wxCommandEvent event(DELETE_MOVE_EVENT, GetId());
- event.SetEventObject(this);
- event.SetClientData(e.move);
- ProcessEvent(event);
+ game->DeleteMove((HalfMove *)e.move);
} else if (e.type == cgeditor::Event::Promote) {
- wxCommandEvent event(PROMOTE_MOVE_EVENT, GetId());
- event.SetEventObject(this);
- event.SetClientData(e.move);
- ProcessEvent(event);
+ game->PromoteMove((HalfMove *)e.move);
} else if (e.type == cgeditor::Event::SetAsMainline) {
- wxCommandEvent event(SET_AS_MAINLINE_EVENT, GetId());
- event.SetEventObject(this);
- event.SetClientData(e.move);
- ProcessEvent(event);
+ game->SetMoveAsMainline((HalfMove *)e.move);
}
+ wxCommandEvent event(GAME_CHANGE, GetId());
+ event.SetEventObject(this);
+ ProcessEvent(event);
}
void EditorCanvas::MouseEvent(wxMouseEvent &event) {
@@ -220,10 +214,11 @@ void EditorCanvas::MouseEvent(wxMouseEvent &event) {
Refresh();
}
- // Should another draw of CGEditor be made?
- if (NeedRedraw) {
+ // Handle editor events
+ Update();
+ if(ProcessEvents()){
Refresh();
- NeedRedraw = false;
+ Update();
}
}
@@ -234,17 +229,5 @@ void EditorCanvas::SetMoves(HalfMove *moves, HalfMove *current) {
Refresh();
}
-void EditorCanvas::OnKeyEvent(wxKeyEvent &event) {
- /*if (event.GetKeyCode() == WXK_LEFT) {
- wxCommandEvent previousEvent(PREVIOUS_MOVE_EVENT, GetId());
- previousEvent.SetEventObject(this);
- ProcessEvent(previousEvent);
- } else if (event.GetKeyCode() == WXK_RIGHT) {
- wxCommandEvent nextEvent(NEXT_MOVE_EVENT, GetId());
- nextEvent.SetEventObject(this);
- ProcessEvent(nextEvent);
- }*/
-}
-
wxBEGIN_EVENT_TABLE(EditorCanvas, wxPanel) EVT_PAINT(EditorCanvas::OnPaint)
EVT_MOUSE_EVENTS(EditorCanvas::MouseEvent) wxEND_EVENT_TABLE()
diff --git a/src/game_tab/right_panel/editor/EditorCanvas.hpp b/src/game_tab/right_panel/editor/EditorCanvas.hpp
index 05d6258..740a6a1 100644
--- a/src/game_tab/right_panel/editor/EditorCanvas.hpp
+++ b/src/game_tab/right_panel/editor/EditorCanvas.hpp
@@ -4,22 +4,18 @@
#include "CGEditor.hpp"
#include "ochess.hpp"
#include "../../left_panel/board/Theme.hpp"
+#include "game_tab/Game.hpp"
// Foreign events
-wxDECLARE_EVENT(GOTO_MOVE_EVENT, wxCommandEvent);
-wxDECLARE_EVENT(PREVIOUS_MOVE_EVENT, wxCommandEvent);
-wxDECLARE_EVENT(NEXT_MOVE_EVENT, wxCommandEvent);
-wxDECLARE_EVENT(DELETE_MOVE_EVENT, wxCommandEvent);
-wxDECLARE_EVENT(PROMOTE_MOVE_EVENT, wxCommandEvent);
-wxDECLARE_EVENT(SET_AS_MAINLINE_EVENT, wxCommandEvent);
+wxDECLARE_EVENT(GAME_CHANGE, wxCommandEvent);
class EditorCanvas : public wxPanel, public cgeditor::CGEditor {
wxPaintDC *dc;
- bool NeedRedraw;
wxPoint Middle(cgeditor::Element e);
wxBitmap hide_icon;
Theme t;
wxFont default_font;
+ std::shared_ptr<Game> game;
wxColour color_scrollbar_bg;
wxColour color_scrollbar;
@@ -29,13 +25,12 @@ class EditorCanvas : public wxPanel, public cgeditor::CGEditor {
wxColour color_menu_item_bg;
public:
- EditorCanvas(wxFrame *parent);
+ EditorCanvas(wxFrame *parent, std::shared_ptr<Game> game);
void OnPaint(wxPaintEvent &event);
void MouseEvent(wxMouseEvent &event);
void DrawElement(const cgeditor::Element &e);
void HandleEvent(const cgeditor::Event &e);
void SetMoves(HalfMove *moves, HalfMove *current);
- void OnKeyEvent(wxKeyEvent &event);
DECLARE_EVENT_TABLE()
};