diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 80da35337ad81a1db620525f72db42ec89db3bf8..7691d0d116852b513bfdb441c42b2c294d1919fe 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -36,6 +36,7 @@ #include "qt4project.h" #include "qt4buildconfiguration.h" +#include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/icore.h> #include <coreplugin/messagemanager.h> #include <debugger/debuggermanager.h> @@ -47,7 +48,7 @@ #include <projectexplorer/session.h> #include <QtCore/QDebug> - +#include <QtCore/QFuture> #include <QtCore/QPair> #include <QtCore/QProcess> #include <QtCore/QSharedPointer> @@ -116,7 +117,7 @@ protected: const QString targetCmdLinePrefix() const; const QString remoteDir() const; const QStringList options() const; - virtual void deploymentFinished(bool success)=0; + void deploymentFinished(bool success); virtual bool setProcessEnvironment(QProcess &process); private slots: void readStandardError(); @@ -129,10 +130,20 @@ protected: const MaemoDeviceConfigurations::DeviceConfig devConfig; private: + virtual void handleDeploymentFinished(bool success)=0; + + QFutureInterface<void> m_progress; QProcess deployProcess; - bool deployingExecutable; - bool deployingDumperLib; - QList<QPair<QString, QString> > deployables; + struct Deployable + { + typedef void (MaemoRunConfiguration::*updateFunc)(); + Deployable(const QString &f, const QString &d, updateFunc u) + : fileName(f), dir(d), updateTimestamp(u) {} + QString fileName; + QString dir; + updateFunc updateTimestamp; + }; + QList<Deployable> deployables; }; class MaemoRunControl : public AbstractMaemoRunControl @@ -149,7 +160,7 @@ private slots: void executionFinished(); private: - void deploymentFinished(bool success); + virtual void handleDeploymentFinished(bool success); void startExecution(); QProcess sshProcess; @@ -176,7 +187,7 @@ private slots: void debuggerOutput(const QString &output); private: - void deploymentFinished(bool success); + virtual void handleDeploymentFinished(bool success); void startGdbServer(); void gdbServerStartFailed(const QString &reason); @@ -1037,24 +1048,24 @@ void AbstractMaemoRunControl::startDeployment(bool forDebugging) { QTC_ASSERT(runConfig, return); + Core::ICore::instance()->progressManager()->addTask(m_progress.future(), + tr("Deploying"), QLatin1String("Maemo.Deploy")); if (devConfig.isValid()) { deployables.clear(); if (runConfig->currentlyNeedsDeployment()) { - deployingExecutable = true; - deployables.append(qMakePair(executableFileName(), - QFileInfo(executableOnHost()).canonicalPath())); - } else { - deployingExecutable = false; + deployables.append(Deployable(executableFileName(), + QFileInfo(executableOnHost()).canonicalPath(), + &MaemoRunConfiguration::wasDeployed)); } - if (forDebugging && runConfig->debuggingHelpersNeedDeployment()) { - deployingDumperLib = true; const QFileInfo &info(runConfig->dumperLib()); - deployables.append(qMakePair(info.fileName(), info.canonicalPath())); - } else { - deployingDumperLib = false; + deployables.append(Deployable(info.fileName(), info.canonicalPath(), + &MaemoRunConfiguration::debuggingHelpersDeployed)); } + m_progress.setProgressRange(0, deployables.count()); + m_progress.setProgressValue(0); + m_progress.reportStarted(); deploy(); } else { deploymentFinished(false); @@ -1064,13 +1075,13 @@ void AbstractMaemoRunControl::startDeployment(bool forDebugging) void AbstractMaemoRunControl::deploy() { if (!deployables.isEmpty()) { - QPair<QString, QString> pair = deployables.first(); - emit addToOutputWindow(this, tr("File to deploy: %1.").arg(pair.first)); + const Deployable &deployable = deployables.first(); + emit addToOutputWindow(this, tr("File to deploy: %1.").arg(deployable.fileName)); QStringList cmdArgs; - cmdArgs << "-P" << port() << options() << pair.first << (devConfig.uname - + "@" + devConfig.host + ":" + remoteDir()); - deployProcess.setWorkingDirectory(pair.second); + cmdArgs << "-P" << port() << options() << deployable.fileName + << (devConfig.uname + "@" + devConfig.host + ":" + remoteDir()); + deployProcess.setWorkingDirectory(deployable.dir); deployProcess.start(runConfig->scpCmd(), cmdArgs); if (!deployProcess.waitForStarted()) { @@ -1100,15 +1111,9 @@ void AbstractMaemoRunControl::deployProcessFinished() if (deployProcess.exitCode() == 0) { emit addToOutputWindow(this, tr("Target deployed.")); success = true; - if (deployingExecutable) { - runConfig->wasDeployed(); - deployingExecutable = false; - } - if (deployingDumperLib) { - runConfig->debuggingHelpersDeployed(); - deployingDumperLib = false; - } - deployables.removeFirst(); + Deployable deployable = deployables.takeFirst(); + (runConfig->*deployable.updateTimestamp)(); + m_progress.setProgressValue(m_progress.progressValue() + 1); } else { emit error(this, tr("Deployment failed.")); success = false; @@ -1119,6 +1124,12 @@ void AbstractMaemoRunControl::deployProcessFinished() deploy(); } +void AbstractMaemoRunControl::deploymentFinished(bool success) +{ + m_progress.reportFinished(); + handleDeploymentFinished(success); +} + const QString AbstractMaemoRunControl::executableOnHost() const { return runConfig->executable(); @@ -1227,7 +1238,7 @@ void MaemoRunControl::start() startDeployment(false); } -void MaemoRunControl::deploymentFinished(bool success) +void MaemoRunControl::handleDeploymentFinished(bool success) { if (success) startExecution(); @@ -1336,7 +1347,7 @@ void MaemoDebugRunControl::start() startDeployment(true); } -void MaemoDebugRunControl::deploymentFinished(bool success) +void MaemoDebugRunControl::handleDeploymentFinished(bool success) { if (success) { startGdbServer();