Author: Omar Emara Date: 2021-07-21T14:38:29-07:00 New Revision: c93dc2597a587bc4caedc20f3829501f88cca288
URL: https://github.com/llvm/llvm-project/commit/c93dc2597a587bc4caedc20f3829501f88cca288 DIFF: https://github.com/llvm/llvm-project/commit/c93dc2597a587bc4caedc20f3829501f88cca288.diff LOG: [LLDB][GUI] Add Process Plugin Field This patch adds a new Process Plugin Field. It is a choices field that lists all the available process plugins and can retrieve the name of the selected plugin or an empty string if the default is selected. The Attach form now uses that field instead of manually creating a choices field. Reviewed By: clayborg Differential Revision: https://reviews.llvm.org/D106467 Added: Modified: lldb/source/Core/IOHandlerCursesGUI.cpp Removed: ################################################################################ diff --git a/lldb/source/Core/IOHandlerCursesGUI.cpp b/lldb/source/Core/IOHandlerCursesGUI.cpp index d54c27cea0c8..1779a5b1e882 100644 --- a/lldb/source/Core/IOHandlerCursesGUI.cpp +++ b/lldb/source/Core/IOHandlerCursesGUI.cpp @@ -1504,6 +1504,29 @@ class ChoicesFieldDelegate : public FieldDelegate { int m_first_visibile_choice; }; +class ProcessPluginFieldDelegate : public ChoicesFieldDelegate { +public: + ProcessPluginFieldDelegate() + : ChoicesFieldDelegate("Process Plugin", 3, GetPossiblePluginNames()) {} + + std::vector<std::string> GetPossiblePluginNames() { + std::vector<std::string> names; + names.push_back("<default>"); + + 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 == "<default>") + return ""; + return plugin_name; + } +}; + template <class T> class ListFieldDelegate : public FieldDelegate { public: ListFieldDelegate(const char *label, T default_field) @@ -1899,6 +1922,12 @@ class FormDelegate { return delegate; } + ProcessPluginFieldDelegate *AddProcessPluginField() { + ProcessPluginFieldDelegate *delegate = new ProcessPluginFieldDelegate(); + m_fields.push_back(FieldDelegateUP(delegate)); + return delegate; + } + template <class T> ListFieldDelegate<T> *AddListField(const char *label, T default_field) { ListFieldDelegate<T> *delegate = @@ -2347,8 +2376,7 @@ class ProcessAttachFormDelegate : public FormDelegate { 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 @@ class ProcessAttachFormDelegate : public FormDelegate { return module_sp->GetFileSpec().GetFilename().AsCString(); } - std::vector<std::string> GetPossiblePluginNames() { - std::vector<std::string> names; - names.push_back("<default>"); - - 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 @@ class ProcessAttachFormDelegate : public FormDelegate { } else { attach_info.SetProcessID(m_pid_field->GetInteger()); } - if (m_plugin_field->GetChoiceContent() != "<default>") - attach_info.SetProcessPluginName(m_plugin_field->GetChoiceContent()); + attach_info.SetProcessPluginName(m_plugin_field->GetPluginName()); return attach_info; } @@ -2504,7 +2521,7 @@ class ProcessAttachFormDelegate : public FormDelegate { 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 { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits