diff options
author | hjk <[email protected]> | 2010-11-10 11:39:01 +0100 |
---|---|---|
committer | hjk <[email protected]> | 2010-11-10 12:08:23 +0100 |
commit | 2161e0f6d9c69e96d79979943f9be3a97ef88f2b (patch) | |
tree | 249ac81f851fcde62474f5c75fda79eb87a7f3e3 /src | |
parent | 60bafeb81d2860a8149bc79687aa5ad3243455dd (diff) |
debugger: refactoring of the plugin interface
There's some 'external' and some 'internal' part now. Other plugins
are only supposed the external interface.
Diffstat (limited to 'src')
29 files changed, 437 insertions, 547 deletions
diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index be2310effb1..23e296457f0 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -31,7 +31,7 @@ #include "breakpointmarker.h" #include "debuggeractions.h" -#include "debuggerplugin.h" +#include "debuggercore.h" #include "debuggerstringutils.h" #include <utils/qtcassert.h> @@ -40,17 +40,15 @@ #include <QtCore/QFileInfo> -namespace Debugger { -namespace Internal { - -static DebuggerPlugin *plugin() { return DebuggerPlugin::instance(); } - ////////////////////////////////////////////////////////////////// // // BreakHandler // ////////////////////////////////////////////////////////////////// +namespace Debugger { +namespace Internal { + BreakHandler::BreakHandler() : m_breakpointIcon(_(":/debugger/images/breakpoint_16.png")), m_disabledBreakpointIcon(_(":/debugger/images/breakpoint_disabled_16.png")), @@ -148,7 +146,7 @@ bool BreakHandler::watchPointAt(quint64 address) const void BreakHandler::saveBreakpoints() { //qDebug() << "SAVING BREAKPOINTS..."; - QTC_ASSERT(plugin(), return); + QTC_ASSERT(debuggerCore(), return); QList<QVariant> list; for (int index = 0; index != size(); ++index) { const BreakpointData *data = at(index); @@ -178,15 +176,15 @@ void BreakHandler::saveBreakpoints() map.insert(_("usefullpath"), _("1")); list.append(map); } - plugin()->setSessionValue("Breakpoints", list); + debuggerCore()->setSessionValue("Breakpoints", list); //qDebug() << "SAVED BREAKPOINTS" << this << list.size(); } void BreakHandler::loadBreakpoints() { - QTC_ASSERT(plugin(), return); + QTC_ASSERT(debuggerCore(), return); //qDebug() << "LOADING BREAKPOINTS..."; - QVariant value = plugin()->sessionValue("Breakpoints"); + QVariant value = debuggerCore()->sessionValue("Breakpoints"); QList<QVariant> list = value.toList(); clear(); foreach (const QVariant &var, list) { diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp index 14aa6588b89..ba3ecddddeb 100644 --- a/src/plugins/debugger/breakwindow.cpp +++ b/src/plugins/debugger/breakwindow.cpp @@ -31,8 +31,7 @@ #include "breakhandler.h" #include "debuggeractions.h" -#include "debuggerplugin.h" -#include "debuggerconstants.h" +#include "debuggercore.h" #include "ui_breakpoint.h" #include "ui_breakcondition.h" @@ -44,26 +43,21 @@ #include <QtGui/QAction> #include <QtGui/QHeaderView> +#include <QtGui/QIntValidator> +#include <QtGui/QItemSelectionModel> #include <QtGui/QKeyEvent> #include <QtGui/QMenu> #include <QtGui/QResizeEvent> -#include <QtGui/QItemSelectionModel> #include <QtGui/QToolButton> #include <QtGui/QTreeView> -#include <QtGui/QIntValidator> namespace Debugger { namespace Internal { -static DebuggerPlugin *plugin() -{ - return DebuggerPlugin::instance(); -} - static BreakHandler *breakHandler() { - return plugin()->breakHandler(); + return debuggerCore()->breakHandler(); } static BreakpointData *breakpointAt(int index) @@ -323,7 +317,7 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev) QAction *synchronizeAction = new QAction(tr("Synchronize Breakpoints"), &menu); - synchronizeAction->setEnabled(plugin()->hasSnapshots()); + synchronizeAction->setEnabled(debuggerCore()->hasSnapshots()); QModelIndex idx0 = (si.size() ? si.front() : QModelIndex()); QModelIndex idx2 = idx0.sibling(idx0.row(), 2); @@ -556,7 +550,7 @@ void BreakWindow::rowActivated(const QModelIndex &index) { BreakpointData *data = breakpointAt(index.row()); QTC_ASSERT(data, return); - plugin()->gotoLocation(data->markerFileName(), + debuggerCore()->gotoLocation(data->markerFileName(), data->markerLineNumber(), false); } diff --git a/src/plugins/debugger/cdb/cdbstacktracecontext.cpp b/src/plugins/debugger/cdb/cdbstacktracecontext.cpp index 3b0e7b64284..fb826f88974 100644 --- a/src/plugins/debugger/cdb/cdbstacktracecontext.cpp +++ b/src/plugins/debugger/cdb/cdbstacktracecontext.cpp @@ -33,7 +33,7 @@ #include "cdbdumperhelper.h" #include "cdbengine_p.h" #include "debuggeractions.h" -#include "debuggerplugin.h" +#include "debuggercore.h" #include "watchutils.h" #include "threadshandler.h" @@ -74,7 +74,8 @@ CdbStackTraceContext::createSymbolGroup(const CdbCore::ComInterfaces & /* cif */ QStringList uninitializedVariables; const CdbCore::StackFrame &frame = stackFrameAt(index); if (theDebuggerAction(UseCodeModel)->isChecked()) - getUninitializedVariables(DebuggerPlugin::instance()->cppCodeModelSnapshot(), frame.function, frame.fileName, frame.line, &uninitializedVariables); + getUninitializedVariables(debuggerCore()->cppCodeModelSnapshot(), + frame.function, frame.fileName, frame.line, &uninitializedVariables); if (debug) qDebug() << frame << uninitializedVariables; CdbSymbolGroupContext *sc = CdbSymbolGroupContext::create(prefix, diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro index 3ab43200aae..213d18abe51 100644 --- a/src/plugins/debugger/debugger.pro +++ b/src/plugins/debugger/debugger.pro @@ -24,6 +24,7 @@ HEADERS += breakhandler.h \ debugger_global.h \ debuggeractions.h \ debuggeragents.h \ + debuggercore.h \ debuggerconstants.h \ debuggerdialogs.h \ debuggerengine.h \ diff --git a/src/plugins/debugger/debuggeragents.cpp b/src/plugins/debugger/debuggeragents.cpp index cae6f70ff59..bd5161afa61 100644 --- a/src/plugins/debugger/debuggeragents.cpp +++ b/src/plugins/debugger/debuggeragents.cpp @@ -30,10 +30,9 @@ #include "debuggeragents.h" #include "debuggerengine.h" -#include "debuggerplugin.h" +#include "debuggercore.h" #include "debuggerstringutils.h" #include "stackframe.h" -#include "debuggerconstants.h" #include <coreplugin/coreconstants.h> #include <coreplugin/editormanager/editormanager.h> @@ -196,7 +195,7 @@ class LocationMark2 : public TextEditor::ITextMark public: LocationMark2() {} - QIcon icon() const { return DebuggerPlugin::instance()->locationMarkIcon(); } + QIcon icon() const { return debuggerCore()->locationMarkIcon(); } void updateLineNumber(int /*lineNumber*/) {} void updateBlock(const QTextBlock & /*block*/) {} void removedFromEditor() {} diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 776896a1b8a..926326dce2f 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -31,8 +31,9 @@ #include "debuggeractions.h" #include "debuggeragents.h" -#include "debuggerrunner.h" +#include "debuggercore.h" #include "debuggerplugin.h" +#include "debuggerrunner.h" #include "debuggerstringutils.h" #include "debuggertooltip.h" @@ -87,6 +88,8 @@ using namespace TextEditor; // /////////////////////////////////////////////////////////////////////// +namespace Debugger { + DebuggerStartParameters::DebuggerStartParameters() : isSnapshot(false), attachPID(-1), @@ -106,9 +109,6 @@ void DebuggerStartParameters::clear() *this = DebuggerStartParameters(); } - -namespace Debugger { - QDebug operator<<(QDebug d, DebuggerState state) { //return d << DebuggerEngine::stateName(state) << '(' << int(state) << ')'; @@ -321,7 +321,7 @@ void DebuggerEngine::showModuleSymbols it->setData(2, Qt::DisplayRole, s.state); w->addTopLevelItem(it); } - plugin()->createNewDock(w); + debuggerCore()->createNewDock(w); } void DebuggerEngine::frameUp() @@ -452,7 +452,7 @@ void DebuggerEngine::showMessage(const QString &msg, int channel, int timeout) c { //if (msg.size() && msg.at(0).isUpper() && msg.at(1).isUpper()) // qDebug() << qPrintable(msg) << "IN STATE" << state(); - plugin()->showMessage(msg, channel, timeout); + debuggerCore()->showMessage(msg, channel, timeout); if (d->m_runControl) { d->m_runControl->showMessage(msg, channel); } else { @@ -516,7 +516,7 @@ void DebuggerEngine::resetLocation() { d->m_disassemblerViewAgent.resetLocation(); d->m_stackHandler.setCurrentIndex(-1); - plugin()->resetLocation(); + debuggerCore()->resetLocation(); } void DebuggerEngine::gotoLocation(const QString &fileName, int lineNumber, bool setMarker) @@ -531,10 +531,10 @@ void DebuggerEngine::gotoLocation(const StackFrame &frame, bool setMarker) { if (theDebuggerBoolSetting(OperateByInstruction) || !frame.isUsable()) { if (setMarker) - plugin()->resetLocation(); + debuggerCore()->resetLocation(); d->m_disassemblerViewAgent.setFrame(frame); } else { - plugin()->gotoLocation(frame.file, frame.line, setMarker); + debuggerCore()->gotoLocation(frame.file, frame.line, setMarker); } } @@ -600,7 +600,7 @@ QStringList DebuggerEngine::qtDumperLibraryLocations() const void DebuggerEngine::showQtDumperLibraryWarning(const QString &details) { - plugin()->showQtDumperLibraryWarning(details); + debuggerCore()->showQtDumperLibraryWarning(details); } QString DebuggerEngine::qtDumperLibraryName() const @@ -1011,7 +1011,7 @@ void DebuggerEngine::updateViews() // should be coordinated by their master engine. if (isSlaveEngine()) return; - plugin()->updateState(this); + debuggerCore()->updateState(this); } bool DebuggerEngine::isSlaveEngine() const @@ -1074,14 +1074,9 @@ qint64 DebuggerEngine::inferiorPid() const return d->m_inferiorPid; } -DebuggerPlugin *DebuggerEngine::plugin() -{ - return DebuggerPlugin::instance(); -} - bool DebuggerEngine::isReverseDebugging() const { - return plugin()->isReverseDebugging(); + return debuggerCore()->isReverseDebugging(); } bool DebuggerEngine::isActive() const @@ -1130,7 +1125,7 @@ void DebuggerEngine::progressPing() QMessageBox *DebuggerEngine::showMessageBox(int icon, const QString &title, const QString &text, int buttons) { - return plugin()->showMessageBox(icon, title, text, buttons); + return debuggerCore()->showMessageBox(icon, title, text, buttons); } DebuggerRunControl *DebuggerEngine::runControl() const @@ -1394,7 +1389,7 @@ void DebuggerEngine::executeDebuggerCommand(const QString &) Internal::BreakHandler *DebuggerEngine::breakHandler() const { - return plugin()->breakHandler(); + return debuggerCore()->breakHandler(); } bool DebuggerEngine::isDying() const diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index a4d2ac5b1ce..81c255caa31 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -56,8 +56,6 @@ class IOptionsPage; namespace Debugger { class DebuggerEnginePrivate; -class DebuggerPlugin; -class DebuggerPluginPrivate; class DebuggerRunControl; class QmlCppEngine; @@ -118,6 +116,8 @@ DEBUGGER_EXPORT QDebug operator<<(QDebug str, DebuggerState state); namespace Internal { +class DebuggerCore; +class DebuggerPluginPrivate; class DisassemblerViewAgent; class MemoryViewAgent; class Symbol; @@ -209,7 +209,7 @@ public: (int icon, const QString &title, const QString &text, int buttons = 0); protected: - friend class DebuggerPluginPrivate; + friend class Internal::DebuggerPluginPrivate; virtual void detachDebugger(); virtual void exitDebugger(); virtual void executeStep(); @@ -232,7 +232,6 @@ protected: virtual void frameDown(); public: - static DebuggerPlugin *plugin(); const DebuggerStartParameters &startParameters() const; DebuggerStartParameters &startParameters(); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 7988270c40e..2a314b12ea3 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -32,6 +32,7 @@ #include "debuggeractions.h" #include "debuggeragents.h" #include "debuggerconstants.h" +#include "debuggercore.h" #include "debuggerdialogs.h" #include "debuggerengine.h" #include "debuggermainwindow.h" @@ -324,7 +325,6 @@ sg1: } using namespace Core; using namespace Debugger::Constants; -using namespace Debugger::Internal; using namespace ProjectExplorer; using namespace TextEditor; @@ -508,7 +508,7 @@ public: : BaseTextMark(fileName, linenumber) {} - QIcon icon() const { return DebuggerPlugin::instance()->locationMarkIcon(); } + QIcon icon() const { return debuggerCore()->locationMarkIcon(); } void updateLineNumber(int /*lineNumber*/) {} void updateBlock(const QTextBlock & /*block*/) {} void removedFromEditor() {} @@ -854,9 +854,8 @@ struct DebuggerActions QAction *frameDownAction; }; -} // namespace Internal +static DebuggerPluginPrivate *theDebuggerCore = 0; -using namespace Debugger::Internal; /////////////////////////////////////////////////////////////////////// // @@ -864,12 +863,13 @@ using namespace Debugger::Internal; // /////////////////////////////////////////////////////////////////////// -class DebuggerPluginPrivate : public QObject +class DebuggerPluginPrivate : public DebuggerCore { Q_OBJECT public: explicit DebuggerPluginPrivate(DebuggerPlugin *plugin); + ~DebuggerPluginPrivate(); bool initialize(const QStringList &arguments, QString *errorMessage); void connectEngine(DebuggerEngine *engine, bool notify = true); @@ -975,12 +975,35 @@ public slots: void showStatusMessage(const QString &msg, int timeout = -1); void openMemoryEditor(); - DebuggerMainWindow *mainWindow() - { return qobject_cast<DebuggerMainWindow*> - (DebuggerUISwitcher::instance()->mainWindow()); } + void readSettings(); + void writeSettings() const; + + const CPlusPlus::Snapshot &cppCodeModelSnapshot() const; + + void showQtDumperLibraryWarning(const QString &details); + DebuggerMainWindow *debuggerMainWindow() const; + QWidget *mainWindow() const { return m_uiSwitcher->mainWindow(); } + + bool isRegisterViewVisible() const; + bool hasSnapshots() const { return m_snapshotHandler->size(); } + void createNewDock(QWidget *widget); + + void runControlStarted(DebuggerRunControl *runControl); + void runControlFinished(DebuggerRunControl *runControl); + DebuggerLanguages activeLanguages() const; + void remoteCommand(const QStringList &options, const QStringList &); + + bool isReverseDebugging() const; + QMessageBox *showMessageBox(int icon, const QString &title, + const QString &text, int buttons); + void ensureLogVisible(); + void extensionsInitialized(); - inline void setConfigValue(const QString &name, const QVariant &value); - inline QVariant configValue(const QString &name) const; + BreakHandler *breakHandler() const { return m_breakHandler; } + SnapshotHandler *snapshotHandler() const { return m_snapshotHandler; } + + void setConfigValue(const QString &name, const QVariant &value); + QVariant configValue(const QString &name) const; DebuggerRunControl *createDebugger(const DebuggerStartParameters &sp, RunConfiguration *rc = 0); @@ -1172,15 +1195,20 @@ public slots: currentEngine()->stackHandler()->currentFrame(), true); } - void resetLocation() + bool isActiveDebugLanguage(int lang) const { - // FIXME: code should be moved here. - currentEngine()->resetLocation(); - //d->m_disassemblerViewAgent.resetLocation(); - //d->m_stackHandler.setCurrentIndex(-1); - //plugin()->resetLocation(); + return m_uiSwitcher->activeDebugLanguages() & lang; } + void resetLocation(); + QVariant sessionValue(const QString &name); + void setSessionValue(const QString &name, const QVariant &value); + QIcon locationMarkIcon() const { return m_locationMarkIcon; } + + void openTextEditor(const QString &titlePattern0, const QString &contents); + void clearCppCodeModelSnapshot(); + void showMessage(const QString &msg, int channel, int timeout = -1); + public: DebuggerState m_state; DebuggerUISwitcher *m_uiSwitcher; @@ -1248,7 +1276,7 @@ public: QTimer m_statusTimer; QString m_lastPermanentStatusMessage; - CPlusPlus::Snapshot m_codeModelSnapshot; + mutable CPlusPlus::Snapshot m_codeModelSnapshot; DebuggerPlugin *m_plugin; SnapshotHandler *m_snapshotHandler; @@ -1256,8 +1284,12 @@ public: DebuggerEngine *m_currentEngine; }; + DebuggerPluginPrivate::DebuggerPluginPrivate(DebuggerPlugin *plugin) { + QTC_ASSERT(!theDebuggerCore, /**/); + theDebuggerCore = this; + m_plugin = plugin; m_shuttingDown = false; @@ -1304,7 +1336,27 @@ DebuggerPluginPrivate::DebuggerPluginPrivate(DebuggerPlugin *plugin) m_currentEngine = 0; } -bool DebuggerPluginPrivate::initialize(const QStringList &arguments, QString *errorMessage) +DebuggerPluginPrivate::~DebuggerPluginPrivate() +{ + m_plugin->removeObject(theDebuggerCore->m_debugMode); + delete m_debugMode; + m_debugMode = 0; + + m_plugin->removeObject(m_uiSwitcher); + delete m_uiSwitcher; + m_uiSwitcher = 0; + + delete m_snapshotHandler; + m_snapshotHandler = 0; +} + +DebuggerCore *debuggerCore() +{ + return theDebuggerCore; +} + +bool DebuggerPluginPrivate::initialize(const QStringList &arguments, + QString *errorMessage) { m_continuableContext = Core::Context("Gdb.Continuable"); m_interruptibleContext = Core::Context("Gdb.Interruptible"); @@ -1475,7 +1527,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, QString *er connect(theDebuggerAction(ExecuteCommand), SIGNAL(triggered()), SLOT(executeDebuggerCommand())); - m_plugin->readSettings(); + readSettings(); // Cpp/Qml ui setup m_uiSwitcher = new DebuggerUISwitcher(m_debugMode, this); @@ -2307,6 +2359,7 @@ DebuggerRunControl *DebuggerPluginPrivate::createDebugger return m_debuggerRunControlFactory->create(sp, rc); } +// If updateEngine is set, the engine will update its threads/modules and so forth. void DebuggerPluginPrivate::displayDebugger(DebuggerEngine *engine, bool updateEngine) { QTC_ASSERT(engine, return); @@ -2344,7 +2397,7 @@ public: void DebuggerPluginPrivate::connectEngine(DebuggerEngine *engine, bool notify) { - static Debugger::DummyEngine dummyEngine; + static DummyEngine dummyEngine; if (!engine) engine = &dummyEngine; @@ -2398,7 +2451,6 @@ void DebuggerPluginPrivate::fontSettingsChanged void DebuggerPluginPrivate::cleanupViews() { - m_plugin->resetLocation(); m_actions.reverseDirectionAction->setChecked(false); m_actions.reverseDirectionAction->setEnabled(false); hideDebuggerToolTip(); @@ -2451,8 +2503,8 @@ void DebuggerPluginPrivate::setBusyCursor(bool busy) void DebuggerPluginPrivate::setSimpleDockWidgetArrangement (Debugger::DebuggerLanguages activeLanguages) { - Debugger::DebuggerUISwitcher *uiSwitcher = DebuggerUISwitcher::instance(); - DebuggerMainWindow *mw = mainWindow(); + DebuggerMainWindow *mw = debuggerMainWindow(); + QTC_ASSERT(mw, return); mw->setTrackingEnabled(false); QList<QDockWidget *> dockWidgets = mw->dockWidgets(); @@ -2483,8 +2535,8 @@ void DebuggerPluginPrivate::setSimpleDockWidgetArrangement m_breakDock->show(); m_watchDock->show(); m_scriptConsoleDock->show(); - if (uiSwitcher->qmlInspectorWindow()) - uiSwitcher->qmlInspectorWindow()->show(); + if (m_uiSwitcher->qmlInspectorWindow()) + m_uiSwitcher->qmlInspectorWindow()->show(); } mw->splitDockWidget(mw->toolBarDockWidget(), m_stackDock, Qt::Vertical); mw->splitDockWidget(m_stackDock, m_watchDock, Qt::Horizontal); @@ -2495,8 +2547,8 @@ void DebuggerPluginPrivate::setSimpleDockWidgetArrangement mw->tabifyDockWidget(m_watchDock, m_sourceFilesDock); mw->tabifyDockWidget(m_watchDock, m_snapshotDock); mw->tabifyDockWidget(m_watchDock, m_scriptConsoleDock); - if (uiSwitcher->qmlInspectorWindow()) - mw->tabifyDockWidget(m_watchDock, uiSwitcher->qmlInspectorWindow()); + if (m_uiSwitcher->qmlInspectorWindow()) + mw->tabifyDockWidget(m_watchDock, m_uiSwitcher->qmlInspectorWindow()); mw->setTrackingEnabled(true); } @@ -2800,7 +2852,7 @@ void DebuggerPluginPrivate::executeDebuggerCommand() void DebuggerPluginPrivate::showStatusMessage(const QString &msg0, int timeout) { - m_plugin->showMessage(msg0, LogStatus); + showMessage(msg0, LogStatus); QString msg = msg0; msg.replace(QLatin1Char('\n'), QString()); m_statusLabel->setText(msg); @@ -2830,90 +2882,58 @@ void DebuggerPluginPrivate::coreShutdown() m_shuttingDown = true; } -/////////////////////////////////////////////////////////////////////// -// -// DebuggerPlugin -// -/////////////////////////////////////////////////////////////////////// - -DebuggerPlugin *theInstance = 0; - -DebuggerPlugin *DebuggerPlugin::instance() +void DebuggerPluginPrivate::writeSettings() const { - return theInstance; + QSettings *s = settings(); + DebuggerSettings::instance()->writeSettings(s); + if (m_uiSwitcher) + m_uiSwitcher->writeSettings(s); } -DebuggerPlugin::DebuggerPlugin() +void DebuggerPluginPrivate::readSettings() { - d = new DebuggerPluginPrivate(this); - theInstance = this; + //qDebug() << "PLUGIN READ SETTINGS"; + QSettings *s = settings(); + DebuggerSettings::instance()->readSettings(s); + if (m_uiSwitcher) + m_uiSwitcher->writeSettings(s); } -DebuggerPlugin::~DebuggerPlugin() +const CPlusPlus::Snapshot &DebuggerPluginPrivate::cppCodeModelSnapshot() const { - theInstance = 0; - delete DebuggerSettings::instance(); - - removeObject(d->m_debugMode); - - delete d->m_debugMode; - d->m_debugMode = 0; - - removeObject(d->m_uiSwitcher); - delete d->m_uiSwitcher; - d->m_uiSwitcher = 0; - - delete d->m_snapshotHandler; - d->m_snapshotHandler = 0; - - delete d; + if (m_codeModelSnapshot.isEmpty() + && theDebuggerAction(UseCodeModel)->isChecked()) + m_codeModelSnapshot = CppTools::CppModelManagerInterface::instance()->snapshot(); + return m_codeModelSnapshot; } -bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMessage) +void DebuggerPluginPrivate::resetLocation() { - return d->initialize(arguments, errorMessage); + currentEngine()->resetLocation(); + // FIXME: code should be moved here from the engine implementation. + //d->m_disassemblerViewAgent.resetLocation(); + //d->m_stackHandler.setCurrentIndex(-1); + m_locationMark.reset(); } -void DebuggerPlugin::setSessionValue(const QString &name, const QVariant &value) +void DebuggerPluginPrivate::setSessionValue(const QString &name, const QVariant &value) { QTC_ASSERT(sessionManager(), return); sessionManager()->setValue(name, value); //qDebug() << "SET SESSION VALUE: " << name; } -QVariant DebuggerPlugin::sessionValue(const QString &name) +QVariant DebuggerPluginPrivate::sessionValue(const QString &name) { QTC_ASSERT(sessionManager(), return QVariant()); //qDebug() << "GET SESSION VALUE: " << name; return sessionManager()->value(name); } -void DebuggerPlugin::setConfigValue(const QString &name, const QVariant &value) -{ - QTC_ASSERT(d->m_debugMode, return); - settings()->setValue(name, value); -} - -QVariant DebuggerPlugin::configValue(const QString &name) const -{ - QTC_ASSERT(d->m_debugMode, return QVariant()); - return settings()->value(name); -} - -void DebuggerPlugin::resetLocation() -{ - d->m_locationMark.reset(); -} - -void DebuggerPlugin::gotoLocation(const QString &file, int line, bool setMarker) -{ - d->gotoLocation(file, line, setMarker); -} - -void DebuggerPlugin::openTextEditor(const QString &titlePattern0, +void DebuggerPluginPrivate::openTextEditor(const QString &titlePattern0, const QString &contents) { - if (d->m_shuttingDown) + if (m_shuttingDown) return; QString titlePattern = titlePattern0; EditorManager *editorManager = EditorManager::instance(); @@ -2924,84 +2944,150 @@ void DebuggerPlugin::openTextEditor(const QString &titlePattern0, editorManager->activateEditor(editor, EditorManager::IgnoreNavigationHistory); } -void DebuggerPlugin::writeSettings() const -{ - QSettings *s = settings(); - DebuggerSettings::instance()->writeSettings(s); -} - -void DebuggerPlugin::readSettings() -{ - //qDebug() << "PLUGIN READ SETTINGS"; - QSettings *s = settings(); - DebuggerSettings::instance()->readSettings(s); -} - -const CPlusPlus::Snapshot &DebuggerPlugin::cppCodeModelSnapshot() const -{ - if (d->m_codeModelSnapshot.isEmpty() && theDebuggerAction(UseCodeModel)->isChecked()) - d->m_codeModelSnapshot = CppTools::CppModelManagerInterface::instance()->snapshot(); - return d->m_codeModelSnapshot; -} - -void DebuggerPlugin::clearCppCodeModelSnapshot() -{ - d->m_codeModelSnapshot = CPlusPlus::Snapshot(); -} -ExtensionSystem::IPlugin::ShutdownFlag DebuggerPlugin::aboutToShutdown() +void DebuggerPluginPrivate::clearCppCodeModelSnapshot() { - disconnect(sessionManager(), - SIGNAL(startupProjectChanged(ProjectExplorer::Project*)), d, 0); - writeSettings(); - if (d->m_uiSwitcher) - d->m_uiSwitcher->aboutToShutdown(); - return SynchronousShutdown; + m_codeModelSnapshot = CPlusPlus::Snapshot(); } -void DebuggerPlugin::showMessage(const QString &msg, int channel, int timeout) +void DebuggerPluginPrivate::showMessage(const QString &msg, int channel, int timeout) { //qDebug() << "PLUGIN OUTPUT: " << channel << msg; - LogWindow *ow = d->m_logWindow; - //ConsoleWindow *cw = d->m_consoleWindow; - QTC_ASSERT(ow, return); + //ConsoleWindow *cw = m_consoleWindow; + QTC_ASSERT(m_logWindow, return); switch (channel) { case StatusBar: - // This will append to ow's output pane, too. - d->showStatusMessage(msg, timeout); + // This will append to m_logWindow's output pane, too. + showStatusMessage(msg, timeout); break; case LogMiscInput: - ow->showInput(LogMisc, msg); - ow->showOutput(LogMisc, msg); + m_logWindow->showInput(LogMisc, msg); + m_logWindow->showOutput(LogMisc, msg); break; case LogInput: - ow->showInput(LogInput, msg); - ow->showOutput(LogInput, msg); + m_logWindow->showInput(LogInput, msg); + m_logWindow->showOutput(LogInput, msg); break; case ScriptConsoleOutput: - d->m_scriptConsoleWindow->appendResult(msg); + m_scriptConsoleWindow->appendResult(msg); + break; + case LogError: + m_logWindow->showOutput(channel, msg); + ensureLogVisible(); break; default: - ow->showOutput(channel, msg); - if (channel == LogError) - ensureLogVisible(); + m_logWindow->showOutput(channel, msg); break; } } +DebuggerMainWindow *DebuggerPluginPrivate::debuggerMainWindow() const +{ + return qobject_cast<DebuggerMainWindow*>(mainWindow()); +} -////////////////////////////////////////////////////////////////////// -// -// Register specific stuff -// -////////////////////////////////////////////////////////////////////// +void DebuggerPluginPrivate::showQtDumperLibraryWarning(const QString &details) +{ + QMessageBox dialog(mainWindow()); + QPushButton *qtPref = dialog.addButton(tr("Open Qt4 Options"), + QMessageBox::ActionRole); + QPushButton *helperOff = dialog.addButton(tr("Turn off Helper Usage"), + QMessageBox::ActionRole); + QPushButton *justContinue = dialog.addButton(tr("Continue Anyway"), + QMessageBox::AcceptRole); + dialog.setDefaultButton(justContinue); + dialog.setWindowTitle(tr("Debugging Helper Missing")); + dialog.setText(tr("The debugger could not load the debugging helper library.")); + dialog.setInformativeText(tr( + "The debugging helper is used to nicely format the values of some Qt " + "and Standard Library data types. " + "It must be compiled for each used Qt version separately. " + "On the Qt4 options page, select a Qt installation " + "and click Rebuild.")); + if (!details.isEmpty()) + dialog.setDetailedText(details); + dialog.exec(); + if (dialog.clickedButton() == qtPref) { + Core::ICore::instance()->showOptionsDialog( + _(Qt4ProjectManager::Constants::QT_SETTINGS_CATEGORY), + _(Qt4ProjectManager::Constants::QTVERSION_SETTINGS_PAGE_ID)); + } else if (dialog.clickedButton() == helperOff) { + theDebuggerAction(UseDebuggingHelpers) + ->setValue(qVariantFromValue(false), false); + } +} + +bool DebuggerPluginPrivate::isRegisterViewVisible() const +{ + return m_registerDock->toggleViewAction()->isChecked(); +} + +void DebuggerPluginPrivate::createNewDock(QWidget *widget) +{ + QDockWidget *dockWidget = + m_uiSwitcher->createDockWidget(CppLanguage, widget); + dockWidget->setWindowTitle(widget->windowTitle()); + dockWidget->setObjectName(widget->windowTitle()); + dockWidget->setFeatures(QDockWidget::DockWidgetClosable); + //dockWidget->setWidget(widget); + //mainWindow()->addDockWidget(Qt::TopDockWidgetArea, dockWidget); + dockWidget->show(); +} + +void DebuggerPluginPrivate::runControlStarted(DebuggerRunControl *runControl) +{ + activateDebugMode(); + if (!hasSnapshots()) + m_uiSwitcher->updateActiveLanguages(); + + const QString message = runControl->idString(); + showMessage(message, StatusBar); + showMessage(DebuggerSettings::instance()->dump(), LogDebug); + m_snapshotHandler->appendSnapshot(runControl); + connectEngine(runControl->engine()); +} + +void DebuggerPluginPrivate::runControlFinished(DebuggerRunControl *runControl) +{ + m_snapshotHandler->removeSnapshot(runControl); + disconnectEngine(); + if (theDebuggerBoolSetting(SwitchModeOnExit)) + if (m_snapshotHandler->size() == 0) + activatePreviousMode(); +} + +void DebuggerPluginPrivate::remoteCommand(const QStringList &options, + const QStringList &) +{ + if (options.isEmpty()) + return; + + unsigned enabledEngines = 0; + QString errorMessage; + + if (!parseArguments(options, + &m_attachRemoteParameters, &enabledEngines, &errorMessage)) { + qWarning("%s", qPrintable(errorMessage)); + return; + } + + if (!attachCmdLine()) + qWarning("%s", qPrintable( + _("Incomplete remote attach command received: %1"). + arg(options.join(QString(QLatin1Char(' ')))))); +} -bool DebuggerPlugin::isReverseDebugging() const +DebuggerLanguages DebuggerPluginPrivate::activeLanguages() const { - return d->m_actions.reverseDirectionAction->isChecked(); + return m_uiSwitcher->activeDebugLanguages(); } -QMessageBox *DebuggerPlugin::showMessageBox(int icon, const QString &title, +bool DebuggerPluginPrivate::isReverseDebugging() const +{ + return m_actions.reverseDirectionAction->isChecked(); +} + +QMessageBox *DebuggerPluginPrivate::showMessageBox(int icon, const QString &title, const QString &text, int buttons) { QMessageBox *mb = new QMessageBox(QMessageBox::Icon(icon), @@ -3011,182 +3097,125 @@ QMessageBox *DebuggerPlugin::showMessageBox(int icon, const QString &title, return mb; } -void DebuggerPlugin::ensureLogVisible() +void DebuggerPluginPrivate::ensureLogVisible() { - QAction *action = d->m_outputDock->toggleViewAction(); + QAction *action = m_outputDock->toggleViewAction(); if (!action->isChecked()) action->trigger(); } -QIcon DebuggerPlugin::locationMarkIcon() const -{ - return d->m_locationMarkIcon; -} - -void DebuggerPlugin::extensionsInitialized() +void DebuggerPluginPrivate::extensionsInitialized() { - d->m_uiSwitcher->initialize(); - d->m_watchersWindow->setVisible(false); - d->m_returnWindow->setVisible(false); - connect(d->m_uiSwitcher, SIGNAL(memoryEditorRequested()), - d, SLOT(openMemoryEditor())); + m_uiSwitcher->initialize(settings()); + m_watchersWindow->setVisible(false); + m_returnWindow->setVisible(false); + connect(m_uiSwitcher, SIGNAL(memoryEditorRequested()), + SLOT(openMemoryEditor())); // time gdb -i mi -ex 'debuggerplugin.cpp:800' -ex r -ex q bin/qtcreator.bin const QByteArray env = qgetenv("QTC_DEBUGGER_TEST"); //qDebug() << "EXTENSIONS INITIALIZED:" << env; // if (!env.isEmpty()) // m_plugin->runTest(QString::fromLocal8Bit(env)); - if (d->m_attachRemoteParameters.attachPid - || !d->m_attachRemoteParameters.attachTarget.isEmpty()) - QTimer::singleShot(0, d, SLOT(attachCmdLine())); + if (m_attachRemoteParameters.attachPid + || !m_attachRemoteParameters.attachTarget.isEmpty()) + QTimer::singleShot(0, this, SLOT(attachCmdLine())); } -QWidget *DebuggerPlugin::mainWindow() const -{ - return d->m_uiSwitcher->mainWindow(); -} +} // namespace Internal -DebuggerRunControl *DebuggerPlugin::createDebugger - (const DebuggerStartParameters &sp, RunConfiguration *rc) -{ - return instance()->d->createDebugger(sp, rc); -} +using namespace Debugger::Internal; -void DebuggerPlugin::startDebugger(RunControl *runControl) -{ - instance()->d->startDebugger(runControl); -} +/////////////////////////////////////////////////////////////////////// +// +// DebuggerPlugin +// +/////////////////////////////////////////////////////////////////////// -void DebuggerPlugin::displayDebugger(RunControl *runControl) +DebuggerPlugin::DebuggerPlugin() { - DebuggerRunControl *rc = qobject_cast<DebuggerRunControl *>(runControl); - QTC_ASSERT(rc, return); - instance()->d->displayDebugger(rc->engine()); + theDebuggerCore = new DebuggerPluginPrivate(this); } -// if updateEngine is set, the engine will update its threads/modules and so forth. -void DebuggerPlugin::displayDebugger(DebuggerEngine *engine, bool updateEngine) +DebuggerPlugin::~DebuggerPlugin() { - instance()->d->displayDebugger(engine, updateEngine); + delete DebuggerSettings::instance(); + delete theDebuggerCore; + theDebuggerCore = 0; } -void DebuggerPlugin::updateState(DebuggerEngine *engine) +bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMessage) { - d->updateState(engine); + return theDebuggerCore->initialize(arguments, errorMessage); } -void DebuggerPlugin::activateDebugMode() +void DebuggerPlugin::readSettings() { - d->activateDebugMode(); + theDebuggerCore->readSettings(); } -void DebuggerPlugin::createNewDock(QWidget *widget) +void DebuggerPlugin::writeSettings() const { - QDockWidget *dockWidget = - DebuggerUISwitcher::instance()->createDockWidget(CppLanguage, widget); - dockWidget->setWindowTitle(widget->windowTitle()); - dockWidget->setObjectName(widget->windowTitle()); - dockWidget->setFeatures(QDockWidget::DockWidgetClosable); - //dockWidget->setWidget(widget); - //mainWindow()->addDockWidget(Qt::TopDockWidgetArea, dockWidget); - dockWidget->show(); + theDebuggerCore->writeSettings(); } -void DebuggerPlugin::runControlStarted(DebuggerRunControl *runControl) +ExtensionSystem::IPlugin::ShutdownFlag DebuggerPlugin::aboutToShutdown() { - d->connectEngine(runControl->engine()); - d->m_snapshotHandler->appendSnapshot(runControl); + disconnect(sessionManager(), + SIGNAL(startupProjectChanged(ProjectExplorer::Project*)), + theDebuggerCore, 0); + writeSettings(); + return SynchronousShutdown; } -void DebuggerPlugin::runControlFinished(DebuggerRunControl *runControl) +void DebuggerPlugin::remoteCommand(const QStringList &options, + const QStringList &list) { - Q_UNUSED(runControl); - d->m_snapshotHandler->removeSnapshot(runControl); - d->disconnectEngine(); - if (theDebuggerBoolSetting(SwitchModeOnExit)) - if (d->m_snapshotHandler->size() == 0) - d->activatePreviousMode(); + theDebuggerCore->remoteCommand(options, list); } -DebuggerLanguages DebuggerPlugin::activeLanguages() const + +DebuggerRunControl *DebuggerPlugin::createDebugger + (const DebuggerStartParameters &sp, RunConfiguration *rc) { - return DebuggerUISwitcher::instance()->activeDebugLanguages(); + return theDebuggerCore->createDebugger(sp, rc); } -bool DebuggerPlugin::isRegisterViewVisible() const +void DebuggerPlugin::startDebugger(RunControl *runControl) { - return d->m_registerDock->toggleViewAction()->isChecked(); + theDebuggerCore->startDebugger(runControl); } -bool DebuggerPlugin::hasSnapshots() const +void DebuggerPlugin::displayDebugger(RunControl *runControl) { - return d->m_snapshotHandler->size(); + DebuggerRunControl *rc = qobject_cast<DebuggerRunControl *>(runControl); + QTC_ASSERT(rc, return); + theDebuggerCore->displayDebugger(rc->engine()); } -Internal::BreakHandler *DebuggerPlugin::breakHandler() const +void DebuggerPlugin::runControlStarted(DebuggerRunControl *runControl) { - return d->m_breakHandler; + theDebuggerCore->runControlStarted(runControl); } -Internal::SnapshotHandler *DebuggerPlugin::snapshotHandler() const +void DebuggerPlugin::runControlFinished(DebuggerRunControl *runControl) { - return d->m_snapshotHandler; + theDebuggerCore->runControlFinished(runControl); } -DebuggerEngine *DebuggerPlugin::currentEngine() const +void DebuggerPlugin::extensionsInitialized() { - return d->m_currentEngine; + theDebuggerCore->extensionsInitialized(); } -void DebuggerPlugin::remoteCommand(const QStringList &options, const QStringList &) +bool DebuggerPlugin::isActiveDebugLanguage(int language) { - if (options.isEmpty()) - return; - - unsigned enabledEngines = 0; - QString errorMessage; - - if (!parseArguments(options, - &d->m_attachRemoteParameters, &enabledEngines, &errorMessage)) { - qWarning("%s", qPrintable(errorMessage)); - return; - } - - if (!d->attachCmdLine()) - qWarning("%s", qPrintable( - _("Incomplete remote attach command received: %1"). - arg(options.join(QString(QLatin1Char(' ')))))); + return theDebuggerCore->isActiveDebugLanguage(language); } -void DebuggerPlugin::showQtDumperLibraryWarning(const QString &details) +DebuggerUISwitcher *DebuggerPlugin::uiSwitcher() { - QMessageBox dialog(mainWindow()); - QPushButton *qtPref = dialog.addButton(tr("Open Qt4 Options"), - QMessageBox::ActionRole); - QPushButton *helperOff = dialog.addButton(tr("Turn off Helper Usage"), - QMessageBox::ActionRole); - QPushButton *justContinue = dialog.addButton(tr("Continue Anyway"), - QMessageBox::AcceptRole); - dialog.setDefaultButton(justContinue); - dialog.setWindowTitle(tr("Debugging Helper Missing")); - dialog.setText(tr("The debugger could not load the debugging helper library.")); - dialog.setInformativeText(tr( - "The debugging helper is used to nicely format the values of some Qt " - "and Standard Library data types. " - "It must be compiled for each used Qt version separately. " - "On the Qt4 options page, select a Qt installation " - "and click Rebuild.")); - if (!details.isEmpty()) - dialog.setDetailedText(details); - dialog.exec(); - if (dialog.clickedButton() == qtPref) { - Core::ICore::instance()->showOptionsDialog( - _(Qt4ProjectManager::Constants::QT_SETTINGS_CATEGORY), - _(Qt4ProjectManager::Constants::QTVERSION_SETTINGS_PAGE_ID)); - } else if (dialog.clickedButton() == helperOff) { - theDebuggerAction(UseDebuggingHelpers) - ->setValue(qVariantFromValue(false), false); - } + return theDebuggerCore->m_uiSwitcher; } ////////////////////////////////////////////////////////////////////// diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h index 200259bbf37..6b0175a6e58 100644 --- a/src/plugins/debugger/debuggerplugin.h +++ b/src/plugins/debugger/debuggerplugin.h @@ -31,18 +31,10 @@ #define DEBUGGERPLUGIN_H #include "debugger_global.h" -#include "debuggerconstants.h" #include <extensionsystem/iplugin.h> -QT_BEGIN_NAMESPACE -class QIcon; -class QMessageBox; -QT_END_NAMESPACE - -namespace CPlusPlus { -class Snapshot; -} +#include <QtCore/QObject> namespace ProjectExplorer { class RunConfiguration; @@ -50,15 +42,15 @@ class RunControl; } namespace Debugger { -class DebuggerEngine; -class DebuggerPluginPrivate; + class DebuggerRunControl; class DebuggerStartParameters; +class DebuggerUISwitcher; -namespace Internal { -class BreakHandler; -class SnapshotHandler; -} +// This is the "external" interface of the debugger plugin that's +// visible from Creator core. The internal interfact to global +// functionality to be used by debugger views and debugger engines +// is DebuggerCore, implemented in DebuggerPluginPrivate. class DEBUGGER_EXPORT DebuggerPlugin : public ExtensionSystem::IPlugin { @@ -68,68 +60,23 @@ public: DebuggerPlugin(); ~DebuggerPlugin(); - static DebuggerPlugin *instance(); - static DebuggerRunControl *createDebugger(const DebuggerStartParameters &sp, ProjectExplorer::RunConfiguration *rc = 0); static void startDebugger(ProjectExplorer::RunControl *runControl); static void displayDebugger(ProjectExplorer::RunControl *runControl); - static void displayDebugger(DebuggerEngine *engine, bool updateEngine = true); - - QVariant sessionValue(const QString &name); - void setSessionValue(const QString &name, const QVariant &value); - QVariant configValue(const QString &name) const; - void setConfigValue(const QString &name, const QVariant &value); - void updateState(DebuggerEngine *engine); - virtual void remoteCommand(const QStringList &options, const QStringList &arguments); - void showQtDumperLibraryWarning(const QString &details); - - QIcon locationMarkIcon() const; - void activateDebugMode(); - - const CPlusPlus::Snapshot &cppCodeModelSnapshot() const; - bool isRegisterViewVisible() const; - bool hasSnapshots() const; - - void openTextEditor(const QString &titlePattern, const QString &contents); - Internal::BreakHandler *breakHandler() const; - Internal::SnapshotHandler *snapshotHandler() const; - DebuggerEngine *currentEngine() const; - -public slots: - void clearCppCodeModelSnapshot(); - void ensureLogVisible(); - - // void runTest(const QString &fileName); - void showMessage(const QString &msg, int channel, int timeout = -1); - void gotoLocation(const QString &fileName, int lineNumber = -1, - bool setMarker = false); + static bool isActiveDebugLanguage(int language); + static DebuggerUISwitcher *uiSwitcher(); private: - friend class DebuggerEngine; - friend class DebuggerPluginPrivate; - friend class DebuggerRunControl; - - void resetLocation(); + // IPlugin implementation. + bool initialize(const QStringList &arguments, QString *errorMessage); + void remoteCommand(const QStringList &options, const QStringList &arguments); + ShutdownFlag aboutToShutdown(); + void extensionsInitialized(); void readSettings(); void writeSettings() const; - - bool isReverseDebugging() const; - void createNewDock(QWidget *widget); void runControlStarted(DebuggerRunControl *runControl); void runControlFinished(DebuggerRunControl *runControl); - DebuggerLanguages activeLanguages() const; - - QMessageBox *showMessageBox(int icon, const QString &title, - const QString &text, int buttons = 0); - - bool initialize(const QStringList &arguments, QString *errorMessage); - ShutdownFlag aboutToShutdown(); - void extensionsInitialized(); - - QWidget *mainWindow() const; - - DebuggerPluginPrivate *d; }; } // namespace Debugger diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index aa095193cda..7077286c491 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -30,6 +30,7 @@ #include "debuggerrunner.h" #include "debuggeractions.h" +#include "debuggercore.h" #include "debuggerengine.h" #include "debuggerplugin.h" #include "debuggerstringutils.h" @@ -112,8 +113,6 @@ static QString msgEngineNotAvailable(const char *engine) "which is disabled.").arg(QLatin1String(engine)); } -static DebuggerPlugin *plugin() { return DebuggerPlugin::instance(); } - // A factory to create DebuggerRunControls DebuggerRunControlFactory::DebuggerRunControlFactory(QObject *parent, unsigned enabledEngines) @@ -180,16 +179,17 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu sp.dumperLibrary = rc->dumperLibrary(); sp.dumperLibraryLocations = rc->dumperLibraryLocations(); - DebuggerLanguages activeLangs = DebuggerUISwitcher::instance()->activeDebugLanguages(); - if (activeLangs & QmlLanguage) { + if (debuggerCore()->isActiveDebugLanguage(QmlLanguage)) { sp.qmlServerAddress = QLatin1String("127.0.0.1"); sp.qmlServerPort = runConfiguration->qmlDebugServerPort(); sp.projectDir = runConfiguration->target()->project()->projectDirectory(); if (runConfiguration->target()->activeBuildConfiguration()) - sp.projectBuildDir = runConfiguration->target()->activeBuildConfiguration()->buildDirectory(); + sp.projectBuildDir = runConfiguration->target() + ->activeBuildConfiguration()->buildDirectory(); - sp.processArgs.append(QLatin1String("-qmljsdebugger=port:") + QString::number(sp.qmlServerPort)); + sp.processArgs.append(QLatin1String("-qmljsdebugger=port:") + + QString::number(sp.qmlServerPort)); } // FIXME: If it's not yet build this will be empty and not filled @@ -413,7 +413,7 @@ void DebuggerRunControl::createEngine(const DebuggerStartParameters &startParams // Figure out engine according to toolchain, executable, attach or default. DebuggerEngineType engineType = NoEngineType; - DebuggerLanguages activeLangs = DebuggerPlugin::instance()->activeLanguages(); + DebuggerLanguages activeLangs = debuggerCore()->activeLanguages(); const unsigned enabledEngineTypes = d->enabledEngines(); if (sp.executable.endsWith(_(".js"))) engineType = ScriptEngineType; @@ -540,7 +540,7 @@ bool DebuggerRunControl::checkDebugConfiguration(int toolChain, bool success = true; - if (!(DebuggerPlugin::instance()->activeLanguages() & CppLanguage)) + if (!(debuggerCore()->activeLanguages() & CppLanguage)) return success; switch(toolChain) { @@ -589,14 +589,7 @@ void DebuggerRunControl::start() return; } - plugin()->activateDebugMode(); - DebuggerUISwitcher::instance()->aboutToStartDebugger(); - - const QString message = tr("Starting debugger '%1' for tool chain '%2'..."). - arg(d->m_engine->objectName(), toolChainName(sp.toolChainType)); - plugin()->showMessage(message, StatusBar); - plugin()->showMessage(DebuggerSettings::instance()->dump(), LogDebug); - plugin()->runControlStarted(this); + debuggerCore()->runControlStarted(this); // We might get a synchronous startFailed() notification on Windows, // when launching the process fails. Emit a proper finished() sequence. @@ -611,6 +604,13 @@ void DebuggerRunControl::start() } } +QString DebuggerRunControl::idString() const +{ + return tr("Starting debugger '%1' for tool chain '%2'...") + .arg(d->m_engine->objectName()) + .arg(toolChainName(d->m_engine->startParameters().toolChainType)); +} + void DebuggerRunControl::startFailed() { emit addToOutputWindowInline(this, tr("Debugging has failed"), false); @@ -624,7 +624,7 @@ void DebuggerRunControl::handleFinished() emit addToOutputWindowInline(this, tr("Debugging has finished"), false); if (engine()) engine()->handleFinished(); - plugin()->runControlFinished(this); + debuggerCore()->runControlFinished(this); } void DebuggerRunControl::showMessage(const QString &msg, int channel) @@ -652,7 +652,7 @@ bool DebuggerRunControl::aboutToStop() const " Would you still like to terminate it?"); const QMessageBox::StandardButton answer = - QMessageBox::question(DebuggerUISwitcher::instance()->mainWindow(), + QMessageBox::question(debuggerCore()->mainWindow(), tr("Close Debugging Session"), question, QMessageBox::Yes|QMessageBox::No); return answer == QMessageBox::Yes; @@ -754,4 +754,5 @@ RunConfiguration *DebuggerRunControl::runConfiguration() const { return d->m_myRunConfiguration.data(); } + } // namespace Debugger diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h index 2288161eff7..ff97fbb05c7 100644 --- a/src/plugins/debugger/debuggerrunner.h +++ b/src/plugins/debugger/debuggerrunner.h @@ -120,6 +120,7 @@ public: QString *errorMessage, QString *settingsCategory = 0, QString *settingsPage = 0); + QString idString() const; signals: void engineRequestSetup(); diff --git a/src/plugins/debugger/debuggeruiswitcher.cpp b/src/plugins/debugger/debuggeruiswitcher.cpp index cc2e6a0c3e0..80aa00fb918 100644 --- a/src/plugins/debugger/debuggeruiswitcher.cpp +++ b/src/plugins/debugger/debuggeruiswitcher.cpp @@ -140,8 +140,6 @@ struct DebuggerUISwitcherPrivate QWeakPointer<ProjectExplorer::RunConfiguration> m_previousRunConfiguration; bool m_initialized; - - static DebuggerUISwitcher *m_instance; }; DebuggerUISwitcherPrivate::DebuggerUISwitcherPrivate(DebuggerUISwitcher *q) @@ -160,8 +158,6 @@ DebuggerUISwitcherPrivate::DebuggerUISwitcherPrivate(DebuggerUISwitcher *q) { } -DebuggerUISwitcher *DebuggerUISwitcherPrivate::m_instance = 0; - DebuggerUISwitcher::DebuggerUISwitcher(BaseMode *mode, QObject* parent) : QObject(parent), d(new DebuggerUISwitcherPrivate(this)) { @@ -180,13 +176,10 @@ DebuggerUISwitcher::DebuggerUISwitcher(BaseMode *mode, QObject* parent) d->m_debugMenu = am->actionContainer(ProjectExplorer::Constants::M_DEBUG); d->m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); QTC_ASSERT(d->m_viewsMenu, return) - - DebuggerUISwitcherPrivate::m_instance = this; } DebuggerUISwitcher::~DebuggerUISwitcher() { - DebuggerUISwitcherPrivate::m_instance = 0; delete d; } @@ -345,11 +338,6 @@ void DebuggerUISwitcher::createViewsMenuItems() d->m_viewsMenu->addAction(cmd); } -DebuggerUISwitcher *DebuggerUISwitcher::instance() -{ - return DebuggerUISwitcherPrivate::m_instance; -} - void DebuggerUISwitcher::addLanguage(const DebuggerLanguage &languageId, const Context &context) { bool activate = (d->m_supportedLanguages == AnyLanguage); @@ -595,20 +583,8 @@ QWidget *DebuggerUISwitcher::createContents(BaseMode *mode) return splitter; } -void DebuggerUISwitcher::aboutToStartDebugger() -{ - if (!DebuggerPlugin::instance()->hasSnapshots()) - updateActiveLanguages(); -} - -void DebuggerUISwitcher::aboutToShutdown() -{ - writeSettings(); -} - -void DebuggerUISwitcher::writeSettings() const +void DebuggerUISwitcher::writeSettings(QSettings *settings) const { - QSettings *settings = ICore::instance()->settings(); { settings->beginGroup(QLatin1String("DebugMode.CppMode")); QHashIterator<QString, QVariant> it(d->m_dockWidgetActiveStateCpp); @@ -629,9 +605,8 @@ void DebuggerUISwitcher::writeSettings() const } } -void DebuggerUISwitcher::readSettings() +void DebuggerUISwitcher::readSettings(QSettings *settings) { - QSettings *settings = ICore::instance()->settings(); d->m_dockWidgetActiveStateCpp.clear(); d->m_dockWidgetActiveStateQmlCpp.clear(); @@ -660,12 +635,12 @@ void DebuggerUISwitcher::readSettings() d->m_activeDebugLanguages = langs; } -void DebuggerUISwitcher::initialize() +void DebuggerUISwitcher::initialize(QSettings *settings) { createViewsMenuItems(); emit dockResetRequested(AnyLanguage); - readSettings(); + readSettings(settings); updateUi(); diff --git a/src/plugins/debugger/debuggeruiswitcher.h b/src/plugins/debugger/debuggeruiswitcher.h index b7ec212119f..4b243db8432 100644 --- a/src/plugins/debugger/debuggeruiswitcher.h +++ b/src/plugins/debugger/debuggeruiswitcher.h @@ -37,13 +37,14 @@ QT_BEGIN_NAMESPACE class QDockWidget; +class QSettings; QT_END_NAMESPACE namespace Core { - class Command; - class Context; - class IMode; - class BaseMode; +class Command; +class Context; +class IMode; +class BaseMode; } namespace Utils { @@ -51,9 +52,9 @@ class FancyMainWindow; } namespace ProjectExplorer { - class Project; - class Target; - class RunConfiguration; +class Project; +class Target; +class RunConfiguration; } namespace Debugger { @@ -71,8 +72,6 @@ public: explicit DebuggerUISwitcher(Core::BaseMode *mode, QObject *parent = 0); virtual ~DebuggerUISwitcher(); - static DebuggerUISwitcher *instance(); - // debuggable languages are registered with this function. void addLanguage(const DebuggerLanguage &language, const Core::Context &context); @@ -90,10 +89,8 @@ public: DebuggerLanguages activeDebugLanguages() const; // called when all dependent plugins have loaded - void initialize(); + void initialize(QSettings *settings); - void aboutToStartDebugger(); - void aboutToShutdown(); void onModeChanged(Core::IMode *mode); // most common debugger windows @@ -130,8 +127,11 @@ private slots: void updateUiForCurrentRunConfiguration(); void updateUiOnFileListChange(); +public slots: void updateActiveLanguages(); void updateDockWidgetSettings(); + void readSettings(QSettings *settings); + void writeSettings(QSettings *settings) const; private: // Used by MainWindow @@ -143,8 +143,6 @@ private: void hideInactiveWidgets(); void createViewsMenuItems(); - void readSettings(); - void writeSettings() const; bool isQmlCppActive() const; bool isQmlActive() const; diff --git a/src/plugins/debugger/gdb/classicgdbengine.cpp b/src/plugins/debugger/gdb/classicgdbengine.cpp index 9cc0ed3b774..8f227d2f53e 100644 --- a/src/plugins/debugger/gdb/classicgdbengine.cpp +++ b/src/plugins/debugger/gdb/classicgdbengine.cpp @@ -32,8 +32,8 @@ #include "abstractgdbadapter.h" #include "debuggeractions.h" +#include "debuggercore.h" #include "debuggerstringutils.h" -#include "debuggerplugin.h" #include "stackhandler.h" #include "watchhandler.h" @@ -664,7 +664,7 @@ void GdbEngine::handleStackListLocalsClassic(const GdbResponse &response) ? qVariantValue<Debugger::Internal::StackFrame>(response.cookie) : stackHandler()->currentFrame(); if (frame.isUsable()) - getUninitializedVariables(plugin()->cppCodeModelSnapshot(), + getUninitializedVariables(debuggerCore()->cppCodeModelSnapshot(), frame.function, frame.file, frame.line, &uninitializedVariables); } diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 02776557d30..089322f0198 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -34,6 +34,7 @@ #include "gdboptionspage.h" #include "debuggeruiswitcher.h" #include "debuggermainwindow.h" +#include "debuggercore.h" #include "debuggerplugin.h" #include "debuggerrunner.h" @@ -203,11 +204,6 @@ DebuggerStartMode GdbEngine::startMode() const return startParameters().startMode; } -QMainWindow *GdbEngine::mainWindow() const -{ - return DebuggerUISwitcher::instance()->mainWindow(); -} - AbstractGdbProcess *GdbEngine::gdbProc() const { return m_gdbAdapter->gdbProc(); @@ -3077,7 +3073,7 @@ void GdbEngine::handleMakeSnapshot(const GdbResponse &response) void GdbEngine::reloadRegisters() { - if (!plugin()->isRegisterViewVisible()) + if (!debuggerCore()->isRegisterViewVisible()) return; if (state() != InferiorStopOk && state() != InferiorUnrunnable) @@ -4371,7 +4367,7 @@ void GdbEngine::createFullBacktrace() void GdbEngine::handleCreateFullBacktrace(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { - plugin()->openTextEditor(_("Backtrace $"), + debuggerCore()->openTextEditor(_("Backtrace $"), _(response.data.findChild("consolestreamoutput").data())); } } diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 529d9abff0f..396693ee8bc 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -525,7 +525,6 @@ private: ////////// View & Data Stuff ////////// // Convenience Functions // QString errorMessage(QProcess::ProcessError error); - QMainWindow *mainWindow() const; AbstractGdbProcess *gdbProc() const; void showExecutionError(const QString &message); diff --git a/src/plugins/debugger/moduleswindow.cpp b/src/plugins/debugger/moduleswindow.cpp index 8cff2955ffe..e73cab44a63 100644 --- a/src/plugins/debugger/moduleswindow.cpp +++ b/src/plugins/debugger/moduleswindow.cpp @@ -31,8 +31,8 @@ #include "debuggeractions.h" #include "debuggerconstants.h" +#include "debuggercore.h" #include "debuggerengine.h" -#include "debuggerplugin.h" #include <utils/qtcassert.h> #include <utils/savedaction.h> @@ -53,16 +53,6 @@ namespace Debugger { namespace Internal { -static DebuggerPlugin *plugin() -{ - return DebuggerPlugin::instance(); -} - -static DebuggerEngine *currentEngine() -{ - return DebuggerPlugin::instance()->currentEngine(); -} - ModulesWindow::ModulesWindow(QWidget *parent) : QTreeView(parent), m_alwaysResizeColumnsToContents(false) { @@ -82,23 +72,7 @@ ModulesWindow::ModulesWindow(QWidget *parent) void ModulesWindow::moduleActivated(const QModelIndex &index) { - plugin()->gotoLocation(index.data().toString()); -} - -void ModulesWindow::resizeEvent(QResizeEvent *event) -{ - //QHeaderView *hv = header(); - //int totalSize = event->size().width() - 110; - //hv->resizeSection(0, totalSize / 4); - //hv->resizeSection(1, totalSize / 4); - //hv->resizeSection(2, totalSize / 4); - //hv->resizeSection(3, totalSize / 4); - //hv->resizeSection(0, 60); - //hv->resizeSection(1, (totalSize * 50) / 100); - //hv->resizeSection(2, (totalSize * 50) / 100); - //hv->resizeSection(3, 50); - //setColumnHidden(3, true); - QTreeView::resizeEvent(event); + debuggerCore()->gotoLocation(index.data().toString()); } void ModulesWindow::contextMenuEvent(QContextMenuEvent *ev) @@ -110,7 +84,7 @@ void ModulesWindow::contextMenuEvent(QContextMenuEvent *ev) if (index.isValid()) name = index.data().toString(); - DebuggerEngine *engine = currentEngine(); + DebuggerEngine *engine = debuggerCore()->currentEngine(); const bool enabled = engine->debuggerActionsEnabled(); const unsigned capabilities = engine->debuggerCapabilities(); @@ -191,7 +165,7 @@ void ModulesWindow::contextMenuEvent(QContextMenuEvent *ev) } else if (act == actLoadSymbolsForModule) { engine->loadSymbols(name); } else if (act == actEditFile) { - plugin()->gotoLocation(name); + debuggerCore()->gotoLocation(name); } else if (act == actShowSymbols) { // FIXME setModelData(RequestModuleSymbolsRole, name); } diff --git a/src/plugins/debugger/moduleswindow.h b/src/plugins/debugger/moduleswindow.h index 49976ecc0ee..87fc191ed72 100644 --- a/src/plugins/debugger/moduleswindow.h +++ b/src/plugins/debugger/moduleswindow.h @@ -49,7 +49,6 @@ private slots: void setAlternatingRowColorsHelper(bool on) { setAlternatingRowColors(on); } private: - void resizeEvent(QResizeEvent *ev); void contextMenuEvent(QContextMenuEvent *ev); void setModel(QAbstractItemModel *model); diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index 20b3901ea7f..8cd04b75574 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -1,7 +1,7 @@ #include "qmlcppengine.h" #include "qmlengine.h" #include "debuggeruiswitcher.h" -#include "debuggerplugin.h" +#include "debuggercore.h" #include <qmljseditor/qmljseditorconstants.h> #include <coreplugin/editormanager/editormanager.h> @@ -124,7 +124,7 @@ void QmlCppEngine::setActiveEngine(DebuggerLanguage language) } if (previousEngine != d->m_activeEngine) { showStatusMessage(tr("%1 debugger activated").arg(engineName)); - plugin()->displayDebugger(d->m_activeEngine, updateEngine); + Internal::debuggerCore()->displayDebugger(d->m_activeEngine, updateEngine); } } diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 99232c51fcd..b41b0a5f040 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -33,7 +33,6 @@ #include "debuggeractions.h" #include "debuggertooltip.h" #include "debuggerconstants.h" -#include "debuggerplugin.h" #include "debuggerdialogs.h" #include "debuggerstringutils.h" #include "debuggeruiswitcher.h" @@ -236,36 +235,37 @@ void QmlEngine::connectionEstablished() { attemptBreakpointSynchronization(); - ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance(); + ExtensionSystem::PluginManager *pluginManager = + ExtensionSystem::PluginManager::instance(); pluginManager->addObject(d->m_adapter); pluginManager->addObject(this); d->m_addedAdapterToObjectPool = true; - plugin()->showMessage(tr("QML Debugger connected."), StatusBar); + showMessage(tr("QML Debugger connected."), StatusBar); notifyEngineRunAndInferiorRunOk(); } void QmlEngine::connectionStartupFailed() { - QMessageBox::critical(0, - tr("Failed to connect to debugger"), - tr("Could not connect to QML debugger server at %1:%2.") - .arg(startParameters().qmlServerAddress) - .arg(startParameters().qmlServerPort)); + QMessageBox::critical(0, tr("Failed to connect to debugger"), + tr("Could not connect to QML debugger server at %1:%2.") + .arg(startParameters().qmlServerAddress) + .arg(startParameters().qmlServerPort)); notifyEngineRunFailed(); } void QmlEngine::connectionError(QAbstractSocket::SocketError socketError) { if (socketError ==QAbstractSocket::RemoteHostClosedError) - plugin()->showMessage(tr("QML Debugger: Remote host closed connection."), StatusBar); + showMessage(tr("QML Debugger: Remote host closed connection."), StatusBar); } void QmlEngine::serviceConnectionError(const QString &serviceName) { - showMessage(tr("QML Debugger: Could not connect to service '%1'.").arg(serviceName), StatusBar); + showMessage(tr("QML Debugger: Could not connect to service '%1'.") + .arg(serviceName), StatusBar); } void QmlEngine::runEngine() @@ -371,7 +371,7 @@ void QmlEngine::shutdownEngine() shutdownEngineAsSlave(); notifyEngineShutdownOk(); - plugin()->showMessage(QString(), StatusBar); + showMessage(QString(), StatusBar); } void QmlEngine::setupEngine() @@ -756,7 +756,7 @@ void QmlEngine::messageReceived(const QByteArray &message) if (iname.startsWith("watch.")) { watchHandler()->insertData(data); } else if(iname == "console") { - plugin()->showMessage(data.value, ScriptConsoleOutput); + showMessage(data.value, ScriptConsoleOutput); } else { qWarning() << "QmlEngine: Unexcpected result: " << iname << data.value; } @@ -807,7 +807,7 @@ void QmlEngine::messageReceived(const QByteArray &message) void QmlEngine::disconnected() { - plugin()->showMessage(tr("QML Debugger disconnected."), StatusBar); + showMessage(tr("QML Debugger disconnected."), StatusBar); notifyInferiorExited(); } diff --git a/src/plugins/debugger/registerwindow.cpp b/src/plugins/debugger/registerwindow.cpp index c893957684c..053b23719fe 100644 --- a/src/plugins/debugger/registerwindow.cpp +++ b/src/plugins/debugger/registerwindow.cpp @@ -30,9 +30,9 @@ #include "registerwindow.h" #include "debuggeractions.h" -#include "debuggerplugin.h" #include "debuggeragents.h" #include "debuggerconstants.h" +#include "debuggercore.h" #include "debuggerengine.h" #include "registerhandler.h" #include "watchdelegatewidgets.h" @@ -54,7 +54,7 @@ namespace Internal { static DebuggerEngine *currentEngine() { - return DebuggerPlugin::instance()->currentEngine(); + return debuggerCore()->currentEngine(); } static RegisterHandler *currentHandler() diff --git a/src/plugins/debugger/sourcefileswindow.cpp b/src/plugins/debugger/sourcefileswindow.cpp index 0267ca89f39..f7bcadf213b 100644 --- a/src/plugins/debugger/sourcefileswindow.cpp +++ b/src/plugins/debugger/sourcefileswindow.cpp @@ -31,8 +31,8 @@ #include "debuggeractions.h" #include "debuggerconstants.h" +#include "debuggercore.h" #include "debuggerengine.h" -#include "debuggerplugin.h" #include <utils/qtcassert.h> #include <utils/savedaction.h> @@ -54,14 +54,9 @@ namespace Debugger { namespace Internal { -static DebuggerPlugin *plugin() -{ - return DebuggerPlugin::instance(); -} - static DebuggerEngine *currentEngine() { - return DebuggerPlugin::instance()->currentEngine(); + return debuggerCore()->currentEngine(); } SourceFilesWindow::SourceFilesWindow(QWidget *parent) @@ -86,7 +81,7 @@ SourceFilesWindow::SourceFilesWindow(QWidget *parent) void SourceFilesWindow::sourceFileActivated(const QModelIndex &index) { - plugin()->gotoLocation(index.data().toString()); + debuggerCore()->gotoLocation(index.data().toString()); } void SourceFilesWindow::contextMenuEvent(QContextMenuEvent *ev) @@ -120,7 +115,7 @@ void SourceFilesWindow::contextMenuEvent(QContextMenuEvent *ev) if (act == act1) currentEngine()->reloadSourceFiles(); else if (act == act2) - plugin()->gotoLocation(name); + debuggerCore()->gotoLocation(name); } } // namespace Internal diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp index d7e61330b34..f5720e26445 100644 --- a/src/plugins/debugger/stackwindow.cpp +++ b/src/plugins/debugger/stackwindow.cpp @@ -33,8 +33,8 @@ #include "debuggeractions.h" #include "debuggeragents.h" #include "debuggerconstants.h" +#include "debuggercore.h" #include "debuggerengine.h" -#include "debuggerplugin.h" #include <utils/qtcassert.h> #include <utils/savedaction.h> @@ -52,7 +52,7 @@ namespace Internal { static DebuggerEngine *currentEngine() { - return DebuggerPlugin::instance()->currentEngine(); + return debuggerCore()->currentEngine(); } StackWindow::StackWindow(QWidget *parent) diff --git a/src/plugins/debugger/threadswindow.cpp b/src/plugins/debugger/threadswindow.cpp index 622251ec806..e63ba6656e2 100644 --- a/src/plugins/debugger/threadswindow.cpp +++ b/src/plugins/debugger/threadswindow.cpp @@ -32,8 +32,8 @@ #include "threadshandler.h" #include "debuggeractions.h" #include "debuggerconstants.h" +#include "debuggercore.h" #include "debuggerengine.h" -#include "debuggerplugin.h" #include <utils/savedaction.h> @@ -66,7 +66,7 @@ ThreadsWindow::ThreadsWindow(QWidget *parent) void ThreadsWindow::rowActivated(const QModelIndex &index) { - DebuggerPlugin::instance()->currentEngine()->selectThread(index.row()); + debuggerCore()->currentEngine()->selectThread(index.row()); } void ThreadsWindow::contextMenuEvent(QContextMenuEvent *ev) diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 38ca032426f..46b2cb4f2f9 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -32,8 +32,8 @@ #include "breakhandler.h" #include "debuggeractions.h" #include "debuggeragents.h" +#include "debuggercore.h" #include "debuggerengine.h" -#include "debuggerplugin.h" #include "watchutils.h" #if USE_MODEL_TEST @@ -75,8 +75,6 @@ static const QString strNotInScope = static int watcherCounter = 0; static int generationCounter = 0; -static DebuggerPlugin *plugin() { return DebuggerPlugin::instance(); } - QHash<QByteArray, int> WatchHandler::m_watcherNames; QHash<QByteArray, int> WatchHandler::m_typeFormats; @@ -1461,7 +1459,7 @@ void WatchHandler::removeWatchExpression(const QString &exp0) void WatchHandler::updateWatchersWindow() { // Force show/hide of watchers and return view. - plugin()->updateState(m_engine); + debuggerCore()->updateState(m_engine); } void WatchHandler::updateWatchers() @@ -1480,7 +1478,7 @@ void WatchHandler::updateWatchers() void WatchHandler::loadWatchers() { - QVariant value = plugin()->sessionValue("Watchers"); + QVariant value = debuggerCore()->sessionValue("Watchers"); foreach (const QString &exp, value.toStringList()) m_watcherNames[exp.toLatin1()] = watcherCounter++; @@ -1504,12 +1502,12 @@ QStringList WatchHandler::watchedExpressions() void WatchHandler::saveWatchers() { //qDebug() << "SAVE WATCHERS: " << m_watchers; - plugin()->setSessionValue("Watchers", QVariant(watchedExpressions())); + debuggerCore()->setSessionValue("Watchers", QVariant(watchedExpressions())); } void WatchHandler::loadTypeFormats() { - QVariant value = plugin()->sessionValue("DefaultFormats"); + QVariant value = debuggerCore()->sessionValue("DefaultFormats"); QMap<QString, QVariant> typeFormats = value.toMap(); QMapIterator<QString, QVariant> it(typeFormats); while (it.hasNext()) { @@ -1532,7 +1530,7 @@ void WatchHandler::saveTypeFormats() typeFormats.insert(key, format); } } - plugin()->setSessionValue("DefaultFormats", QVariant(typeFormats)); + debuggerCore()->setSessionValue("DefaultFormats", QVariant(typeFormats)); } void WatchHandler::saveSessionData() diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index 10e01f5d232..bcab265b8f5 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -33,9 +33,9 @@ #include "debuggeragents.h" #include "debuggeractions.h" #include "debuggerconstants.h" +#include "debuggercore.h" #include "debuggerdialogs.h" #include "debuggerengine.h" -#include "debuggerplugin.h" #include "watchdelegatewidgets.h" #include "watchhandler.h" @@ -63,14 +63,9 @@ namespace Debugger { namespace Internal { -static DebuggerPlugin *plugin() -{ - return DebuggerPlugin::instance(); -} - static DebuggerEngine *currentEngine() { - return DebuggerPlugin::instance()->currentEngine(); + return debuggerCore()->currentEngine(); } class WatchDelegate : public QItemDelegate @@ -461,14 +456,14 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) } else if (act == actRemoveWatchExpression) { removeWatchExpression(exp); } else if (act == actClearCodeModelSnapshot) { - plugin()->clearCppCodeModelSnapshot(); + debuggerCore()->clearCppCodeModelSnapshot(); } else if (act == clearTypeFormatAction) { setModelData(LocalsTypeFormatRole, -1, mi1); } else if (act == clearIndividualFormatAction) { setModelData(LocalsIndividualFormatRole, -1, mi1); } else if (act == actShowInEditor) { QString contents = handler->editorContents(); - plugin()->openTextEditor(tr("Locals & Watchers"), contents); + debuggerCore()->openTextEditor(tr("Locals & Watchers"), contents); } else { for (int i = 0; i != typeFormatActions.size(); ++i) { if (act == typeFormatActions.at(i)) diff --git a/src/plugins/qmljsinspector/qmljsinspector.cpp b/src/plugins/qmljsinspector/qmljsinspector.cpp index 66c9b4333a6..8cbc61e87d5 100644 --- a/src/plugins/qmljsinspector/qmljsinspector.cpp +++ b/src/plugins/qmljsinspector/qmljsinspector.cpp @@ -463,7 +463,7 @@ void InspectorUi::reloadQmlViewer() void InspectorUi::setSimpleDockWidgetArrangement(const Debugger::DebuggerLanguages &activeLanguages) { - Debugger::DebuggerUISwitcher *uiSwitcher = Debugger::DebuggerUISwitcher::instance(); + Debugger::DebuggerUISwitcher *uiSwitcher = Debugger::DebuggerPlugin::uiSwitcher(); Utils::FancyMainWindow *mw = uiSwitcher->mainWindow(); mw->setTrackingEnabled(false); @@ -592,7 +592,7 @@ bool InspectorUi::addQuotesForData(const QVariant &value) const void InspectorUi::setupDockWidgets() { - Debugger::DebuggerUISwitcher *uiSwitcher = Debugger::DebuggerUISwitcher::instance(); + Debugger::DebuggerUISwitcher *uiSwitcher = Debugger::DebuggerPlugin::uiSwitcher(); m_toolbar->createActions(Core::Context(Debugger::Constants::C_QMLDEBUGGER)); m_toolbar->setObjectName("QmlInspectorToolbar"); diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp index d1876648e37..3e5b1b22aec 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp @@ -144,23 +144,22 @@ QmlRunControlFactory::~QmlRunControlFactory() bool QmlRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const { - QmlProjectRunConfiguration *config = qobject_cast<QmlProjectRunConfiguration*>(runConfiguration); - if (mode == ProjectExplorer::Constants::RUNMODE) { + QmlProjectRunConfiguration *config = + qobject_cast<QmlProjectRunConfiguration*>(runConfiguration); + if (mode == ProjectExplorer::Constants::RUNMODE) return config != 0 && !config->viewerPath().isEmpty(); - } else { - bool qmlDebugSupportInstalled = Debugger::DebuggerUISwitcher::instance()->supportedLanguages() - & Debugger::QmlLanguage; - - if (config && qmlDebugSupportInstalled) { - if (!config->observerPath().isEmpty()) { - return true; - } - - if (config->qtVersion() && Qt4ProjectManager::QmlObserverTool::canBuild(config->qtVersion())) { - return true; - } else { - return false; - } + + bool qmlDebugSupportInstalled = + Debugger::DebuggerPlugin::isActiveDebugLanguage(Debugger::QmlLanguage); + + if (config && qmlDebugSupportInstalled) { + if (!config->observerPath().isEmpty()) + return true; + + if (config->qtVersion() && Qt4ProjectManager::QmlObserverTool::canBuild(config->qtVersion())) { + return true; + } else { + return false; } } @@ -212,8 +211,7 @@ ProjectExplorer::RunControl *QmlRunControlFactory::createDebugRunControl(QmlProj return 0; } - Debugger::DebuggerRunControl *debuggerRunControl = Debugger::DebuggerPlugin::createDebugger(params, runConfig); - return debuggerRunControl; + return Debugger::DebuggerPlugin::createDebugger(params, runConfig); } void QmlRunControlFactory::showQmlObserverToolWarning() { diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp index cb0dae85947..7f963d8d339 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp @@ -44,7 +44,6 @@ #include <coreplugin/icore.h> #include <extensionsystem/pluginmanager.h> #include <projectexplorer/projectexplorerconstants.h> -#include <debugger/debuggerplugin.h> #include <utils/qtcassert.h> #include <QtGui/QMainWindow> @@ -122,11 +121,10 @@ S60Manager::S60Manager(QObject *parent) addAutoReleasedObject(new S60CreatePackageStepFactory); addAutoReleasedObject(new S60DeployStepFactory); - if (Debugger::DebuggerPlugin::instance()) - addAutoReleasedObject(new RunControlFactory<S60DeviceDebugRunControl, - S60DeviceRunConfiguration> - (QLatin1String(ProjectExplorer::Constants::DEBUGMODE), - tr("Debug on Device"), parent)); + addAutoReleasedObject(new RunControlFactory<S60DeviceDebugRunControl, + S60DeviceRunConfiguration> + (QLatin1String(ProjectExplorer::Constants::DEBUGMODE), + tr("Debug on Device"), parent)); updateQtVersions(); connect(m_devices, SIGNAL(qtVersionsChanged()), this, SLOT(updateQtVersions())); |