diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index b2ef650725936d9a052693471ff59db9a2612a27..22adb7b23a60c89fffc45d95cca3e165b9316fff 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -33,8 +33,8 @@ #include "gdboptionspage.h" #include "trkoptions.h" #include "trkoptionspage.h" -#include "debugger/debuggeruiswitcher.h" -#include "debugger/debuggermainwindow.h" +#include "debuggeruiswitcher.h" +#include "debuggermainwindow.h" #include "attachgdbadapter.h" #include "coregdbadapter.h" @@ -68,6 +68,8 @@ #include <texteditor/itexteditor.h> #include <projectexplorer/toolchain.h> #include <coreplugin/icore.h> +#include <coreplugin/progressmanager/progressmanager.h> +#include <coreplugin/progressmanager/futureprogress.h> #include <QtCore/QCoreApplication> #include <QtCore/QDebug> @@ -175,6 +177,7 @@ GdbEngine::GdbEngine(DebuggerManager *manager) : IDebuggerEngine(manager) m_trkOptions = QSharedPointer<TrkOptions>(new TrkOptions); m_trkOptions->fromSettings(Core::ICore::instance()->settings()); m_gdbAdapter = 0; + m_progress = 0; m_commandTimer = new QTimer(this); m_commandTimer->setSingleShot(true); @@ -277,6 +280,8 @@ void GdbEngine::initializeVariables() #ifdef Q_OS_LINUX m_entryPoint.clear(); #endif + delete m_progress; + m_progress = 0; } QString GdbEngine::errorMessage(QProcess::ProcessError error) @@ -419,6 +424,8 @@ void GdbEngine::handleResponse(const QByteArray &buff) QByteArray id = result.findChild("id").data(); if (!id.isEmpty()) showStatusMessage(tr("Library %1 loaded.").arg(_(id)), 1000); + int progress = m_progress->progressValue(); + m_progress->setProgressValue(qMin(70, progress + 1)); invalidateSourcesList(); } else if (asyncClass == "library-unloaded") { // Archer has 'id="/usr/lib/libdrm.so.2", @@ -429,6 +436,8 @@ void GdbEngine::handleResponse(const QByteArray &buff) invalidateSourcesList(); } else if (asyncClass == "thread-group-created") { // Archer has "{id="28902"}" + int progress = m_progress->progressValue(); + m_progress->setProgressValue(qMin(70, progress + 1)); QByteArray id = result.findChild("id").data(); showStatusMessage(tr("Thread group %1 created.").arg(_(id)), 1000); int pid = id.toInt(); @@ -534,6 +543,10 @@ void GdbEngine::handleResponse(const QByteArray &buff) if (resultClass == "done") { response.resultClass = GdbResultDone; } else if (resultClass == "running") { + if (m_progress) { + m_progress->setProgressValue(100); + m_progress->reportFinished(); + } if (state() == InferiorStopped) { // Result of manual command. m_manager->resetLocation(); setTokenBarrier(); @@ -1565,6 +1578,8 @@ QString GdbEngine::cleanupFullName(const QString &fileName) void GdbEngine::shutdown() { debugMessage(_("INITIATE GDBENGINE SHUTDOWN")); + if (m_progress) + m_progress->reportCanceled(); switch (state()) { case DebuggerNotReady: // Nothing to do! :) case EngineStarting: // We can't get here, really @@ -1724,6 +1739,13 @@ void GdbEngine::startDebugger(const DebuggerStartParametersPtr &sp) initializeVariables(); + m_progress = new QFutureInterface<void>(); + m_progress->setProgressRange(0, 100); + Core::FutureProgress *fp = Core::ICore::instance()->progressManager() + ->addTask(m_progress->future(), tr("Launching"), _("Debugger.Launcher")); + fp->setKeepOnFinish(false); + m_progress->reportStarted(); + m_startParameters = sp; delete m_gdbAdapter; @@ -1733,6 +1755,7 @@ void GdbEngine::startDebugger(const DebuggerStartParametersPtr &sp) if (m_gdbAdapter->dumperHandling() != AbstractGdbAdapter::DumperNotAvailable) connectDebuggingHelperActions(); + m_progress->setProgressValue(20); m_gdbAdapter->startAdapter(); } @@ -4112,6 +4135,8 @@ void GdbEngine::handleGdbFinished(int code, QProcess::ExitStatus type) void GdbEngine::handleAdapterStartFailed(const QString &msg, const QString &settingsIdHint) { + if (m_progress) + m_progress->setProgressValue(30); setState(AdapterStartFailed); debugMessage(_("ADAPTER START FAILED")); if (!msg.isEmpty()) { @@ -4129,6 +4154,8 @@ void GdbEngine::handleAdapterStartFailed(const QString &msg, const QString &sett void GdbEngine::handleAdapterStarted() { setState(AdapterStarted); + if (m_progress) + m_progress->setProgressValue(25); debugMessage(_("ADAPTER SUCCESSFULLY STARTED")); showStatusMessage(tr("Starting inferior...")); diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index e9d5a7a13657811f3e73274730249ed52b7ff1fa..3d989194eb88d459e04b990ef8ddec10d95a0efc 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -36,6 +36,7 @@ #include "watchutils.h" #include <QtCore/QByteArray> +#include <QtCore/QFutureInterface> #include <QtCore/QHash> #include <QtCore/QMap> #include <QtCore/QObject> @@ -321,6 +322,7 @@ private: ////////// Inferior Management ////////// QByteArray m_entryPoint; #endif + QFutureInterface<void> *m_progress; private: ////////// View & Data Stuff //////////