From f76da43b05c0a01c2b2defbdc44a0e6f8ba4105f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Thu, 4 Aug 2011 14:25:38 +0200 Subject: [PATCH] Debugger: Replace virtuals by capability flags. Change-Id: If09efd21dc44e356eb575bb6170356fdbd409b39 Reviewed-on: http://codereview.qt.nokia.com/2625 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: hjk <qthjk@ovi.com> --- src/plugins/debugger/cdb/cdbengine.cpp | 7 +------ src/plugins/debugger/cdb/cdbengine.h | 1 - src/plugins/debugger/debuggerconstants.h | 14 ++++++++------ src/plugins/debugger/debuggerengine.cpp | 10 ---------- src/plugins/debugger/debuggerengine.h | 2 -- src/plugins/debugger/gdb/gdbengine.cpp | 5 +---- src/plugins/debugger/gdb/gdbengine.h | 1 - src/plugins/debugger/qml/qmlcppengine.cpp | 20 +++++++++----------- src/plugins/debugger/qml/qmlcppengine.h | 2 -- src/plugins/debugger/qml/qmlengine.cpp | 7 +------ src/plugins/debugger/qml/qmlengine.h | 1 - src/plugins/debugger/watchhandler.cpp | 2 +- src/plugins/debugger/watchwindow.cpp | 6 +++--- 13 files changed, 24 insertions(+), 54 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 2eefdb7c1f2..7daf735da24 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -1074,7 +1074,7 @@ void CdbEngine::updateLocalVariable(const QByteArray &iname) unsigned CdbEngine::debuggerCapabilities() const { return DisassemblerCapability | RegisterCapability | ShowMemoryCapability - |WatchpointByAddressCapability|JumpToLineCapability|AddWatcherCapability + |WatchpointByAddressCapability|JumpToLineCapability|AddWatcherCapability|WatchWidgetsCapability |ReloadModuleCapability |BreakOnThrowAndCatchCapability // Sort-of: Can break on throw(). |BreakConditionCapability|TracePointCapability @@ -1083,11 +1083,6 @@ unsigned CdbEngine::debuggerCapabilities() const |RunToLineCapability; } -bool CdbEngine::canWatchWidgets() const -{ - return true; -} - void CdbEngine::executeStep() { if (!m_operateByInstruction) diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index 27a4e7b2b87..9c21dd4b0a8 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -99,7 +99,6 @@ public: virtual void updateWatchData(const WatchData &data, const WatchUpdateFlags & flags = WatchUpdateFlags()); virtual unsigned debuggerCapabilities() const; - virtual bool canWatchWidgets() const; virtual void watchPoint(const QPoint &); virtual void setRegisterValue(int regnr, const QString &value); diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index c14c6822796..35ae2fb8f83 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -148,12 +148,14 @@ enum DebuggerCapabilities ReturnFromFunctionCapability = 0x2000, CreateFullBacktraceCapability = 0x4000, AddWatcherCapability = 0x8000, - WatchpointByAddressCapability = 0x10000, - WatchpointByExpressionCapability = 0x20000, - ShowModuleSymbolsCapability = 0x40000, - CatchCapability = 0x80000, //!< fork, vfork, syscall - OperateByInstructionCapability = 0x100000, - RunToLineCapability = 0x200000, + AddWatcherWhileRunningCapability = 0x10000, + WatchWidgetsCapability = 0x20000, + WatchpointByAddressCapability = 0x40000, + WatchpointByExpressionCapability = 0x80000, + ShowModuleSymbolsCapability = 0x100000, + CatchCapability = 0x200000, //!< fork, vfork, syscall + OperateByInstructionCapability = 0x400000, + RunToLineCapability = 0x800000, AllDebuggerCapabilities = 0xFFFFFFFF }; diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 15f86c2ac14..7065a3e1e5a 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -1298,16 +1298,6 @@ unsigned DebuggerEngine::debuggerCapabilities() const return 0; } -bool DebuggerEngine::canWatchWidgets() const -{ - return false; -} - -bool DebuggerEngine::acceptsWatchesWhileRunning() const -{ - return false; -} - bool DebuggerEngine::isSynchronous() const { return false; diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 7fabfd253d9..d20bb421bf3 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -193,8 +193,6 @@ public: virtual void setRegisterValue(int regnr, const QString &value); virtual void addOptionPages(QList<Core::IOptionsPage*> *) const; virtual unsigned debuggerCapabilities() const; - virtual bool canWatchWidgets() const; - virtual bool acceptsWatchesWhileRunning() const; virtual bool isSynchronous() const; virtual QByteArray qtNamespace() const; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 0f4169cf545..1f3737737a8 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1999,6 +1999,7 @@ unsigned GdbEngine::debuggerCapabilities() const | WatchpointByAddressCapability | WatchpointByExpressionCapability | AddWatcherCapability + | WatchWidgetsCapability | ShowModuleSymbolsCapability | CatchCapability | OperateByInstructionCapability @@ -2014,10 +2015,6 @@ unsigned GdbEngine::debuggerCapabilities() const return caps | SnapshotCapability; } -bool GdbEngine::canWatchWidgets() const -{ - return true; -} void GdbEngine::continueInferiorInternal() { diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 99d869e3884..6dc50b4df80 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -238,7 +238,6 @@ private: ////////// General Interface ////////// virtual void runEngine(); virtual unsigned debuggerCapabilities() const; - virtual bool canWatchWidgets() const; virtual void detachDebugger(); virtual void shutdownEngine(); virtual void shutdownInferior(); diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index a05a7fd35f3..963df0f16af 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -252,17 +252,15 @@ void QmlCppEngine::setRegisterValue(int regnr, const QString &value) unsigned QmlCppEngine::debuggerCapabilities() const { // ### this could also be an OR of both engines' capabilities - return d->m_cppEngine->debuggerCapabilities(); -} - -bool QmlCppEngine::canWatchWidgets() const -{ - return d->m_activeEngine->canWatchWidgets(); -} - -bool QmlCppEngine::acceptsWatchesWhileRunning() const -{ - return d->m_activeEngine->acceptsWatchesWhileRunning(); + unsigned result = d->m_cppEngine->debuggerCapabilities(); + if (d->m_activeEngine != d->m_cppEngine) { + const unsigned qmlCapabilities = d->m_qmlEngine->debuggerCapabilities(); + if (qmlCapabilities & AddWatcherWhileRunningCapability) + result |= AddWatcherWhileRunningCapability; + if (!(qmlCapabilities & WatchWidgetsCapability)) + result &= ~WatchWidgetsCapability; + } + return result; } bool QmlCppEngine::isSynchronous() const diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h index 322e4a9d447..80bf87e52aa 100644 --- a/src/plugins/debugger/qml/qmlcppengine.h +++ b/src/plugins/debugger/qml/qmlcppengine.h @@ -74,8 +74,6 @@ public: void setRegisterValue(int regnr, const QString &value); unsigned debuggerCapabilities() const; - virtual bool canWatchWidgets() const; - virtual bool acceptsWatchesWhileRunning() const; bool isSynchronous() const; QByteArray qtNamespace() const; diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 7b7aa9e4b0b..06a880e3655 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -321,11 +321,6 @@ void QmlEngine::showMessage(const QString &msg, int channel, int timeout) const DebuggerEngine::showMessage(msg, channel, timeout); } -bool QmlEngine::acceptsWatchesWhileRunning() const -{ - return true; -} - void QmlEngine::closeConnection() { disconnect(watchersModel(),SIGNAL(layoutChanged()),this,SLOT(synchronizeWatchers())); @@ -645,7 +640,7 @@ void QmlEngine::synchronizeWatchers() unsigned QmlEngine::debuggerCapabilities() const { - return AddWatcherCapability; + return AddWatcherCapability|AddWatcherWhileRunningCapability; /*ReverseSteppingCapability | SnapshotCapability | AutoDerefPointersCapability | DisassemblerCapability | RegisterCapability | ShowMemoryCapability diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h index 2658de726a8..ae96ad1d261 100644 --- a/src/plugins/debugger/qml/qmlengine.h +++ b/src/plugins/debugger/qml/qmlengine.h @@ -66,7 +66,6 @@ public: void showMessage(const QString &msg, int channel = LogDebug, int timeout = -1) const; void filterApplicationMessage(const QString &msg, int channel); - virtual bool acceptsWatchesWhileRunning() const; QString toFileInProject(const QUrl &fileUrl); void inferiorSpontaneousStop(); diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 2624c790097..944cedc9e44 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -892,7 +892,7 @@ Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const // Disable editing if debuggee is positively running. const bool isRunning = engine() && engine()->state() == InferiorRunOk; - if (isRunning && engine() && !engine()->acceptsWatchesWhileRunning()) + if (isRunning && engine() && !(engine()->debuggerCapabilities() & AddWatcherWhileRunningCapability)) return notEditable; const WatchData &data = *watchItem(idx); diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index 8cf50608315..4d04ab1682f 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -716,7 +716,7 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) const DebuggerState state = engine->state(); const bool canInsertWatches = state == InferiorStopOk || state == InferiorUnrunnable - || (state == InferiorRunOk && engine->acceptsWatchesWhileRunning()); + || (state == InferiorRunOk && (engineCapabilities & AddWatcherWhileRunningCapability)); QMenu breakpointMenu; breakpointMenu.setTitle(tr("Add Data Breakpoint...")); @@ -763,8 +763,8 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) QAction *actInsertNewWatchItem = menu.addAction(tr("Insert New Evaluated Expression")); actInsertNewWatchItem->setEnabled(canHandleWatches && canInsertWatches); QAction *actSelectWidgetToWatch = menu.addAction(tr("Select Widget to Watch")); - actSelectWidgetToWatch->setEnabled(canHandleWatches && (engine->canWatchWidgets())); - + actSelectWidgetToWatch->setEnabled(canHandleWatches + && (engine->debuggerCapabilities() & WatchWidgetsCapability)); menu.addSeparator(); QAction *actWatchExpression = new QAction(addWatchActionText(exp), &menu); -- GitLab