void OptionPage::OptionBrowse(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, wxControl *enabler, bool do_enable) { parent->AddChangeableOption(opt_name); const auto opt = OPT_GET(opt_name); if (opt->GetType() != agi::OptionType::String) throw agi::InternalError("Option must be agi::OptionType::String for BrowseButton."); auto text = new wxTextCtrl(this, -1 , to_wx(opt->GetString())); text->SetMinSize(wxSize(160, -1)); text->Bind(wxEVT_TEXT, StringUpdater(opt_name, parent)); auto browse = new wxButton(this, -1, _("Browse...")); browse->Bind(wxEVT_BUTTON, std::bind(browse_button, text)); auto button_sizer = new wxBoxSizer(wxHORIZONTAL); button_sizer->Add(text, wxSizerFlags(1).Expand()); button_sizer->Add(browse, wxSizerFlags().Expand()); Add(flex, name, button_sizer); if (enabler) { if (do_enable) { EnableIfChecked(enabler, text); EnableIfChecked(enabler, browse); } else { DisableIfChecked(enabler, text); DisableIfChecked(enabler, browse); } } }
void OptionPage::OptionBrowse(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, wxControl *enabler, bool do_enable) { parent->AddChangeableOption(opt_name); const agi::OptionValue *opt = OPT_GET(opt_name); if (opt->GetType() != agi::OptionValue::Type_String) throw PreferenceIncorrectType("Option must be agi::OptionValue::Type_String for BrowseButton."); wxTextCtrl *text = new wxTextCtrl(this, -1 , opt->GetString()); text->SetMinSize(wxSize(160, -1)); text->Bind(wxEVT_COMMAND_TEXT_UPDATED, StringUpdater(opt_name, parent)); wxButton *browse = new wxButton(this, -1, _("Browse...")); browse->Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::bind(browse_button, text)); wxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL); button_sizer->Add(text, wxSizerFlags(1).Expand()); button_sizer->Add(browse, wxSizerFlags().Expand()); Add(flex, name, button_sizer); if (enabler) { if (do_enable) { EnableIfChecked(enabler, text); EnableIfChecked(enabler, browse); } else { DisableIfChecked(enabler, text); DisableIfChecked(enabler, browse); } } }