From 315a3ebdebc20b91fd509be4f3eca600f716c601 Mon Sep 17 00:00:00 2001 From: hjk <qthjk@ovi.com> Date: Tue, 9 Oct 2012 22:34:36 +0200 Subject: [PATCH] Debugger: make breakpoint markers draggable Change-Id: I6139badeb8cb8b20e653ce9f6685c0e577123617 Reviewed-by: David Schulz <david.schulz@digia.com> --- src/plugins/debugger/breakhandler.cpp | 20 ++++++++++++++++++++ src/plugins/debugger/breakhandler.h | 2 ++ src/plugins/debugger/breakpointmarker.cpp | 5 +++++ src/plugins/debugger/breakpointmarker.h | 2 ++ 4 files changed, 29 insertions(+) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 2c1327d02fd..f66e8031f18 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -37,6 +37,7 @@ #include "debuggerstringutils.h" #include "stackframe.h" +#include <extensionsystem/invoker.h> #include <utils/hostosinfo.h> #include <utils/qtcassert.h> @@ -1258,6 +1259,25 @@ void BreakHandler::updateLineNumberFromMarker(BreakpointModelId id, int lineNumb emit layoutChanged(); } +void BreakHandler::changeLineNumberFromMarker(BreakpointModelId id, int lineNumber) +{ + // We need to delay this as it is called from a marker which will be destroyed. + ExtensionSystem::InvokerBase invoker; + invoker.addArgument(id); + invoker.addArgument(lineNumber); + invoker.setConnectionType(Qt::QueuedConnection); + invoker.invoke(this, "changeLineNumberFromMarkerHelper"); + QTC_CHECK(invoker.wasSuccessful()); +} + +void BreakHandler::changeLineNumberFromMarkerHelper(BreakpointModelId id, int lineNumber) +{ + BreakpointParameters data = breakpointData(id); + data.lineNumber = lineNumber; + removeBreakpoint(id); + appendBreakpoint(data); +} + BreakpointModelIds BreakHandler::allBreakpointIds() const { BreakpointModelIds ids; diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index 750d2faff3c..7e6eb46a9bd 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -133,6 +133,7 @@ public: void setEnabled(BreakpointModelId id, bool on); void updateFileNameFromMarker(BreakpointModelId id, const QString &fileName); void updateLineNumberFromMarker(BreakpointModelId id, int lineNumber); + void changeLineNumberFromMarker(BreakpointModelId id, int lineNumber); void setMarkerFileAndLine(BreakpointModelId id, const QString &fileName, int lineNumber); bool isOneShot(BreakpointModelId id) const; @@ -189,6 +190,7 @@ private: void loadBreakpoints(); void saveBreakpoints(); void cleanupBreakpoint(BreakpointModelId id); + Q_SLOT void changeLineNumberFromMarkerHelper(Debugger::Internal::BreakpointModelId id, int lineNumber); struct BreakpointItem { diff --git a/src/plugins/debugger/breakpointmarker.cpp b/src/plugins/debugger/breakpointmarker.cpp index 412bc5ade1f..0821ec1063f 100644 --- a/src/plugins/debugger/breakpointmarker.cpp +++ b/src/plugins/debugger/breakpointmarker.cpp @@ -68,6 +68,11 @@ void BreakpointMarker::updateLineNumber(int lineNumber) breakHandler()->updateLineNumberFromMarker(m_id, lineNumber); } +void BreakpointMarker::dragToLine(int lineNumber) +{ + breakHandler()->changeLineNumberFromMarker(m_id, lineNumber); +} + void BreakpointMarker::updateFileName(const QString &fileName) { BaseTextMark::updateFileName(fileName); diff --git a/src/plugins/debugger/breakpointmarker.h b/src/plugins/debugger/breakpointmarker.h index 9f6f083828c..0a972d43756 100644 --- a/src/plugins/debugger/breakpointmarker.h +++ b/src/plugins/debugger/breakpointmarker.h @@ -46,6 +46,8 @@ public: void removedFromEditor(); void updateLineNumber(int lineNumber); void updateFileName(const QString &fileName); + bool isDraggable() const { return true; } + void dragToLine(int lineNumber); private: BreakpointModelId m_id; -- GitLab