From c73f33aac2dddb0cce730f42b0fe81315954ca78 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 6 Apr 2023 17:36:28 +0200 Subject: [PATCH] impr: Added various new events --- lib/libimhex/include/hex/api/event.hpp | 7 +++++++ lib/libimhex/source/providers/provider.cpp | 10 ++++++++-- plugins/builtin/source/content/providers.cpp | 2 +- .../builtin/source/content/providers/file_provider.cpp | 1 + .../builtin/source/content/providers/gdb_provider.cpp | 1 + .../builtin/source/content/views/view_bookmarks.cpp | 2 ++ .../source/content/views/view_pattern_editor.cpp | 5 ++++- plugins/builtin/source/content/views/view_store.cpp | 4 ++++ 8 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lib/libimhex/include/hex/api/event.hpp b/lib/libimhex/include/hex/api/event.hpp index fcfea641e..2b6ca613e 100644 --- a/lib/libimhex/include/hex/api/event.hpp +++ b/lib/libimhex/include/hex/api/event.hpp @@ -156,10 +156,17 @@ namespace hex { EVENT_DEF(EventProviderClosing, prv::Provider *, bool *); EVENT_DEF(EventProviderClosed, prv::Provider *); EVENT_DEF(EventProviderDeleted, prv::Provider *); + EVENT_DEF(EventProviderSaved, prv::Provider *); EVENT_DEF(EventFrameBegin); EVENT_DEF(EventFrameEnd); EVENT_DEF(EventWindowInitialized); EVENT_DEF(EventSetTaskBarIconState, u32, u32, u32); + EVENT_DEF(EventBookmarkCreated, ImHexApi::Bookmarks::Entry&); + EVENT_DEF(EventPatchCreated, u64, u8, u8); + EVENT_DEF(EventPatternExecuted, const std::string&); + EVENT_DEF(EventPatternEditorChanged, const std::string&); + EVENT_DEF(EventStoreContentDownloaded, const std::fs::path&); + EVENT_DEF(EventStoreContentRemoved, const std::fs::path&); EVENT_DEF(RequestOpenWindow, std::string); EVENT_DEF(RequestSelectionChange, Region); diff --git a/lib/libimhex/source/providers/provider.cpp b/lib/libimhex/source/providers/provider.cpp index 761ee6e97..af21f7a3a 100644 --- a/lib/libimhex/source/providers/provider.cpp +++ b/lib/libimhex/source/providers/provider.cpp @@ -35,7 +35,9 @@ namespace hex::prv { this->markDirty(); } - void Provider::save() { } + void Provider::save() { + EventManager::post(this); + } void Provider::saveAs(const std::fs::path &path) { wolv::io::File file(path, wolv::io::File::Mode::Create); @@ -56,8 +58,9 @@ namespace hex::prv { this->read(offset + this->getBaseAddress(), buffer.data(), bufferSize, true); file.writeBuffer(buffer.data(), bufferSize); - } + + EventManager::post(this); } } @@ -222,9 +225,12 @@ namespace hex::prv { getPatches().erase(offset + i); else getPatches()[offset + i] = patch; + + EventManager::post(offset, originalValue, patch); } this->markDirty(); + } void Provider::createUndoPoint() { diff --git a/plugins/builtin/source/content/providers.cpp b/plugins/builtin/source/content/providers.cpp index 4927c28aa..e3bdbf314 100644 --- a/plugins/builtin/source/content/providers.cpp +++ b/plugins/builtin/source/content/providers.cpp @@ -52,7 +52,7 @@ namespace hex::plugin::builtin { }); } }; - + if (provider == nullptr) { success = false; continue; diff --git a/plugins/builtin/source/content/providers/file_provider.cpp b/plugins/builtin/source/content/providers/file_provider.cpp index 6d73fec2a..b99175f20 100644 --- a/plugins/builtin/source/content/providers/file_provider.cpp +++ b/plugins/builtin/source/content/providers/file_provider.cpp @@ -83,6 +83,7 @@ namespace hex::plugin::builtin { void FileProvider::save() { this->applyPatches(); + Provider::save(); } void FileProvider::saveAs(const std::fs::path &path) { diff --git a/plugins/builtin/source/content/providers/gdb_provider.cpp b/plugins/builtin/source/content/providers/gdb_provider.cpp index 3d11bf156..81cdacaaa 100644 --- a/plugins/builtin/source/content/providers/gdb_provider.cpp +++ b/plugins/builtin/source/content/providers/gdb_provider.cpp @@ -219,6 +219,7 @@ namespace hex::plugin::builtin { void GDBProvider::save() { this->applyPatches(); + Provider::save(); } size_t GDBProvider::getActualSize() const { diff --git a/plugins/builtin/source/content/views/view_bookmarks.cpp b/plugins/builtin/source/content/views/view_bookmarks.cpp index afb64a58c..612ffc77c 100644 --- a/plugins/builtin/source/content/views/view_bookmarks.cpp +++ b/plugins/builtin/source/content/views/view_bookmarks.cpp @@ -36,6 +36,8 @@ namespace hex::plugin::builtin { }); ImHexApi::Provider::markDirty(); + + EventManager::post(ProviderExtraData::getCurrent().bookmarks.back()); }); ImHexApi::HexEditor::addBackgroundHighlightingProvider([](u64 address, const u8* data, size_t size, bool) -> std::optional { diff --git a/plugins/builtin/source/content/views/view_pattern_editor.cpp b/plugins/builtin/source/content/views/view_pattern_editor.cpp index 16f47aac8..9b444e720 100644 --- a/plugins/builtin/source/content/views/view_pattern_editor.cpp +++ b/plugins/builtin/source/content/views/view_pattern_editor.cpp @@ -181,8 +181,10 @@ namespace hex::plugin::builtin { if (this->m_hasUnevaluatedChanges && this->m_runningEvaluators == 0 && this->m_runningParsers == 0) { this->m_hasUnevaluatedChanges = false; + auto code = this->m_textEditor.GetText(); + EventManager::post(code); - TaskManager::createBackgroundTask("Pattern Parsing", [this, code = this->m_textEditor.GetText(), provider](auto &){ + TaskManager::createBackgroundTask("Pattern Parsing", [this, code, provider](auto &){ this->parsePattern(code, provider); if (this->m_runAutomatically) @@ -697,6 +699,7 @@ namespace hex::plugin::builtin { ContentRegistry::PatternLanguage::configureRuntime(*patternLanguage.runtime, provider); EventManager::post(); + EventManager::post(code); TaskManager::createTask("hex.builtin.view.pattern_editor.evaluating", TaskManager::NoProgress, [this, &patternLanguage, code](auto &task) { std::scoped_lock lock(patternLanguage.runtimeMutex); diff --git a/plugins/builtin/source/content/views/view_store.cpp b/plugins/builtin/source/content/views/view_store.cpp index 7cec6cead..64a984679 100644 --- a/plugins/builtin/source/content/views/view_store.cpp +++ b/plugins/builtin/source/content/views/view_store.cpp @@ -99,6 +99,9 @@ namespace hex::plugin::builtin { if (entry.isFolder) { Tar tar(this->m_downloadPath, Tar::Mode::Read); tar.extractAll(this->m_downloadPath.parent_path() / this->m_downloadPath.stem()); + EventManager::post(this->m_downloadPath.parent_path() / this->m_downloadPath.stem()); + } else { + EventManager::post(this->m_downloadPath); } downloadDoneCallback(); @@ -286,6 +289,7 @@ namespace hex::plugin::builtin { wolv::io::fs::removeAll(folderPath); removed = removed && !wolv::io::fs::exists(filePath) && !wolv::io::fs::exists(folderPath); + EventManager::post(filePath); } return removed;