From ce941c146aea7925bded6b9d2a0d0559d3156ad3 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Wed, 23 Feb 2022 18:11:55 +0100 Subject: Create repository --- src/preferences/BoardPrefs.hpp | 113 ++++++++++++++++++++++++++++++++++ src/preferences/BoardPrefsPanelBF.cpp | 106 +++++++++++++++++++++++++++++++ src/preferences/BoardPrefsPanelBF.h | 64 +++++++++++++++++++ src/preferences/preferences.hpp | 2 + 4 files changed, 285 insertions(+) create mode 100644 src/preferences/BoardPrefs.hpp create mode 100644 src/preferences/BoardPrefsPanelBF.cpp create mode 100644 src/preferences/BoardPrefsPanelBF.h create mode 100644 src/preferences/preferences.hpp (limited to 'src/preferences') diff --git a/src/preferences/BoardPrefs.hpp b/src/preferences/BoardPrefs.hpp new file mode 100644 index 0000000..eff3b58 --- /dev/null +++ b/src/preferences/BoardPrefs.hpp @@ -0,0 +1,113 @@ +#include "BoardPrefsPanelBF.h" +#include "game_tab/board/BoardCanvas.hpp" +#include "ochess.hpp" +#include +#include +#include +#include +#include +#include + +class BoardPrefsPanel : public BoardPrefsPanelBF { + BoardCanvas *real_board_canvas; + wxFileName pieces_path; + wxFileName squares_path; + +public: + BoardPrefsPanel(wxWindow *parent) : BoardPrefsPanelBF(parent) { + wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); + real_board_canvas = new BoardCanvas((wxFrame *)board_canvas, 40, true); + sizer->Add(real_board_canvas, 1, wxEXPAND, 5); + board_canvas->SetSizerAndFit(sizer); + + wxStandardPaths p = wxStandardPaths::Get(); + pieces_path = wxFileName(p.GetExecutablePath()); + pieces_path = pieces_path.GetPath() + "/assets/pieces"; + squares_path = wxFileName(pieces_path); + squares_path = squares_path.GetPath() + "/boards"; + wxLogDebug(squares_path.GetFullPath()); + + Bind(wxEVT_LISTBOX, &BoardPrefsPanel::OnConfChange, this, wxID_ANY); + Bind(wxEVT_SPINCTRL, &BoardPrefsPanel::OnConfChange, this, wxID_ANY); + } + void OnConfChange(wxCommandEvent &event) { + ApplyPreferences(); + real_board_canvas->ApplyPreferences(); + } + + virtual bool TransferDataToWindow() { + wxLogDebug("Load!"); + + wxDir pieces_dir(pieces_path.GetFullPath()); + wxString filename; + bool cont = pieces_dir.GetFirst(&filename, wxEmptyString, wxDIR_DEFAULT); + piece_theme->Append("default"); + while (cont) { + wxFileName fn(filename); + fn.ClearExt(); + piece_theme->Append(fn.GetName()); + cont = pieces_dir.GetNext(&filename); + } + + wxDir squares_dir(squares_path.GetFullPath()); + cont = squares_dir.GetFirst(&filename, wxEmptyString, wxDIR_DEFAULT); + square_theme->Append("default"); + while (cont) { + wxFileName fn(filename); + fn.ClearExt(); + square_theme->Append(fn.GetName()); + cont = squares_dir.GetNext(&filename); + } + + CONFIG_OPEN(config); + piece_theme->SetStringSelection( + config->Read("board/theme/pieces/name", "default")); + square_theme->SetStringSelection( + config->Read("board/theme/squares/name", "default")); + show_side_badge->SetValue(config->Read("board/show_side_badge", true)); + show_captures->SetValue(config->Read("board/show_captures", true)); + black_by_default->SetValue(config->Read("board/black_by_default", false)); + corner_radius->SetValue(config->Read("board/corner_radius", 8)); + square_size->SetValue(config->Read("board/square_size", 80)); + CONFIG_CLOSE(config); + + return true; + } + + void ApplyPreferences() { + CONFIG_OPEN(config); + wxString cur_theme = piece_theme->GetString(piece_theme->GetSelection()); + config->Write("board/theme/pieces/name", cur_theme); + config->Write("board/theme/pieces/path", + pieces_path.GetFullPath() + "/" + cur_theme + ".png"); + cur_theme = square_theme->GetString(square_theme->GetSelection()); + config->Write("board/theme/squares/name", cur_theme); + config->Write("board/theme/squares/path", + squares_path.GetFullPath() + "/" + cur_theme + ".png"); + + config->Write("board/show_side_badge", show_side_badge->GetValue()); + config->Write("board/show_captures", show_captures->GetValue()); + config->Write("board/black_by_default", black_by_default->GetValue()); + config->Write("board/corner_radius", corner_radius->GetValue()); + config->Write("board/square_size", square_size->GetValue()); + + CONFIG_CLOSE(config); + } + + virtual bool TransferDataFromWindow() { + ApplyPreferences(); + MAINWIN->ApplyPreferences(); + return (true); + } +}; + +class BoardPrefs : public wxPreferencesPage { +public: + virtual wxString GetName() const { return "Board"; } + virtual wxBitmap GetLargeIcon() { + return wxArtProvider::GetBitmap(wxART_HELP, wxART_TOOLBAR); + } + virtual wxWindow *CreateWindow(wxWindow *parent) { + return new BoardPrefsPanel(parent); + } +}; \ No newline at end of file diff --git a/src/preferences/BoardPrefsPanelBF.cpp b/src/preferences/BoardPrefsPanelBF.cpp new file mode 100644 index 0000000..06058f9 --- /dev/null +++ b/src/preferences/BoardPrefsPanelBF.cpp @@ -0,0 +1,106 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 3.10.1-40-g8042f487) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "BoardPrefsPanelBF.h" + +/////////////////////////////////////////////////////////////////////////// + +BoardPrefsPanelBF::BoardPrefsPanelBF( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) +{ + wxBoxSizer* main_sizer; + main_sizer = new wxBoxSizer( wxVERTICAL ); + + splitter = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D|wxSP_LIVE_UPDATE ); + splitter->Connect( wxEVT_IDLE, wxIdleEventHandler( BoardPrefsPanelBF::splitterOnIdle ), NULL, this ); + + board_canvas = new wxPanel( splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + options_panel = new wxPanel( splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* options_sizer; + options_sizer = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* themes_sizer; + themes_sizer = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* piece_theme_sizer; + piece_theme_sizer = new wxBoxSizer( wxVERTICAL ); + + piece_theme_label = new wxStaticText( options_panel, wxID_ANY, wxT("Piece theme"), wxDefaultPosition, wxDefaultSize, 0 ); + piece_theme_label->Wrap( -1 ); + piece_theme_sizer->Add( piece_theme_label, 0, wxALL, 5 ); + + piece_theme = new wxListBox( options_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + piece_theme_sizer->Add( piece_theme, 1, wxALL|wxEXPAND, 5 ); + + + themes_sizer->Add( piece_theme_sizer, 1, wxEXPAND, 5 ); + + wxBoxSizer* square_theme_sizer; + square_theme_sizer = new wxBoxSizer( wxVERTICAL ); + + square_theme_label = new wxStaticText( options_panel, wxID_ANY, wxT("Square theme"), wxDefaultPosition, wxDefaultSize, 0 ); + square_theme_label->Wrap( -1 ); + square_theme_sizer->Add( square_theme_label, 0, wxALL, 5 ); + + square_theme = new wxListBox( options_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + square_theme_sizer->Add( square_theme, 1, wxALL|wxEXPAND, 5 ); + + + themes_sizer->Add( square_theme_sizer, 1, wxEXPAND, 5 ); + + + options_sizer->Add( themes_sizer, 1, wxEXPAND, 5 ); + + show_side_badge = new wxCheckBox( options_panel, wxID_ANY, wxT("Side to play badge"), wxDefaultPosition, wxDefaultSize, 0 ); + options_sizer->Add( show_side_badge, 0, wxALL, 5 ); + + show_captures = new wxCheckBox( options_panel, wxID_ANY, wxT("Show captured pieces"), wxDefaultPosition, wxDefaultSize, 0 ); + options_sizer->Add( show_captures, 0, wxALL, 5 ); + + black_by_default = new wxCheckBox( options_panel, wxID_ANY, wxT("Black side by default"), wxDefaultPosition, wxDefaultSize, 0 ); + options_sizer->Add( black_by_default, 0, wxALL, 5 ); + + wxBoxSizer* border_radius_sizer; + border_radius_sizer = new wxBoxSizer( wxHORIZONTAL ); + + border_radius_label = new wxStaticText( options_panel, wxID_ANY, wxT("Corner radius:"), wxDefaultPosition, wxDefaultSize, 0 ); + border_radius_label->Wrap( -1 ); + border_radius_sizer->Add( border_radius_label, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + corner_radius = new wxSpinCtrl( options_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 20, 0 ); + border_radius_sizer->Add( corner_radius, 0, wxALL, 5 ); + + + options_sizer->Add( border_radius_sizer, 0, wxEXPAND, 5 ); + + wxBoxSizer* board_size_sizer; + board_size_sizer = new wxBoxSizer( wxHORIZONTAL ); + + board_size_label = new wxStaticText( options_panel, wxID_ANY, wxT("Board squares size:"), wxDefaultPosition, wxDefaultSize, 0 ); + board_size_label->Wrap( -1 ); + board_size_sizer->Add( board_size_label, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + square_size = new wxSpinCtrl( options_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 150, 0 ); + board_size_sizer->Add( square_size, 0, wxALL|wxEXPAND, 5 ); + + + options_sizer->Add( board_size_sizer, 0, wxEXPAND, 5 ); + + + options_panel->SetSizer( options_sizer ); + options_panel->Layout(); + options_sizer->Fit( options_panel ); + splitter->SplitHorizontally( board_canvas, options_panel, 350 ); + main_sizer->Add( splitter, 1, wxEXPAND, 5 ); + + + this->SetSizer( main_sizer ); + this->Layout(); +} + +BoardPrefsPanelBF::~BoardPrefsPanelBF() +{ +} diff --git a/src/preferences/BoardPrefsPanelBF.h b/src/preferences/BoardPrefsPanelBF.h new file mode 100644 index 0000000..0bcea9e --- /dev/null +++ b/src/preferences/BoardPrefsPanelBF.h @@ -0,0 +1,64 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 3.10.1-40-g8042f487) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class BoardPrefsPanelBF +/////////////////////////////////////////////////////////////////////////////// +class BoardPrefsPanelBF : public wxPanel +{ + private: + + protected: + wxSplitterWindow* splitter; + wxPanel* board_canvas; + wxPanel* options_panel; + wxStaticText* piece_theme_label; + wxListBox* piece_theme; + wxStaticText* square_theme_label; + wxListBox* square_theme; + wxCheckBox* show_side_badge; + wxCheckBox* show_captures; + wxCheckBox* black_by_default; + wxStaticText* border_radius_label; + wxSpinCtrl* corner_radius; + wxStaticText* board_size_label; + wxSpinCtrl* square_size; + + public: + + BoardPrefsPanelBF( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 756,751 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString ); + + ~BoardPrefsPanelBF(); + + void splitterOnIdle( wxIdleEvent& ) + { + splitter->SetSashPosition( 350 ); + splitter->Disconnect( wxEVT_IDLE, wxIdleEventHandler( BoardPrefsPanelBF::splitterOnIdle ), NULL, this ); + } + +}; + diff --git a/src/preferences/preferences.hpp b/src/preferences/preferences.hpp new file mode 100644 index 0000000..d5dd603 --- /dev/null +++ b/src/preferences/preferences.hpp @@ -0,0 +1,2 @@ +#pragma once +#include "BoardPrefs.hpp" \ No newline at end of file -- cgit v1.2.3