From 08c5286c19fd78fa9d3b9f469a639c7a1013f22e Mon Sep 17 00:00:00 2001 From: Josh Ferrell Date: Thu, 9 May 2024 22:53:01 -0400 Subject: History widget --- python/filemetadata.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'python/filemetadata.py') diff --git a/python/filemetadata.py b/python/filemetadata.py index e0222fd2..a78f548b 100644 --- a/python/filemetadata.py +++ b/python/filemetadata.py @@ -32,6 +32,7 @@ from . import binaryview from . import database from . import deprecation from . import project +from . import undo ProgressFuncType = Callable[[int, int], bool] ViewName = str @@ -139,7 +140,6 @@ class FileMetadata: self._nav: Optional[NavigationHandler] = None assert _handle is not None self.handle = _handle - self._previous_undos = [] def __repr__(self): return f"" @@ -384,7 +384,6 @@ class FileMetadata: >>> """ id = core.BNBeginUndoActions(self.handle, anonymous_allowed) - self._previous_undos.append(id) return id def commit_undo_actions(self, id: Optional[str] = None) -> None: @@ -516,6 +515,40 @@ class FileMetadata: """ core.BNRedo(self.handle) + @property + def undo_entries(self) -> List['undo.UndoEntry']: + count = ctypes.c_ulonglong() + + entries = core.BNGetUndoEntries(self.handle, count) + assert entries is not None, "core.BNGetUndoEntries returned None" + + result = [] + try: + for i in range(0, count.value): + tag_handle = core.BNNewUndoEntryReference(entries[i]) + assert tag_handle is not None, "core.BNNewUndoEntryReference returned None" + result.append(undo.UndoEntry(tag_handle)) + return result + finally: + core.BNFreeUndoEntryList(entries, count.value) + + @property + def redo_entries(self) -> List['undo.UndoEntry']: + count = ctypes.c_ulonglong() + + entries = core.BNGetRedoEntries(self.handle, count) + assert entries is not None, "core.BNGetRedoEntries returned None" + + result = [] + try: + for i in range(0, count.value): + tag_handle = core.BNNewUndoEntryReference(entries[i]) + assert tag_handle is not None, "core.BNNewUndoEntryReference returned None" + result.append(undo.UndoEntry(tag_handle)) + return result + finally: + core.BNFreeUndoEntryList(entries, count.value) + def navigate(self, view: ViewName, offset: int) -> bool: """ ``navigate`` navigates the UI to the specified virtual address -- cgit v1.3.1