79 lines
1.9 KiB
C++
79 lines
1.9 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include <string>
|
||
|
|
||
|
#include <nlohmann/json.hpp>
|
||
|
|
||
|
#include <wolv/io/fs.hpp>
|
||
|
|
||
|
namespace hex::plugin::builtin::recent {
|
||
|
|
||
|
/**
|
||
|
* @brief Structure used to represent a recent other
|
||
|
*/
|
||
|
struct RecentEntry {
|
||
|
|
||
|
/**
|
||
|
* @brief Name that should be used to display the entry to the user
|
||
|
*/
|
||
|
std::string displayName;
|
||
|
|
||
|
/**
|
||
|
* @brief type of this entry. Might be a provider id (e.g. hex.builtin.provider.file)
|
||
|
* or "project" in case of a project
|
||
|
*/
|
||
|
std::string type;
|
||
|
|
||
|
/**
|
||
|
* @brief path of this entry file
|
||
|
*/
|
||
|
std::fs::path entryFilePath;
|
||
|
|
||
|
/**
|
||
|
* @brief Entire json data of the recent entry (include the fields above)
|
||
|
* Used for custom settings set by the providers
|
||
|
*/
|
||
|
nlohmann::json data;
|
||
|
|
||
|
bool operator==(const RecentEntry &other) const {
|
||
|
return HashFunction()(*this) == HashFunction()(other);
|
||
|
}
|
||
|
|
||
|
std::size_t getHash() const {
|
||
|
return HashFunction()(*this);
|
||
|
}
|
||
|
|
||
|
struct HashFunction {
|
||
|
std::size_t operator()(const RecentEntry& provider) const {
|
||
|
return
|
||
|
(std::hash<std::string>()(provider.displayName)) ^
|
||
|
(std::hash<std::string>()(provider.type) << 1);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
};
|
||
|
|
||
|
void registerEventHandlers();
|
||
|
|
||
|
/**
|
||
|
* @brief Scan the files in ImHexPath::Recent to get the recent entries, and delete duplicates.
|
||
|
*/
|
||
|
void updateRecentEntries();
|
||
|
|
||
|
/**
|
||
|
* @brief Load a recent entry in ImHex. The entry might be a provider of a project
|
||
|
* @param recentEntry entry to load
|
||
|
*/
|
||
|
void loadRecentEntry(const RecentEntry &recentEntry);
|
||
|
|
||
|
/**
|
||
|
* @brief Draw the recent providers in the welcome screen
|
||
|
*/
|
||
|
void draw();
|
||
|
|
||
|
/**
|
||
|
* @brief Draw the "open recent" item in the "File" menu
|
||
|
*/
|
||
|
void drawFileMenuItem();
|
||
|
|
||
|
}
|