#pragma once #include "helpers/utils.hpp" #include "views/view.hpp" #include "imgui_memory_editor.h" #include "ImGuiFileBrowser.h" #include #include #include #include "lang/pattern_data.hpp" namespace hex { namespace prv { class Provider; } using SearchFunction = std::vector> (*)(prv::Provider* &provider, std::string string); class ViewHexEditor : public View { public: ViewHexEditor(prv::Provider* &dataProvider, std::vector &patternData); ~ViewHexEditor() override; void createView() override; void createMenu() override; bool handleShortcut(int key, int mods) override; private: MemoryEditor m_memoryEditor; imgui_addons::ImGuiFileBrowser m_fileBrowser; prv::Provider* &m_dataProvider; std::vector &m_patternData; char m_searchStringBuffer[0xFFFF] = { 0 }; char m_searchHexBuffer[0xFFFF] = { 0 }; SearchFunction m_searchFunction = nullptr; std::vector> *m_lastSearchBuffer; s64 m_lastSearchIndex = 0; std::vector> m_lastStringSearch; std::vector> m_lastHexSearch; s64 m_gotoAddress = 0; std::vector m_dataToSave; std::string m_loaderScriptScriptPath; std::string m_loaderScriptFilePath; void drawSearchPopup(); void drawGotoPopup(); void openFile(std::string path); bool saveToFile(std::string path, const std::vector& data); bool loadFromFile(std::string path, std::vector& data); enum class Language { C, Cpp, CSharp, Rust, Python, Java, JavaScript }; void copyBytes(); void copyString(); void copyLanguageArray(Language language); void copyHexView(); void copyHexViewHTML(); }; }