diff --git a/plugins/builtin/include/content/providers/memory_file_provider.hpp b/plugins/builtin/include/content/providers/memory_file_provider.hpp index b85cdc741..b94e02ada 100644 --- a/plugins/builtin/include/content/providers/memory_file_provider.hpp +++ b/plugins/builtin/include/content/providers/memory_file_provider.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include namespace hex::plugin::builtin::prv { @@ -29,7 +30,7 @@ namespace hex::plugin::builtin::prv { void save() override; void saveAs(const std::fs::path &path) override; - [[nodiscard]] std::string getName() const override { return "hex.builtin.provider.mem_file.unsaved"; } + [[nodiscard]] std::string getName() const override { return LangEntry("hex.builtin.provider.mem_file.unsaved"); } [[nodiscard]] std::vector> getDataInformation() const override { return { }; } [[nodiscard]] std::string getTypeName() const override { diff --git a/plugins/builtin/source/content/views/view_hex_editor.cpp b/plugins/builtin/source/content/views/view_hex_editor.cpp index 3bb926b0c..121c35a30 100644 --- a/plugins/builtin/source/content/views/view_hex_editor.cpp +++ b/plugins/builtin/source/content/views/view_hex_editor.cpp @@ -1320,7 +1320,7 @@ namespace hex::plugin::builtin { ImGui::SetClipboardText(result.c_str()); } - static void pasteBytes(const Region &selection) { + static void pasteBytes(const Region &selection, bool selectionCheck) { auto provider = ImHexApi::Provider::get(); std::string clipboard = ImGui::GetClipboardText(); @@ -1343,8 +1343,14 @@ namespace hex::plugin::builtin { // Convert hex string to bytes std::vector buffer = crypt::decode16(clipboard); + if (!selectionCheck) { + if (selection.getStartAddress() + buffer.size() >= provider->getActualSize()) + provider->resize(selection.getStartAddress() + buffer.size()); + } + // Write bytes - provider->write(selection.getStartAddress() + provider->getBaseAddress() + provider->getCurrentPageAddress(), buffer.data(), std::min(selection.size, buffer.size())); + auto size = selectionCheck ? std::min(buffer.size(), selection.getSize()) : buffer.size(); + provider->write(selection.getStartAddress() + provider->getBaseAddress() + provider->getCurrentPageAddress(), buffer.data(), size); } static void copyString(const Region &selection) { @@ -1520,7 +1526,13 @@ namespace hex::plugin::builtin { // Paste ShortcutManager::addShortcut(this, CTRL + Keys::V, [] { const auto selection = getSelection(); - pasteBytes(selection); + pasteBytes(selection, true); + }); + + // Paste and resize + ShortcutManager::addShortcut(this, CTRL + SHIFT + Keys::V, [] { + const auto selection = getSelection(); + pasteBytes(selection, false); }); // Undo / Redo @@ -1738,7 +1750,9 @@ namespace hex::plugin::builtin { } if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.paste"_lang, "CTRL + V", false, selection.has_value())) - pasteBytes(*selection); + pasteBytes(*selection, true); + if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.paste_all"_lang, "CTRL + V", false, selection.has_value())) + pasteBytes(*selection, false); if (ImGui::MenuItem("hex.builtin.view.hex_editor.menu.edit.select_all"_lang, "CTRL + A", false, selection.has_value() && providerValid)) ImHexApi::HexEditor::setSelection(provider->getBaseAddress(), provider->getActualSize()); diff --git a/plugins/builtin/source/lang/de_DE.cpp b/plugins/builtin/source/lang/de_DE.cpp index 1786ab310..2a0804bac 100644 --- a/plugins/builtin/source/lang/de_DE.cpp +++ b/plugins/builtin/source/lang/de_DE.cpp @@ -336,6 +336,7 @@ namespace hex::plugin::builtin { { "hex.builtin.view.hex_editor.copy.ascii", "Text Area" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "Einfügen" }, + { "hex.builtin.view.hex_editor.menu.edit.paste_all", "Alles einfügen" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "Alles auswählen" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "Basisadresse setzen" }, { "hex.builtin.view.hex_editor.menu.edit.resize", "Grösse ändern..." }, diff --git a/plugins/builtin/source/lang/en_US.cpp b/plugins/builtin/source/lang/en_US.cpp index 7af7531e0..bb62de416 100644 --- a/plugins/builtin/source/lang/en_US.cpp +++ b/plugins/builtin/source/lang/en_US.cpp @@ -339,6 +339,7 @@ namespace hex::plugin::builtin { { "hex.builtin.view.hex_editor.copy.ascii", "Text Area" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "Paste" }, + { "hex.builtin.view.hex_editor.menu.edit.paste_all", "Paste all" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "Select all" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "Set base address" }, { "hex.builtin.view.hex_editor.menu.edit.resize", "Resize..." }, diff --git a/plugins/builtin/source/lang/it_IT.cpp b/plugins/builtin/source/lang/it_IT.cpp index c6f6c9264..c0d78056b 100644 --- a/plugins/builtin/source/lang/it_IT.cpp +++ b/plugins/builtin/source/lang/it_IT.cpp @@ -341,6 +341,7 @@ namespace hex::plugin::builtin { //{ "hex.builtin.view.hex_editor.copy.ascii", "Text Area" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "Incolla" }, + //{ "hex.builtin.view.hex_editor.menu.edit.paste_all", "Paste all" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "Seleziona tutti" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "Imposta indirizzo di base" }, { "hex.builtin.view.hex_editor.menu.edit.resize", "Ridimensiona..." }, diff --git a/plugins/builtin/source/lang/ja_JP.cpp b/plugins/builtin/source/lang/ja_JP.cpp index fd2f0557e..5af93020b 100644 --- a/plugins/builtin/source/lang/ja_JP.cpp +++ b/plugins/builtin/source/lang/ja_JP.cpp @@ -340,6 +340,7 @@ namespace hex::plugin::builtin { //{ "hex.builtin.view.hex_editor.copy.ascii", "Text Area" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "貼り付け" }, + //{ "hex.builtin.view.hex_editor.menu.edit.paste_all", "Paste all" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "すべて選択" }, { "hex.builtin.view.hex_editor.menu.edit.bookmark", "ブックマークを作成" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "ベースアドレスをセット" }, diff --git a/plugins/builtin/source/lang/ko_KR.cpp b/plugins/builtin/source/lang/ko_KR.cpp index cc3be403b..48b4da3cc 100644 --- a/plugins/builtin/source/lang/ko_KR.cpp +++ b/plugins/builtin/source/lang/ko_KR.cpp @@ -338,6 +338,7 @@ namespace hex::plugin::builtin { //{ "hex.builtin.view.hex_editor.copy.ascii", "Text Area" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "붙여넣기" }, + //{ "hex.builtin.view.hex_editor.menu.edit.paste_all", "Paste all" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "모두 선택하기" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "베이스 주소 설정" }, { "hex.builtin.view.hex_editor.menu.edit.resize", "크기 변경..." }, diff --git a/plugins/builtin/source/lang/pt_BR.cpp b/plugins/builtin/source/lang/pt_BR.cpp index 4ead260e8..a0c9a373c 100644 --- a/plugins/builtin/source/lang/pt_BR.cpp +++ b/plugins/builtin/source/lang/pt_BR.cpp @@ -338,6 +338,7 @@ namespace hex::plugin::builtin { //{ "hex.builtin.view.hex_editor.copy.ascii", "Text Area" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "Colar" }, + //{ "hex.builtin.view.hex_editor.menu.edit.paste_all", "Paste all" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "Selecionar tudo" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "Definir endereço base" }, { "hex.builtin.view.hex_editor.menu.edit.resize", "Redimensionar..." }, diff --git a/plugins/builtin/source/lang/zh_CN.cpp b/plugins/builtin/source/lang/zh_CN.cpp index c7dd09eea..91da0c32c 100644 --- a/plugins/builtin/source/lang/zh_CN.cpp +++ b/plugins/builtin/source/lang/zh_CN.cpp @@ -341,6 +341,7 @@ namespace hex::plugin::builtin { { "hex.builtin.view.hex_editor.copy.ascii", "ASCII 文本" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "粘贴" }, + //{ "hex.builtin.view.hex_editor.menu.edit.paste_all", "Paste all" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "全选" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "设置基地址" }, { "hex.builtin.view.hex_editor.menu.edit.resize", "修改大小..." }, diff --git a/plugins/builtin/source/lang/zh_TW.cpp b/plugins/builtin/source/lang/zh_TW.cpp index ae0570bef..6fc99c6f5 100644 --- a/plugins/builtin/source/lang/zh_TW.cpp +++ b/plugins/builtin/source/lang/zh_TW.cpp @@ -338,6 +338,7 @@ namespace hex::plugin::builtin { // { "hex.builtin.view.hex_editor.copy.ascii", "Text Area" }, { "hex.builtin.view.hex_editor.copy.html", "HTML" }, { "hex.builtin.view.hex_editor.menu.edit.paste", "貼上" }, + //{ "hex.builtin.view.hex_editor.menu.edit.paste_all", "Paste all" }, { "hex.builtin.view.hex_editor.menu.edit.select_all", "全選" }, { "hex.builtin.view.hex_editor.menu.edit.set_base", "設置基址" }, { "hex.builtin.view.hex_editor.menu.edit.resize", "縮放..." },