diff options
| author | Mason Reed <mason@vector35.com> | 2026-02-22 22:42:35 -0800 |
|---|---|---|
| committer | Mason Reed <35282038+emesare@users.noreply.github.com> | 2026-02-23 00:09:44 -0800 |
| commit | d0eec62d6df0edbbb76dfeac58879797e90a8594 (patch) | |
| tree | 03cf8d04eb7d33ac0785f2eede92ecbd552a48b0 /plugin.cpp | |
| parent | f3e0bf4ab35d50b11b2dbde41a699ab7497208d1 (diff) | |
Add global plugin command type
Register plugins which are available outside the context of a binary view
Diffstat (limited to 'plugin.cpp')
| -rw-r--r-- | plugin.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -68,6 +68,13 @@ PluginCommand& PluginCommand::operator=(const PluginCommand& cmd) } +void PluginCommand::GlobalPluginCommandActionCallback(void* ctxt) +{ + RegisteredGlobalCommand* cmd = (RegisteredGlobalCommand*)ctxt; + cmd->action(); +} + + void PluginCommand::DefaultPluginCommandActionCallback(void* ctxt, BNBinaryView* view) { RegisteredDefaultCommand* cmd = (RegisteredDefaultCommand*)ctxt; @@ -172,6 +179,13 @@ void PluginCommand::ProjectPluginCommandActionCallback(void *ctxt, BNProject* pr } +bool PluginCommand::GlobalPluginCommandIsValidCallback(void* ctxt) +{ + RegisteredGlobalCommand* cmd = (RegisteredGlobalCommand*)ctxt; + return cmd->isValid(); +} + + bool PluginCommand::DefaultPluginCommandIsValidCallback(void* ctxt, BNBinaryView* view) { RegisteredDefaultCommand* cmd = (RegisteredDefaultCommand*)ctxt; @@ -276,6 +290,23 @@ bool PluginCommand::ProjectPluginCommandIsValidCallback(void* ctxt, BNProject* p } +void PluginCommand::RegisterGlobal(const string& name, const string& description, const function<void()>& action) +{ + RegisterGlobal(name, description, action, []() { return true; }); +} + + +void PluginCommand::RegisterGlobal(const string& name, const string& description, + const function<void()>& action, const function<bool()>& isValid) +{ + RegisteredGlobalCommand* cmd = new RegisteredGlobalCommand; + cmd->action = action; + cmd->isValid = isValid; + BNRegisterPluginCommandGlobal(name.c_str(), description.c_str(), GlobalPluginCommandActionCallback, + GlobalPluginCommandIsValidCallback, cmd); +} + + void PluginCommand::Register( const string& name, const string& description, const function<void(BinaryView* view)>& action) { @@ -515,6 +546,10 @@ bool PluginCommand::IsValid(const PluginCommandContext& ctxt) const { switch (m_command.type) { + case GlobalPluginCommand: + if (!m_command.globalIsValid) + return true; + return m_command.globalIsValid(m_command.context); case DefaultPluginCommand: if (!ctxt.binaryView) return false; @@ -606,6 +641,9 @@ void PluginCommand::Execute(const PluginCommandContext& ctxt) const switch (m_command.type) { + case GlobalPluginCommand: + m_command.globalCommand(m_command.context); + break; case DefaultPluginCommand: m_command.defaultCommand(m_command.context, ctxt.binaryView->GetObject()); break; |
