This patch adds initial support for forms for the LLDB GUI. The currently
supported form elements are Text fields, Integer fields, Boolean fields, Choices
fields, File fields, Directory fields, and List fields.
A form can be created by subclassing FormDelegate. In the constructor, field
factory methods can be used to add new fields, storing the returned pointer in a
member variable. One or more actions can be added using the AddAction method.
The method takes a function with an interface void(Window &). This function will
be executed whenever the user executes the action.
Example form definition:
class TestFormDelegate : public FormDelegate { public: TestFormDelegate() { m_text_field = AddTextField("Text", "The big brown fox."); m_file_field = AddFileField("File", "/tmp/a"); m_directory_field = AddDirectoryField("Directory", "/tmp/"); m_integer_field = AddIntegerField("Number", 5); std::vector<std::string> choices; choices.push_back(std::string("Choice 1")); choices.push_back(std::string("Choice 2")); choices.push_back(std::string("Choice 3")); choices.push_back(std::string("Choice 4")); choices.push_back(std::string("Choice 5")); m_choices_field = AddChoicesField("Choices", 3, choices); m_bool_field = AddBooleanField("Boolean", true); TextFieldDelegate default_field = TextFieldDelegate("Text", "The big brown fox."); m_text_list_field = AddListField("Text List", default_field); AddAction("Submit", [this](Window &window) { Submit(window); }); } void Submit(Window &window) { SetError("An example error."); } protected: TextFieldDelegate *m_text_field; FileFieldDelegate *m_file_field; DirectoryFieldDelegate *m_directory_field; IntegerFieldDelegate *m_integer_field; BooleanFieldDelegate *m_bool_field; ChoicesFieldDelegate *m_choices_field; ListFieldDelegate<TextFieldDelegate> *m_text_list_field; };
move this below function below PutCStringTruncated so that PutCStringTruncated doesn't appear to be edited.