diff options
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; |
