wxControl *OptionPage::OptionAdd(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, double min, double max, double inc) { parent->AddChangeableOption(opt_name); const auto opt = OPT_GET(opt_name); switch (opt->GetType()) { case agi::OptionType::Bool: { auto cb = new wxCheckBox(this, -1, name); flex->Add(cb, 1, wxEXPAND, 0); cb->SetValue(opt->GetBool()); cb->Bind(wxEVT_CHECKBOX, BoolUpdater(opt_name, parent)); return cb; } case agi::OptionType::Int: { auto sc = new wxSpinCtrl(this, -1, std::to_wstring((int)opt->GetInt()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, opt->GetInt()); sc->Bind(wxEVT_SPINCTRL, IntUpdater(opt_name, parent)); Add(flex, name, sc); return sc; } case agi::OptionType::Double: { auto scd = new wxSpinCtrlDouble(this, -1, std::to_wstring(opt->GetDouble()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, opt->GetDouble(), inc); scd->Bind(wxEVT_SPINCTRL, DoubleUpdater(opt_name, parent)); Add(flex, name, scd); return scd; } case agi::OptionType::String: { auto text = new wxTextCtrl(this, -1 , to_wx(opt->GetString())); text->Bind(wxEVT_TEXT, StringUpdater(opt_name, parent)); Add(flex, name, text); return text; } case agi::OptionType::Color: { auto cb = new ColourButton(this, wxSize(40,10), false, opt->GetColor()); cb->Bind(EVT_COLOR, ColourUpdater(opt_name, parent)); Add(flex, name, cb); return cb; } default: throw agi::InternalError("Unsupported type"); } }
wxControl *OptionPage::OptionAdd(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, double min, double max, double inc) { parent->AddChangeableOption(opt_name); const agi::OptionValue *opt = OPT_GET(opt_name); switch (opt->GetType()) { case agi::OptionValue::Type_Bool: { wxCheckBox *cb = new wxCheckBox(this, -1, name); flex->Add(cb, 1, wxEXPAND, 0); cb->SetValue(opt->GetBool()); cb->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, BoolUpdater(opt_name, parent)); return cb; } case agi::OptionValue::Type_Int: { wxSpinCtrl *sc = new wxSpinCtrl(this, -1, wxString::Format("%d", (int)opt->GetInt()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, opt->GetInt()); sc->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, IntUpdater(opt_name, parent)); Add(flex, name, sc); return sc; } case agi::OptionValue::Type_Double: { wxSpinCtrlDouble *scd = new wxSpinCtrlDouble(this, -1, wxString::Format("%g", opt->GetDouble()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, opt->GetDouble(), inc); scd->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, DoubleUpdater(opt_name, parent)); Add(flex, name, scd); return scd; } case agi::OptionValue::Type_String: { wxTextCtrl *text = new wxTextCtrl(this, -1 , to_wx(opt->GetString())); text->Bind(wxEVT_COMMAND_TEXT_UPDATED, StringUpdater(opt_name, parent)); Add(flex, name, text); return text; } case agi::OptionValue::Type_Color: { ColourButton *cb = new ColourButton(this, -1, wxSize(40,10), opt->GetColor()); cb->Bind(wxEVT_COMMAND_BUTTON_CLICKED, ColourUpdater(opt_name, parent)); Add(flex, name, cb); return cb; } default: throw PreferenceNotSupported("Unsupported type"); } }
void OptionPage::OptionFont(wxSizer *sizer, std::string opt_prefix) { const auto face_opt = OPT_GET(opt_prefix + "Font Face"); const auto size_opt = OPT_GET(opt_prefix + "Font Size"); parent->AddChangeableOption(face_opt->GetName()); parent->AddChangeableOption(size_opt->GetName()); auto font_name = new wxTextCtrl(this, -1, to_wx(face_opt->GetString())); font_name->SetMinSize(wxSize(160, -1)); font_name->Bind(wxEVT_TEXT, StringUpdater(face_opt->GetName().c_str(), parent)); auto font_size = new wxSpinCtrl(this, -1, std::to_wstring((int)size_opt->GetInt()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 42, size_opt->GetInt()); font_size->Bind(wxEVT_SPINCTRL, IntUpdater(size_opt->GetName().c_str(), parent)); auto pick_btn = new wxButton(this, -1, _("Choose...")); pick_btn->Bind(wxEVT_BUTTON, std::bind(font_button, parent, font_name, font_size)); auto button_sizer = new wxBoxSizer(wxHORIZONTAL); button_sizer->Add(font_name, wxSizerFlags(1).Expand()); button_sizer->Add(pick_btn, wxSizerFlags().Expand()); Add(sizer, _("Font Face"), button_sizer); Add(sizer, _("Font Size"), font_size); }
void OptionPage::OptionFont(wxSizer *sizer, std::string opt_prefix) { const agi::OptionValue *face_opt = OPT_GET(opt_prefix + "Font Face"); const agi::OptionValue *size_opt = OPT_GET(opt_prefix + "Font Size"); parent->AddChangeableOption(face_opt->GetName()); parent->AddChangeableOption(size_opt->GetName()); wxTextCtrl *font_name = new wxTextCtrl(this, -1, face_opt->GetString()); font_name->SetMinSize(wxSize(160, -1)); font_name->Bind(wxEVT_COMMAND_TEXT_UPDATED, StringUpdater(face_opt->GetName().c_str(), parent)); wxSpinCtrl *font_size = new wxSpinCtrl(this, -1, wxString::Format("%d", (int)size_opt->GetInt()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 42, size_opt->GetInt()); font_size->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, IntUpdater(size_opt->GetName().c_str(), parent)); wxButton *pick_btn = new wxButton(this, -1, _("Choose...")); pick_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::bind(font_button, parent, font_name, font_size)); wxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL); button_sizer->Add(font_name, wxSizerFlags(1).Expand()); button_sizer->Add(pick_btn, wxSizerFlags().Expand()); Add(sizer, _("Font Face"), button_sizer); Add(sizer, _("Font Size"), font_size); }