1
0
mirror of synced 2024-11-28 09:30:51 +01:00

impr: Better sorting of hex cell visualizers

This commit is contained in:
WerWolv 2023-06-21 17:48:51 +02:00
parent 98395afe9d
commit da11c47693
5 changed files with 28 additions and 19 deletions

View File

@ -723,9 +723,9 @@ namespace hex {
namespace impl { namespace impl {
void addDataVisualizer(const std::string &unlocalizedName, DataVisualizer *visualizer); void addDataVisualizer(std::shared_ptr<DataVisualizer> &&visualizer);
std::map<std::string, DataVisualizer*> &getVisualizers(); std::vector<std::shared_ptr<DataVisualizer>> &getVisualizers();
} }
@ -737,10 +737,16 @@ namespace hex {
*/ */
template<std::derived_from<DataVisualizer> T, typename... Args> template<std::derived_from<DataVisualizer> T, typename... Args>
void addDataVisualizer(Args &&...args) { void addDataVisualizer(Args &&...args) {
auto visualizer = new T(std::forward<Args>(args)...); return impl::addDataVisualizer(std::make_shared<T>(std::forward<Args>(args)...));
return impl::addDataVisualizer(visualizer->getUnlocalizedName(), visualizer);
} }
/**
* @brief Gets a data visualizer by its unlocalized nameb
* @param unlocalizedName Unlocalized name of the data visualizer
* @return The data visualizer, or nullptr if it doesn't exist
*/
std::shared_ptr<DataVisualizer> getVisualizerByName(const std::string &unlocalizedName);
} }
/* Hash Registry. Allows adding new hashes to the Hash view */ /* Hash Registry. Allows adding new hashes to the Hash view */

View File

@ -754,19 +754,28 @@ namespace hex {
namespace impl { namespace impl {
void addDataVisualizer(const std::string &unlocalizedName, DataVisualizer *visualizer) { void addDataVisualizer(std::shared_ptr<DataVisualizer> &&visualizer) {
getVisualizers().insert({ unlocalizedName, visualizer }); getVisualizers().emplace_back(std::move(visualizer));
} }
std::map<std::string, DataVisualizer*> &getVisualizers() { std::vector<std::shared_ptr<DataVisualizer>> &getVisualizers() {
static std::map<std::string, DataVisualizer*> visualizers; static std::vector<std::shared_ptr<DataVisualizer>> visualizers;
return visualizers; return visualizers;
} }
} }
std::shared_ptr<DataVisualizer> getVisualizerByName(const std::string &unlocalizedName) {
for (const auto &visualizer : impl::getVisualizers()) {
if (visualizer->getUnlocalizedName() == unlocalizedName)
return visualizer;
}
return nullptr;
}
} }

View File

@ -364,6 +364,7 @@ namespace hex::init {
ContentRegistry::DataFormatter::impl::getEntries().clear(); ContentRegistry::DataFormatter::impl::getEntries().clear();
ContentRegistry::FileHandler::impl::getEntries().clear(); ContentRegistry::FileHandler::impl::getEntries().clear();
ContentRegistry::Hashes::impl::getHashes().clear(); ContentRegistry::Hashes::impl::getHashes().clear();
ContentRegistry::HexEditor::impl::getVisualizers().clear();
ContentRegistry::BackgroundServices::impl::stopServices(); ContentRegistry::BackgroundServices::impl::stopServices();
ContentRegistry::BackgroundServices::impl::getServices().clear(); ContentRegistry::BackgroundServices::impl::getServices().clear();
@ -374,12 +375,6 @@ namespace hex::init {
ThemeManager::reset(); ThemeManager::reset();
{
auto &visualizers = ContentRegistry::HexEditor::impl::getVisualizers();
for (auto &[name, visualizer] : visualizers)
delete visualizer;
visualizers.clear();
}
ProjectFile::getHandlers().clear(); ProjectFile::getHandlers().clear();
ProjectFile::getProviderHandlers().clear(); ProjectFile::getProviderHandlers().clear();

View File

@ -192,7 +192,7 @@ namespace hex::plugin::builtin::ui {
float m_scrollPosition = 0; float m_scrollPosition = 0;
u16 m_bytesPerRow = 16; u16 m_bytesPerRow = 16;
ContentRegistry::HexEditor::DataVisualizer *m_currDataVisualizer; std::shared_ptr<ContentRegistry::HexEditor::DataVisualizer> m_currDataVisualizer;
char m_unknownDataCharacter = '?'; char m_unknownDataCharacter = '?';
bool m_shouldJumpToSelection = false; bool m_shouldJumpToSelection = false;

View File

@ -1,6 +1,5 @@
#include <ui/hex_editor.hpp> #include <ui/hex_editor.hpp>
#include <hex/api/imhex_api.hpp>
#include <hex/api/content_registry.hpp> #include <hex/api/content_registry.hpp>
#include <hex/api/localization.hpp> #include <hex/api/localization.hpp>
@ -71,7 +70,7 @@ namespace hex::plugin::builtin::ui {
/* Hex Editor */ /* Hex Editor */
HexEditor::HexEditor(prv::Provider *provider) : m_provider(provider) { HexEditor::HexEditor(prv::Provider *provider) : m_provider(provider) {
this->m_currDataVisualizer = ContentRegistry::HexEditor::impl::getVisualizers()["hex.builtin.visualizer.hexadecimal.8bit"]; this->m_currDataVisualizer = ContentRegistry::HexEditor::getVisualizerByName("hex.builtin.visualizer.hexadecimal.8bit");
EventManager::subscribe<EventSettingsChanged>(this, [this] { EventManager::subscribe<EventSettingsChanged>(this, [this] {
{ {
@ -802,8 +801,8 @@ namespace hex::plugin::builtin::ui {
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x);
if (ImGui::BeginCombo("##visualizer", LangEntry(this->m_currDataVisualizer->getUnlocalizedName()))) { if (ImGui::BeginCombo("##visualizer", LangEntry(this->m_currDataVisualizer->getUnlocalizedName()))) {
for (const auto &[unlocalizedName, visualizer] : visualizers) { for (const auto &visualizer : visualizers) {
if (ImGui::Selectable(LangEntry(unlocalizedName))) { if (ImGui::Selectable(LangEntry(visualizer->getUnlocalizedName()))) {
this->m_currDataVisualizer = visualizer; this->m_currDataVisualizer = visualizer;
} }
} }