From f3d38de9132bfc2b120838abc007f97ca1312bd2 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Fri, 25 Jun 2010 15:02:53 +0200 Subject: [PATCH] debugger: fix breakpoint toggling of "moved" breakpoints --- src/plugins/debugger/breakhandler.cpp | 49 +++++++++++------------- src/plugins/debugger/breakhandler.h | 2 +- src/plugins/debugger/breakwindow.cpp | 12 ------ src/plugins/debugger/breakwindow.h | 4 +- src/plugins/debugger/debuggerconstants.h | 3 +- src/plugins/debugger/debuggerengine.cpp | 13 ++++--- src/plugins/debugger/debuggerplugin.cpp | 19 ++------- 7 files changed, 39 insertions(+), 63 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 3e1d2f97e8d..3492fbbdd8c 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -372,10 +372,12 @@ BreakHandler::BreakHandler(DebuggerEngine *engine) m_disabledBreakpointIcon(_(":/debugger/images/breakpoint_disabled_16.png")), m_pendingBreakPointIcon(_(":/debugger/images/breakpoint_pending_16.png")), m_watchpointIcon(_(":/debugger/images/watchpoint.png")), - m_engine(engine), // Possibly 0 for the dummy engine "handling" session data. + m_engine(engine), m_lastFound(0), m_lastFoundQueried(false) -{} +{ + QTC_ASSERT(m_engine, /**/); +} BreakHandler::~BreakHandler() { @@ -737,27 +739,11 @@ bool BreakHandler::setData(const QModelIndex &index, const QVariant &value, int return true; } - case RequestRemoveBreakpointRole: { - BreakpointData *data = value.value<BreakpointData *>(); - QTC_ASSERT(data, return false); - removeBreakpoint(data); - return true; - } - - case RequestAppendBreakpointRole: { - BreakpointData *data = value.value<BreakpointData *>(); - QTC_ASSERT(data, return false); - appendBreakpoint(data); - if (m_engine) - m_engine->attemptBreakpointSynchronization(); - return true; - } - case RequestUpdateBreakpointRole: { BreakpointData *data = value.value<BreakpointData *>(); QTC_ASSERT(data, return false); - if (m_engine) - m_engine->attemptBreakpointSynchronization(); + QTC_ASSERT(m_engine, return false); + m_engine->attemptBreakpointSynchronization(); return true; } @@ -940,14 +926,25 @@ void BreakHandler::removeAllBreakpoints() updateMarkers(); } -/* -void BreakHandler::setAllPending() +void BreakHandler::toggleBreakpoint(const QString &fileName, int lineNumber) { - for (int index = size(); --index >= 0;) - at(index)->pending = true; - updateMarkers(); + for (int index = size(); --index >= 0;) { + BreakpointData *data = m_bp.at(index); + if (data->isLocatedAt(fileName, lineNumber)) { + removeBreakpointHelper(index); + emit layoutChanged(); + return; + } + } + BreakpointData *data = new BreakpointData; + data->fileName = fileName; + data->lineNumber = QByteArray::number(lineNumber); + data->pending = true; + data->setMarkerFileName(fileName); + data->setMarkerLineNumber(lineNumber); + appendBreakpoint(data); + m_engine->attemptBreakpointSynchronization(); } -*/ void BreakHandler::saveSessionData() { diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index 4e856cfef10..0bd7ec202ed 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -56,7 +56,6 @@ public: ~BreakHandler(); void removeAllBreakpoints(); - //void setAllPending(); void loadSessionData(); void saveSessionData(); @@ -88,6 +87,7 @@ public: void initializeFromTemplate(BreakHandler *other); void storeToTemplate(BreakHandler *other); + void toggleBreakpoint(const QString &fileName, int lineNumber); public slots: void appendBreakpoint(BreakpointData *data); diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp index 0195ba3c516..a510ff6ecac 100644 --- a/src/plugins/debugger/breakwindow.cpp +++ b/src/plugins/debugger/breakwindow.cpp @@ -421,18 +421,6 @@ BreakpointData *BreakWindow::findSimilarBreakpoint(const BreakpointData *needle0 return v.value<BreakpointData *>(); } -void BreakWindow::appendBreakpoint(BreakpointData *data) -{ - QVariant v = QVariant::fromValue<BreakpointData *>(data); - setModelData(RequestAppendBreakpointRole, v); -} - -void BreakWindow::removeBreakpoint(BreakpointData *data) -{ - QVariant v = QVariant::fromValue<BreakpointData *>(data); - setModelData(RequestRemoveBreakpointRole, v); -} - void BreakWindow::updateBreakpoint(BreakpointData *data) { QVariant v = QVariant::fromValue<BreakpointData *>(data); diff --git a/src/plugins/debugger/breakwindow.h b/src/plugins/debugger/breakwindow.h index 3a5d5a18ba9..92013a0dd00 100644 --- a/src/plugins/debugger/breakwindow.h +++ b/src/plugins/debugger/breakwindow.h @@ -47,8 +47,8 @@ public: BreakpointData *findSimilarBreakpoint(const BreakpointData *needle); void updateBreakpoint(BreakpointData *data); - void appendBreakpoint(BreakpointData *data); - void removeBreakpoint(BreakpointData *data); + //void appendBreakpoint(BreakpointData *data); + //void removeBreakpoint(BreakpointData *data); QVariant modelData(int role, int index); public slots: diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index bd8a9c42148..00f4d560012 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -190,14 +190,13 @@ enum ModelRoles BreakpointIgnoreCountRole, BreakpointThreadSpecRole, RequestActivateBreakpointRole, - RequestRemoveBreakpointRole, RequestRemoveBreakpointByIndexRole, RequestSynchronizeBreakpointsRole, RequestBreakByFunctionRole, RequestBreakByFunctionMainRole, RequestFindSimilarBreakpointRole, - RequestAppendBreakpointRole, RequestUpdateBreakpointRole, + RequestToggleBreakpointRole, // Locals and Watchers LocalsINameRole, diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 8e6afda8581..d46c763142f 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -349,14 +349,17 @@ void DebuggerEngine::handleCommand(int role, const QVariant &value) break; } - case RequestWatchPointRole: - //if (QAction *action = qobject_cast<QAction *>(sender())) - // watchPoint(action->data().toPoint()); - QTC_ASSERT(false, /* FIXME ABC */); + case RequestToggleBreakpointRole: { + QList<QVariant> list = value.toList(); + QTC_ASSERT(list.size() == 2, break); + const QString fileName = list.at(0).toString(); + const int lineNumber = list.at(1).toInt(); + breakHandler()->toggleBreakpoint(fileName, lineNumber); break; + } } -} +} void DebuggerEngine::showModuleSymbols (const QString &moduleName, const Symbols &symbols) diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index ce67ada9169..fd524af5582 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1843,21 +1843,10 @@ void DebuggerPluginPrivate::toggleBreakpoint() void DebuggerPluginPrivate::toggleBreakpoint(const QString &fileName, int lineNumber) { - BreakpointData needle; - needle.bpFileName = fileName; - needle.bpLineNumber.setNum(lineNumber); - BreakpointData *data = m_breakWindow->findSimilarBreakpoint(&needle); - if (data) { - m_breakWindow->removeBreakpoint(data); - } else { - data = new BreakpointData; - data->fileName = fileName; - data->lineNumber = QByteArray::number(lineNumber); - data->pending = true; - data->setMarkerFileName(fileName); - data->setMarkerLineNumber(lineNumber); - m_breakWindow->appendBreakpoint(data); - } + QList<QVariant> list; + list.append(fileName); + list.append(lineNumber); + notifyCurrentEngine(RequestToggleBreakpointRole, list); } void DebuggerPluginPrivate::breakpointSetRemoveMarginActionTriggered() -- GitLab