From f329c5f20434a07cc6c64c90d221181c27207a9c Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Sat, 26 Feb 2022 18:46:06 +0100 Subject: Improve engine support --- src/engine_tab/EngineTab.cpp | 90 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 8 deletions(-) (limited to 'src/engine_tab/EngineTab.cpp') diff --git a/src/engine_tab/EngineTab.cpp b/src/engine_tab/EngineTab.cpp index 12b065f..760b416 100644 --- a/src/engine_tab/EngineTab.cpp +++ b/src/engine_tab/EngineTab.cpp @@ -1,21 +1,95 @@ #include "EngineTab.hpp" EngineTab::EngineTab(wxWindow *parent, std::string engine_path_or_name) - : EngineTabBF(parent), TabInfos(TabInfos::ENGINE) { + : EngineTabBF(parent), TabInfos(TabInfos::ENGINE), + enginePath(engine_path_or_name) { SetLabel("New Engine"); engine = new uciadapter::UCI(engine_path_or_name); engine_location->SetValue(engine_path_or_name); + confGroup = "engines/bob"; + CONFIG_OPEN(conf); + conf->DeleteGroup(confGroup); + bool configExists = conf->HasGroup(confGroup); + conf->Write(confGroup + "/path", wxString(engine_path_or_name)); + CONFIG_CLOSE(conf); + if (!configExists) { + InitConfiguration(); + } + + // Build wxPropertyGrid according to engine configuration + CONFIG_OPEN(conf2); + long index; + std::string optsPath = confGroup + "/options"; + conf2->SetPath(optsPath); + wxString opt_name; + if (conf2->GetFirstGroup(opt_name, index)) { + do { + wxString optPath = opt_name + "/"; + wxString type = conf2->Read(optPath + "type"); + wxString default_value_wxString = conf2->Read(optPath + "value"); + std::string default_value = default_value_wxString.ToStdString(); + if (type == "check") { + engine_parameters->Append( + new wxBoolProperty(opt_name, wxPG_LABEL, default_value == "true")); + } else if (type == "spin") { + engine_parameters->Append( + new wxIntProperty(opt_name, wxPG_LABEL, std::stoi(default_value))); + } else if (type == "string" || type == "button") { + engine_parameters->Append( + new wxStringProperty(opt_name, wxPG_LABEL, default_value)); + } + } while (conf2->GetNextGroup(opt_name, index)); + } + CONFIG_CLOSE(conf2); + + Bind(wxEVT_BUTTON, &EngineTab::OnSave, this, ENGINE_SAVE_CONF_BUTTON); +} + +void EngineTab::OnSave(wxCommandEvent &event) { + CONFIG_OPEN(conf2); + long index; + std::string optsPath = confGroup + "/options"; + conf2->SetPath(optsPath); + wxString opt_name; + if (conf2->GetFirstGroup(opt_name, index)) { + do { + wxString optPath = opt_name + "/"; + wxString type = conf2->Read(optPath + "type"); + wxPGProperty *property = engine_parameters->GetProperty(opt_name); + wxVariant value = property->GetValue(); + if (value.IsType(wxPG_VARIANT_TYPE_BOOL)) { + conf2->Write(optPath + "/value", value.GetBool()); + } else if (value.IsType(wxPG_VARIANT_TYPE_LONG)) { + conf2->Write(optPath + "/value", value.GetLong()); + } else if (value.IsType(wxPG_VARIANT_TYPE_STRING)) { + conf2->Write(optPath + "/value", value.GetString()); + } + } while (conf2->GetNextGroup(opt_name, index)); + } + CONFIG_CLOSE(conf2); +} + +void EngineTab::InitConfiguration() { + wxLogDebug("Called!"); + CONFIG_OPEN(conf); + conf->Write(confGroup + "/path", wxString(enginePath)); + conf->Write(confGroup + "/name", wxString(engine->GetName())); + conf->Write(confGroup + "/authors", wxString(engine->GetAuthor())); std::vector opts = engine->GetOptions(); for (uciadapter::Option &opt : opts) { + std::string optPath = confGroup + "/options/" + opt.name; + conf->Write(wxString(optPath + "/type"), wxString(opt.type)); if (opt.type == "check") { - engine_parameters->Append(new wxBoolProperty( - opt.name, wxPG_LABEL, opt.default_value == "true")); + conf->Write(wxString(optPath + "/value"), opt.default_value == "true"); } else if (opt.type == "spin") { - engine_parameters->Append(new wxIntProperty( - opt.name, wxPG_LABEL, std::stoi(opt.default_value))); + conf->Write(wxString(optPath + "/value"), std::stoi(opt.default_value)); + conf->Write(wxString(optPath + "/min"), std::stoi(opt.min)); + conf->Write(wxString(optPath + "/max"), std::stoi(opt.max)); } else if (opt.type == "string") { - engine_parameters->Append( - new wxStringProperty(opt.name, wxPG_LABEL, opt.default_value)); + conf->Write(wxString(optPath + "/value"), wxString(opt.default_value)); + } else if (opt.type == "button") { + conf->Write(wxString(optPath + "/name"), wxString(opt.default_value)); } } -} + CONFIG_CLOSE(conf); +} \ No newline at end of file -- cgit v1.2.3