#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; private: MemoryEditor m_memoryEditor; 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::set m_highlightedPatterns; std::string m_loaderScriptScriptPath; std::string m_loaderScriptFilePath; hex::EncodingFile m_currEncodingFile; u8 m_highlightAlpha = 0x80; bool m_processingImportExport = false; 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 registerEvents(); void registerShortcuts(); }; }