#pragma once #include #include #include "helpers/encoding_file.hpp" #include #include #include #include #include #include namespace hex { namespace prv { class Provider; } using SearchFunction = std::vector> (*)(prv::Provider* &provider, std::string string); class ViewHexEditor : public View { public: ViewHexEditor(); ~ViewHexEditor() override; void drawContent() override; void drawAlwaysVisible() override; void drawMenu() override; bool handleShortcut(bool keys[512], bool ctrl, bool shift, bool alt) override; private: MemoryEditor m_memoryEditor; std::map m_highlightedBytes; std::vector m_searchStringBuffer; std::vector m_searchHexBuffer; SearchFunction m_searchFunction = nullptr; std::vector> *m_lastSearchBuffer; s64 m_lastSearchIndex = 0; std::vector> m_lastStringSearch; std::vector> m_lastHexSearch; s64 m_gotoAddress = 0; char m_baseAddressBuffer[0x20] = { 0 }; u64 m_resizeSize = 0; std::vector m_dataToSave; std::string m_loaderScriptScriptPath; std::string m_loaderScriptFilePath; hex::EncodingFile m_currEncodingFile; u8 m_highlightAlpha = 0x80; void drawSearchPopup(); void drawGotoPopup(); void drawEditPopup(); bool createFile(std::string_view path); void openFile(std::string_view path); bool saveToFile(std::string_view path, const std::vector& data); bool loadFromFile(std::string_view path, std::vector& data); enum class Language { C, Cpp, CSharp, Rust, Python, Java, JavaScript }; void copyBytes(); void pasteBytes(); void copyString(); void copyLanguageArray(Language language); void copyHexView(); void copyHexViewHTML(); }; }