mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-04-03 05:57:40 -05:00
feat: Added virtual files to the pattern language
This commit is contained in:
@@ -285,6 +285,7 @@ namespace hex {
|
||||
EVENT_DEF(RequestOpenFile, std::fs::path);
|
||||
EVENT_DEF(RequestChangeTheme, std::string);
|
||||
EVENT_DEF(RequestOpenPopup, std::string);
|
||||
EVENT_DEF(RequestAddVirtualFile, std::fs::path, std::vector<u8>, Region);
|
||||
|
||||
/**
|
||||
* @brief Creates a provider from it's unlocalized name, and add it to the provider list
|
||||
|
||||
@@ -202,6 +202,14 @@ namespace hex {
|
||||
*/
|
||||
void setSelection(u64 address, size_t size, prv::Provider *provider = nullptr);
|
||||
|
||||
/**
|
||||
* @brief Adds a virtual file to the list in the Hex Editor
|
||||
* @param path The path of the file
|
||||
* @param data The data of the file
|
||||
* @param region The location of the file in the Hex Editor if available
|
||||
*/
|
||||
void addVirtualFile(const std::fs::path &path, std::vector<u8> data, Region region = Region::Invalid());
|
||||
|
||||
}
|
||||
|
||||
/* Functions to interact with Bookmarks */
|
||||
|
||||
@@ -11,9 +11,15 @@ namespace hex::prv {
|
||||
class MemoryProvider : public hex::prv::Provider {
|
||||
public:
|
||||
MemoryProvider() = default;
|
||||
explicit MemoryProvider(std::vector<u8> data) : m_data(std::move(data)) { }
|
||||
explicit MemoryProvider(std::vector<u8> data, std::string name = "") : m_data(std::move(data)), m_name(std::move(name)) { }
|
||||
~MemoryProvider() override = default;
|
||||
|
||||
MemoryProvider(const MemoryProvider&) = delete;
|
||||
MemoryProvider& operator=(const MemoryProvider&) = delete;
|
||||
|
||||
MemoryProvider(MemoryProvider &&provider) noexcept = default;
|
||||
MemoryProvider& operator=(MemoryProvider &&provider) noexcept = default;
|
||||
|
||||
[[nodiscard]] bool isAvailable() const override { return true; }
|
||||
[[nodiscard]] bool isReadable() const override { return true; }
|
||||
[[nodiscard]] bool isWritable() const override { return true; }
|
||||
@@ -32,7 +38,7 @@ namespace hex::prv {
|
||||
void insertRaw(u64 offset, u64 size) override;
|
||||
void removeRaw(u64 offset, u64 size) override;
|
||||
|
||||
[[nodiscard]] std::string getName() const override { return ""; }
|
||||
[[nodiscard]] std::string getName() const override { return m_name; }
|
||||
|
||||
[[nodiscard]] std::string getTypeName() const override { return "MemoryProvider"; }
|
||||
private:
|
||||
|
||||
@@ -37,6 +37,11 @@ namespace hex::prv {
|
||||
|
||||
Provider();
|
||||
virtual ~Provider();
|
||||
Provider(const Provider&) = delete;
|
||||
Provider& operator=(const Provider&) = delete;
|
||||
|
||||
Provider(Provider &&provider) noexcept = default;
|
||||
Provider& operator=(Provider &&provider) noexcept = default;
|
||||
|
||||
/**
|
||||
* @brief Opens this provider
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <hex/api/event_manager.hpp>
|
||||
|
||||
#include <map>
|
||||
#include <ranges>
|
||||
#include <utility>
|
||||
|
||||
namespace hex {
|
||||
@@ -71,10 +72,21 @@ namespace hex {
|
||||
return this->get();
|
||||
}
|
||||
|
||||
auto all() {
|
||||
return m_data | std::views::values;
|
||||
}
|
||||
|
||||
void setOnCreateCallback(std::function<void(prv::Provider *, T&)> callback) {
|
||||
m_onCreateCallback = std::move(callback);
|
||||
}
|
||||
|
||||
private:
|
||||
void onCreate() {
|
||||
EventProviderOpened::subscribe(this, [this](prv::Provider *provider) {
|
||||
m_data.emplace(provider, T());
|
||||
auto [it, inserted] = m_data.emplace(provider, T());
|
||||
auto &[key, value] = *it;
|
||||
if (m_onCreateCallback)
|
||||
m_onCreateCallback(key, value);
|
||||
});
|
||||
|
||||
EventProviderDeleted::subscribe(this, [this](prv::Provider *provider){
|
||||
@@ -111,6 +123,7 @@ namespace hex {
|
||||
|
||||
private:
|
||||
std::map<prv::Provider *, T> m_data;
|
||||
std::function<void(prv::Provider *, T&)> m_onCreateCallback;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user