Tyro/src/widgets/PrefPane.cpp

160 lines
4.5 KiB
C++
Raw Normal View History

2015-07-07 10:01:17 -04:00
#include "src/widgets/PrefPane.h"
#include "src/widgets/MainFrame.h"
extern wxConfigBase *Glob_config;
class GeneralPrefPanePage : public wxPanel {
public:
GeneralPrefPanePage(wxWindow *parent)
: wxPanel(parent)
{
2019-05-31 16:34:31 -04:00
auto BASE_MARGIN = 30;
this->frame = (MainFrame *) parent;
2015-10-29 13:55:01 -04:00
2019-05-31 16:34:31 -04:00
wxFont globalFont = wxSystemSettings::GetFont(wxSYS_ANSI_FIXED_FONT);
Glob_config->Read("global_font", &globalFont);
this->fontPicker = new wxFontPickerCtrl(
this,
myID_PREFS_FONT,
globalFont,
wxDefaultPosition,
wxDefaultSize,
wxFNTP_FONTDESC_AS_LABEL
);
this->fontPicker->SetLabelText("Editor Font");
this->showLineNumbers = new wxCheckBox(this, myID_PREFS_LINE_NUMBERS, "Show line numbers");
this->showIndentGuides = new wxCheckBox(this, myID_PREFS_IDENT_GUIDES, "Show indent guides");
this->showCodeFolding = new wxCheckBox(this, myID_PREFS_CODE_FOLDING, "Show code folding");
2015-10-29 13:55:01 -04:00
2019-05-31 16:34:31 -04:00
wxSizer *hSizer = new wxBoxSizer(wxHORIZONTAL);
hSizer->AddSpacer(BASE_MARGIN);
wxSizer *vSizer = new wxBoxSizer(wxVERTICAL);
vSizer->AddSpacer(BASE_MARGIN);
vSizer->Add(this->fontPicker, wxSizerFlags().Border());
vSizer->AddSpacer(10);
vSizer->Add(this->showLineNumbers, wxSizerFlags().Border());
vSizer->Add(this->showIndentGuides, wxSizerFlags().Border());
vSizer->Add(this->showCodeFolding, wxSizerFlags().Border());
vSizer->AddSpacer(BASE_MARGIN);
2015-10-29 13:55:01 -04:00
2019-05-31 16:34:31 -04:00
hSizer->Add(vSizer);
hSizer->AddSpacer(BASE_MARGIN);
this->SetSizerAndFit(hSizer);
2015-10-29 13:55:01 -04:00
// Change settings on selection, rather than on apply button
// On supported platforms
if (wxPreferencesEditor::ShouldApplyChangesImmediately())
{
this->showLineNumbers->Bind(wxEVT_CHECKBOX, [=] (wxCommandEvent &event) {
Glob_config->Write("show_line_numbers", event.IsChecked());
this->frame->OnPrefsChanged(event);
Glob_config->Flush();
}, myID_PREFS_LINE_NUMBERS);
2015-10-29 13:55:01 -04:00
this->showIndentGuides->Bind(wxEVT_CHECKBOX, [=] (wxCommandEvent &event) {
Glob_config->Write("show_indent_guides", event.IsChecked());
this->frame->OnPrefsChanged(event);
Glob_config->Flush();
}, myID_PREFS_IDENT_GUIDES);
2015-10-29 13:55:01 -04:00
this->showCodeFolding->Bind(wxEVT_CHECKBOX, [=] (wxCommandEvent &event) {
Glob_config->Write("show_code_folding", event.IsChecked());
this->frame->OnPrefsChanged(event);
Glob_config->Flush();
}, myID_PREFS_CODE_FOLDING);
}
}
2015-10-29 13:55:01 -04:00
~GeneralPrefPanePage()
{
wxDELETE(this->showLineNumbers);
wxDELETE(this->showIndentGuides);
wxDELETE(this->showCodeFolding);
2019-05-31 16:34:31 -04:00
wxDELETE(this->fontPicker);
}
2015-10-29 13:55:01 -04:00
/**
* Apply current settings to the pref window
2015-10-29 13:55:01 -04:00
*
2019-05-16 15:21:32 -04:00
* @return bool
*/
virtual bool TransferDataToWindow()
{
this->showLineNumbers->SetValue(Glob_config->ReadBool("show_line_numbers", true));
this->showIndentGuides->SetValue(Glob_config->ReadBool("show_indent_guides", false));
this->showCodeFolding->SetValue(Glob_config->ReadBool("show_code_folding", false));
2015-10-29 13:55:01 -04:00
wxFont globalFont = wxSystemSettings::GetFont(wxSYS_ANSI_FIXED_FONT);
2019-05-16 15:21:32 -04:00
Glob_config->Read("global_font", &globalFont);
2015-10-29 13:55:01 -04:00
2019-05-16 15:21:32 -04:00
this->fontPicker->SetSelectedFont(globalFont);
2015-10-29 13:55:01 -04:00
return true;
}
2015-10-29 13:55:01 -04:00
/**
2015-10-29 13:55:01 -04:00
* Called on platforms with modal preferences dialog to save
* and apply the changes
2015-10-29 13:55:01 -04:00
*
2019-05-16 15:21:32 -04:00
* @return bool
*/
virtual bool TransferDataFromWindow()
{
2019-05-31 16:34:31 -04:00
Glob_config->Write("show_line_numbers", this->showLineNumbers->IsChecked());
Glob_config->Write("show_indent_guides", this->showIndentGuides->IsChecked());
Glob_config->Write("show_code_folding", this->showCodeFolding->IsChecked());
2019-05-16 15:21:32 -04:00
Glob_config->Write("global_font", this->fontPicker->GetSelectedFont());
2015-10-29 13:55:01 -04:00
wxCommandEvent evt = wxCommandEvent();
this->frame->OnPrefsChanged(evt);
2015-10-29 13:55:01 -04:00
Glob_config->Flush();
2015-10-29 13:55:01 -04:00
return true;
}
2015-10-29 13:55:01 -04:00
private:
MainFrame *frame;
2019-05-31 16:34:31 -04:00
wxCheckBox *showLineNumbers = nullptr;
wxCheckBox *showIndentGuides = nullptr;
wxCheckBox *showCodeFolding = nullptr;
wxFontPickerCtrl *fontPicker = nullptr;
};
/*
* Creates the "General" pane on the pref window
* */
class GeneralPrefPane: public wxStockPreferencesPage {
public:
GeneralPrefPane() : wxStockPreferencesPage(Kind_General) {}
virtual wxWindow *CreateWindow(wxWindow *parent)
{
return new GeneralPrefPanePage(parent);
}
};
// -----------------------------------------------------------------------------
// ! Implementation of PrefPane Class
// -----------------------------------------------------------------------------
PrefPane::PrefPane()
{
this->pref_window = new wxPreferencesEditor();
this->pref_window->AddPage(new GeneralPrefPane());
}
PrefPane::~PrefPane()
{
//delete this->pref_window;
}
void PrefPane::Show(wxWindow *parent)
{
this->pref_window->Show(parent);
}