diff options
| author | Alexander Khosrowshahi <alexk@vector35.com> | 2025-06-09 12:27:47 -0400 |
|---|---|---|
| committer | Alex Khosrowshahi <71569995+spoonmilk@users.noreply.github.com> | 2025-06-30 08:09:24 -0700 |
| commit | dc2911dac66c838e508fc3872bcbaee62e6d482a (patch) | |
| tree | bccdbc9bd81838267b3f56950df497c4b87c010f /interaction.cpp | |
| parent | ee50478d7b494ae4e62ae08986ce0b9229bc0fbc (diff) | |
Add Checkbox input support to python api
Diffstat (limited to 'interaction.cpp')
| -rw-r--r-- | interaction.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/interaction.cpp b/interaction.cpp index adc661c8..c25095bb 100644 --- a/interaction.cpp +++ b/interaction.cpp @@ -112,6 +112,17 @@ FormInputField FormInputField::DirectoryName(const string& prompt, const string& } +FormInputField FormInputField::Checkbox(const string& prompt, const bool& defaultChoice) +{ + FormInputField result; + result.type = CheckboxFormField; + result.prompt = prompt; + result.intDefault = defaultChoice; + result.hasDefault = true; + return result; +} + + void InteractionHandler::ShowMarkdownReport( Ref<BinaryView> view, const string& title, const string& contents, const string& plainText) { @@ -189,6 +200,12 @@ bool InteractionHandler::GetDirectoryNameInput(string& result, const string& pro } +bool InteractionHandler::GetCheckboxInput(int64_t& result, const std::string& prompt, const std::string& title, const int64_t& defaultChoice) +{ + return BinaryNinja::GetCheckboxInput(result, prompt, "Select an option", defaultChoice); +} + + static void ShowPlainTextReportCallback(void* ctxt, BNBinaryView* view, const char* title, const char* contents) { InteractionHandler* handler = (InteractionHandler*)ctxt; @@ -310,6 +327,13 @@ static bool GetDirectoryNameInputCallback(void* ctxt, char** result, const char* } +static bool GetCheckboxInputCallback(void* ctxt, int64_t* result, const char* prompt, const char* title, const int64_t* defaultChoice) +{ + InteractionHandler* handler = (InteractionHandler*)ctxt; + return handler->GetCheckboxInput(*result, prompt, title, *defaultChoice); +} + + static bool GetFormInputCallback(void* ctxt, BNFormInputField* fieldBuf, size_t count, const char* title) { InteractionHandler* handler = (InteractionHandler*)ctxt; @@ -353,6 +377,9 @@ static bool GetFormInputCallback(void* ctxt, BNFormInputField* fieldBuf, size_t case DirectoryNameFormField: fields.push_back(FormInputField::DirectoryName(fieldBuf[i].prompt, fieldBuf[i].defaultName)); break; + case CheckboxFormField: + fields.push_back(FormInputField::Checkbox(fieldBuf[i].prompt, fieldBuf[i].intDefault)); + break; default: fields.push_back(FormInputField::Label(fieldBuf[i].prompt)); break; @@ -369,6 +396,7 @@ static bool GetFormInputCallback(void* ctxt, BNFormInputField* fieldBuf, size_t case DirectoryNameFormField: fields.back().stringDefault = fieldBuf[i].stringDefault; break; + case CheckboxFormField: case IntegerFormField: fields.back().intDefault = fieldBuf[i].intDefault; break; @@ -399,6 +427,7 @@ static bool GetFormInputCallback(void* ctxt, BNFormInputField* fieldBuf, size_t case DirectoryNameFormField: fieldBuf[i].stringResult = BNAllocString(fields[i].stringResult.c_str()); break; + case CheckboxFormField: case IntegerFormField: fieldBuf[i].intResult = fields[i].intResult; break; @@ -460,6 +489,7 @@ void BinaryNinja::RegisterInteractionHandler(InteractionHandler* handler) cb.getOpenFileNameInput = GetOpenFileNameInputCallback; cb.getSaveFileNameInput = GetSaveFileNameInputCallback; cb.getDirectoryNameInput = GetDirectoryNameInputCallback; + cb.getCheckboxInput = GetCheckboxInputCallback; cb.getFormInput = GetFormInputCallback; cb.showMessageBox = ShowMessageBoxCallback; cb.openUrl = OpenUrlCallback; @@ -590,6 +620,12 @@ bool BinaryNinja::GetDirectoryNameInput(string& result, const string& prompt, co } +bool BinaryNinja::GetCheckboxInput(int64_t& result, const std::string& prompt, const std::string& title, const int64_t& defaultChoice) +{ + return BNGetCheckboxInput(&result, prompt.c_str(), title.c_str(), &defaultChoice); +} + + bool BinaryNinja::GetFormInput(vector<FormInputField>& fields, const string& title) { // Construct field list in core format @@ -635,6 +671,8 @@ bool BinaryNinja::GetFormInput(vector<FormInputField>& fields, const string& tit case DirectoryNameFormField: fieldBuf[i].stringDefault = fields[i].stringDefault.c_str(); break; + case CheckboxFormField: + fieldBuf[i].intDefault = fields[i].intDefault; case IntegerFormField: fieldBuf[i].intDefault = fields[i].intDefault; break; @@ -678,6 +716,7 @@ bool BinaryNinja::GetFormInput(vector<FormInputField>& fields, const string& tit case DirectoryNameFormField: fields[i].stringResult = fieldBuf[i].stringResult; break; + case CheckboxFormField: case IntegerFormField: fields[i].intResult = fieldBuf[i].intResult; break; |
