summaryrefslogtreecommitdiff
path: root/filemetadata.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-02-12 14:34:50 -0500
committerRusty Wagner <rusty@vector35.com>2015-02-12 14:34:50 -0500
commit83b01dd50407731d14938ac96894c3a4d9065295 (patch)
tree2e3ded7103b51aef0d5cd22434e35f4461aeaeba /filemetadata.cpp
parent6b431b32e32f00f9203ba2a4ca07cc962cdb22aa (diff)
Place API code with the associated class
Diffstat (limited to 'filemetadata.cpp')
-rw-r--r--filemetadata.cpp148
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);
+}