#pragma once #include #include #include #include #include #include #include namespace hex::prv { class Provider; } namespace hex::plugin::builtin { 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(const std::string &path); void openFile(const std::string &path); bool saveToFile(const std::string &path, const std::vector& data); bool loadFromFile(const std::string &path, std::vector& data); enum class Language { C, Cpp, CSharp, Rust, Python, Java, JavaScript }; void copyBytes() const; void pasteBytes() const; void copyString() const; void copyLanguageArray(Language language) const; void copyHexView() const; void copyHexViewHTML() const; }; }