From 9a5e2f94eacbd729b1671324b13e85487e1f1a11 Mon Sep 17 00:00:00 2001 From: mrexodia Date: Mon, 19 Dec 2016 23:25:21 +0100 Subject: [PATCH] GUI: fixed copy multiple lines --- src/gui/Src/BasicView/Disassembly.cpp | 5 +++-- src/gui/Src/BasicView/Disassembly.h | 2 +- src/gui/Src/Bridge/Bridge.cpp | 2 ++ src/gui/Src/Gui/CPUDisassembly.cpp | 15 +++++++++++++-- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/gui/Src/BasicView/Disassembly.cpp b/src/gui/Src/BasicView/Disassembly.cpp index 22a21a65..1129e07f 100644 --- a/src/gui/Src/BasicView/Disassembly.cpp +++ b/src/gui/Src/BasicView/Disassembly.cpp @@ -1589,7 +1589,7 @@ void Disassembly::prepareDataCount(const QList & wRVAs, QList & disassembled) +void Disassembly::prepareDataRange(dsint startRva, dsint endRva, const std::function & disassembled) { dsint wAddrPrev = startRva; dsint wAddr = wAddrPrev; @@ -1604,7 +1604,8 @@ void Disassembly::prepareDataRange(dsint startRva, dsint endRva, const std::func wAddr = getNextInstructionRVA(wAddr, 1); if(wAddr == wAddrPrev) break; - disassembled(i++, wInst); + if(!disassembled(i++, wInst)) + break; } } diff --git a/src/gui/Src/BasicView/Disassembly.h b/src/gui/Src/BasicView/Disassembly.h index f0d7ea32..c63bb2d4 100644 --- a/src/gui/Src/BasicView/Disassembly.h +++ b/src/gui/Src/BasicView/Disassembly.h @@ -98,7 +98,7 @@ public: QString getAddrText(dsint cur_addr, char label[MAX_LABEL_SIZE], bool getLabel = true); void prepareDataCount(const QList & wRVAs, QList* instBuffer); - void prepareDataRange(dsint startRva, dsint endRva, const std::function & disassembled); + void prepareDataRange(dsint startRva, dsint endRva, const std::function & disassembled); //misc void setCodeFoldingManager(CodeFoldingHelper* CodeFoldingManager); diff --git a/src/gui/Src/Bridge/Bridge.cpp b/src/gui/Src/Bridge/Bridge.cpp index 741e0d18..9239fad5 100644 --- a/src/gui/Src/Bridge/Bridge.cpp +++ b/src/gui/Src/Bridge/Bridge.cpp @@ -31,6 +31,8 @@ Bridge::~Bridge() void Bridge::CopyToClipboard(const QString & text) { + if(!text.length()) + return; QClipboard* clipboard = QApplication::clipboard(); clipboard->setText(text); GuiAddStatusBarMessage(tr("The data has been copied to clipboard.\n").toUtf8().constData()); diff --git a/src/gui/Src/Gui/CPUDisassembly.cpp b/src/gui/Src/Gui/CPUDisassembly.cpp index aefda9df..467ec464 100644 --- a/src/gui/Src/Gui/CPUDisassembly.cpp +++ b/src/gui/Src/Gui/CPUDisassembly.cpp @@ -1572,6 +1572,7 @@ void CPUDisassembly::pushSelectionInto(bool copyBytes, QTextStream & stream) if(copyBytes) stream << " | " + bytes.leftJustified(bytesLen, QChar(' '), true); stream << " | " + disassembly.leftJustified(disassemblyLen, QChar(' '), true) + " |" + fullComment; + return true; }); } @@ -1600,7 +1601,10 @@ void CPUDisassembly::copyAddressSlot() QString clipboard = ""; prepareDataRange(getSelectionStart(), getSelectionEnd(), [&](int i, const Instruction_t & inst) { - clipboard += ToPtrString(rvaToVa(inst.rva)) + "\r\n"; + if(i) + clipboard += "\r\n"; + clipboard += ToPtrString(rvaToVa(inst.rva)); + return true; }); Bridge::CopyToClipboard(clipboard); } @@ -1610,12 +1614,18 @@ void CPUDisassembly::copyRvaSlot() QString clipboard = ""; prepareDataRange(getSelectionStart(), getSelectionEnd(), [&](int i, const Instruction_t & inst) { + if(i) + clipboard += "\r\n"; duint addr = rvaToVa(inst.rva); duint base = DbgFunctions()->ModBaseFromAddr(addr); if(base) - clipboard += ToHexString(addr - base) + "\r\n"; + clipboard += ToHexString(addr - base); else + { SimpleWarningBox(this, tr("Error!"), tr("Selection not in a module...")); + return false; + } + return true; }); Bridge::CopyToClipboard(clipboard); } @@ -1629,6 +1639,7 @@ void CPUDisassembly::copyDisassemblySlot() clipboard += "\r\n"; for(const auto & token : inst.tokens.tokens) clipboard += token.text; + return true; }); Bridge::CopyToClipboard(clipboard); }