diff options
Diffstat (limited to 'filemetadata.cpp')
| -rw-r--r-- | filemetadata.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/filemetadata.cpp b/filemetadata.cpp new file mode 100644 index 00000000..b214e826 --- /dev/null +++ b/filemetadata.cpp @@ -0,0 +1,148 @@ +#include "binaryninjaapi.h" + +using namespace BinaryNinja; +using namespace std; + + +char* NavigationHandler::GetCurrentViewCallback(void* ctxt) +{ + NavigationHandler* handler = (NavigationHandler*)ctxt; + string result = handler->GetCurrentView(); + return BNAllocString(result.c_str()); +} + + +uint64_t NavigationHandler::GetCurrentOffsetCallback(void* ctxt) +{ + NavigationHandler* handler = (NavigationHandler*)ctxt; + return handler->GetCurrentOffset(); +} + + +bool NavigationHandler::NavigateCallback(void* ctxt, const char* view, uint64_t offset) +{ + NavigationHandler* handler = (NavigationHandler*)ctxt; + return handler->Navigate(view, offset); +} + + +NavigationHandler::NavigationHandler() +{ + m_callbacks.context = this; + m_callbacks.getCurrentView = GetCurrentViewCallback; + m_callbacks.getCurrentOffset = GetCurrentOffsetCallback; + m_callbacks.navigate = NavigateCallback; +} + + +void UndoAction::UndoCallback(void* ctxt) +{ + UndoAction* action = (UndoAction*)ctxt; + action->Undo(); +} + + +void UndoAction::RedoCallback(void* ctxt) +{ + UndoAction* action = (UndoAction*)ctxt; + action->Redo(); +} + + +void UndoAction::Add(BNFileMetadata* file) +{ + BNAddUndoAction(file, this, UndoCallback, RedoCallback); +} + + +FileMetadata::FileMetadata() +{ + m_file = BNCreateFileMetadata(); +} + + +FileMetadata::FileMetadata(BNFileMetadata* file) +{ + m_file = file; +} + + +FileMetadata::~FileMetadata() +{ + BNFreeFileMetadata(m_file); +} + + +void FileMetadata::SetNavigationHandler(NavigationHandler* handler) +{ + BNSetFileMetadataNavigationHandler(m_file, handler->GetCallbacks()); +} + + +bool FileMetadata::IsModified() const +{ + return BNIsFileModified(m_file); +} + + +void FileMetadata::MarkFileModified() +{ + BNMarkFileModified(m_file); +} + + +void FileMetadata::MarkFileSaved() +{ + BNMarkFileSaved(m_file); +} + + +void FileMetadata::BeginUndoActions() +{ + BNBeginUndoActions(m_file); +} + + +void FileMetadata::AddUndoAction(UndoAction* action) +{ + action->Add(m_file); +} + + +void FileMetadata::CommitUndoActions() +{ + BNCommitUndoActions(m_file); +} + + +bool FileMetadata::Undo() +{ + return BNUndo(m_file); +} + + +bool FileMetadata::Redo() +{ + return BNRedo(m_file); +} + + +string FileMetadata::GetCurrentView() +{ + char* view = BNGetCurrentView(m_file); + string result = view; + BNFreeString(view); + return result; +} + + +uint64_t FileMetadata::GetCurrentOffset() +{ + return BNGetCurrentOffset(m_file); +} + + +bool FileMetadata::Navigate(const string& view, uint64_t offset) +{ + return BNNavigate(m_file, view.c_str(), offset); +} |
