diff --git a/lldb/source/Core/IOHandlerCursesGUI.cpp b/lldb/source/Core/IOHandlerCursesGUI.cpp --- a/lldb/source/Core/IOHandlerCursesGUI.cpp +++ b/lldb/source/Core/IOHandlerCursesGUI.cpp @@ -1504,6 +1504,29 @@ int m_first_visibile_choice; }; +class ProcessPluginFieldDelegate : public ChoicesFieldDelegate { +public: + ProcessPluginFieldDelegate() + : ChoicesFieldDelegate("Process Plugin", 3, GetPossiblePluginNames()) {} + + std::vector GetPossiblePluginNames() { + std::vector names; + names.push_back(""); + + size_t i = 0; + while (auto name = PluginManager::GetProcessPluginNameAtIndex(i++)) + names.push_back(name); + return names; + } + + std::string GetPluginName() { + std::string plugin_name = GetChoiceContent(); + if (plugin_name == "") + return ""; + return plugin_name; + } +}; + template class ListFieldDelegate : public FieldDelegate { public: ListFieldDelegate(const char *label, T default_field) @@ -1899,6 +1922,12 @@ return delegate; } + ProcessPluginFieldDelegate *AddProcessPluginField() { + ProcessPluginFieldDelegate *delegate = new ProcessPluginFieldDelegate(); + m_fields.push_back(FieldDelegateUP(delegate)); + return delegate; + } + template ListFieldDelegate *AddListField(const char *label, T default_field) { ListFieldDelegate *delegate = @@ -2347,8 +2376,7 @@ m_include_existing_field = AddBooleanField("Include existing processes.", false); m_show_advanced_field = AddBooleanField("Show advanced settings.", false); - m_plugin_field = - AddChoicesField("Plugin Name", 3, GetPossiblePluginNames()); + m_plugin_field = AddProcessPluginField(); AddAction("Attach", [this](Window &window) { Attach(window); }); } @@ -2390,16 +2418,6 @@ return module_sp->GetFileSpec().GetFilename().AsCString(); } - std::vector GetPossiblePluginNames() { - std::vector names; - names.push_back(""); - - size_t i = 0; - while (auto name = PluginManager::GetProcessPluginNameAtIndex(i++)) - names.push_back(name); - return names; - } - bool StopRunningProcess() { ExecutionContext exe_ctx = m_debugger.GetCommandInterpreter().GetExecutionContext(); @@ -2455,8 +2473,7 @@ } else { attach_info.SetProcessID(m_pid_field->GetInteger()); } - if (m_plugin_field->GetChoiceContent() != "") - attach_info.SetProcessPluginName(m_plugin_field->GetChoiceContent()); + attach_info.SetProcessPluginName(m_plugin_field->GetPluginName()); return attach_info; } @@ -2504,7 +2521,7 @@ BooleanFieldDelegate *m_wait_for_field; BooleanFieldDelegate *m_include_existing_field; BooleanFieldDelegate *m_show_advanced_field; - ChoicesFieldDelegate *m_plugin_field; + ProcessPluginFieldDelegate *m_plugin_field; }; class MenuDelegate {