From 6ee1756d7ce6de4efdbdc2e42cac76eaaed8ce37 Mon Sep 17 00:00:00 2001 From: gooosedev <143697261+gooosedev@users.noreply.github.com> Date: Mon, 16 Jun 2025 10:08:50 +0200 Subject: [PATCH] ImMemView: Improved the copy paste feature, now we can copy and paste bytes in the view. --- UI/ImDebugger/ImMemView.cpp | 23 +++++++++++++++++++++-- UI/ImDebugger/ImMemView.h | 4 ++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/UI/ImDebugger/ImMemView.cpp b/UI/ImDebugger/ImMemView.cpp index 71f696bfd2..f3834becf7 100644 --- a/UI/ImDebugger/ImMemView.cpp +++ b/UI/ImDebugger/ImMemView.cpp @@ -351,6 +351,18 @@ void ImMemView::EditMemory(int newNibble) { ScrollCursor(1, GotoMode::RESET); } +void ImMemView::CopyToByteClipboard() { + byteClipboard_.clear(); + uint32_t size = selectRangeEnd_ - selectRangeStart_; + byteClipboard_.resize(size); + Memory::MemcpyUnchecked(byteClipboard_.data(), curAddress_, size); +} + +void ImMemView::PasteFromByteClipboard() { + if (editableMemory_) + Memory::MemcpyUnchecked(curAddress_, byteClipboard_.data(), byteClipboard_.size()); +} + void ImMemView::toggleEditableMemory(bool toggle) { editableMemory_ = toggle; } @@ -426,7 +438,14 @@ void ImMemView::PopupMenu() { break; } */ - + ImGui::SeparatorText("Internal clipboard"); + if (ImGui::MenuItem("Copy bytes")) { + CopyToByteClipboard(); + } + if (ImGui::MenuItem("Paste bytes")) { + PasteFromByteClipboard(); + } + ImGui::SeparatorText("System clipboard"); if (ImGui::MenuItem("Copy value (8-bit)")) { size_t tempSize = 3 * selectedSize + 1; char *temp = new char[tempSize]; @@ -524,7 +543,7 @@ void ImMemView::PopupMenu() { snprintf(temp, sizeof(temp), "0x%08X", curAddress_); System_CopyStringToClipboard(temp); } - + ImGui::SeparatorText("Misc"); if (ImGui::MenuItem("Goto in disasm")) { /* if (disasmWindow) { diff --git a/UI/ImDebugger/ImMemView.h b/UI/ImDebugger/ImMemView.h index 44d4464ff0..8c31086210 100644 --- a/UI/ImDebugger/ImMemView.h +++ b/UI/ImDebugger/ImMemView.h @@ -92,6 +92,10 @@ private: MemorySearchStatus status; } memSearch_; + std::vector byteClipboard_; + void CopyToByteClipboard(); + void PasteFromByteClipboard(); + static wchar_t szClassName[]; MIPSDebugInterface *debugger_ = nullptr;