From 009865f8b3505b6d4adfeb29b33015fcd5feedc4 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 27 Apr 2017 16:32:49 +0200 Subject: [PATCH] ProjectExplorer: Use function calls for state signalling Less opportunity for tool/target implementations to mess with the RunControl state. Change-Id: I2d179cd85c50efd2314bad9b1c2250ff6b16370e Reviewed-by: Christian Stenger --- .../projectexplorer/runconfiguration.cpp | 67 ++++++++++++++----- .../projectexplorer/runconfiguration.h | 36 +++++----- 2 files changed, 72 insertions(+), 31 deletions(-) diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 5055c6f4abf..e34b371b6ed 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -771,10 +771,6 @@ void RunControl::setToolRunner(ToolRunner *tool) { delete d->toolRunner; d->toolRunner = tool; - connect(d->toolRunner, &ToolRunner::prepared, d, &RunControlPrivate::onToolPrepared); - connect(d->toolRunner, &ToolRunner::started, d, &RunControlPrivate::onToolStarted); - connect(d->toolRunner, &ToolRunner::stopped, d, &RunControlPrivate::onToolStopped); - connect(d->toolRunner, &ToolRunner::failed, d, &RunControlPrivate::onToolFailed); } TargetRunner *RunControl::targetRunner() const @@ -786,10 +782,6 @@ void RunControl::setTargetRunner(TargetRunner *runner) { delete d->targetRunner; d->targetRunner = runner; - connect(d->targetRunner, &TargetRunner::prepared, d, &RunControlPrivate::onTargetPrepared); - connect(d->targetRunner, &TargetRunner::started, d, &RunControlPrivate::onTargetStarted); - connect(d->targetRunner, &TargetRunner::stopped, d, &RunControlPrivate::onTargetStopped); - connect(d->targetRunner, &TargetRunner::failed, d, &RunControlPrivate::onTargetFailed); } QString RunControl::displayName() const @@ -1090,10 +1082,10 @@ void SimpleTargetRunner::start() QTC_ASSERT(r.is(), return); const QString executable = r.as().executable; if (executable.isEmpty()) { - emit failed(RunControl::tr("No executable specified.") + '\n'); + reportFailure(RunControl::tr("No executable specified.")); } else if (!QFileInfo::exists(executable)) { - emit failed(RunControl::tr("Executable %1 does not exist.") - .arg(QDir::toNativeSeparators(executable)) + '\n'); + reportFailure(RunControl::tr("Executable %1 does not exist.") + .arg(QDir::toNativeSeparators(executable))); } else { QString msg = RunControl::tr("Starting %1...").arg(QDir::toNativeSeparators(executable)) + '\n'; appendMessage(msg, Utils::NormalMessageFormat); @@ -1103,7 +1095,7 @@ void SimpleTargetRunner::start() } else { connect(&m_launcher, &ApplicationLauncher::reportError, - this, &TargetRunner::failed); + this, &TargetRunner::reportFailure); connect(&m_launcher, &ApplicationLauncher::remoteStderr, this, [this](const QByteArray &output) { @@ -1118,7 +1110,7 @@ void SimpleTargetRunner::start() connect(&m_launcher, &ApplicationLauncher::finished, this, [this] { m_launcher.disconnect(this); - emit stopped(); + reportStopped(); }); connect(&m_launcher, &ApplicationLauncher::reportProgress, @@ -1138,9 +1130,9 @@ void SimpleTargetRunner::stop() void SimpleTargetRunner::onProcessStarted() { // Console processes only know their pid after being started - emit started(); runControl()->setApplicationProcessHandle(m_launcher.applicationPID()); runControl()->bringApplicationToForeground(); + reportStarted(); } void SimpleTargetRunner::onProcessFinished(int exitCode, QProcess::ExitStatus status) @@ -1152,7 +1144,7 @@ void SimpleTargetRunner::onProcessFinished(int exitCode, QProcess::ExitStatus st else msg = tr("%1 exited with code %2").arg(QDir::toNativeSeparators(exe)).arg(exitCode); appendMessage(msg + '\n', Utils::NormalMessageFormat); - emit stopped(); + reportStopped(); } @@ -1179,6 +1171,30 @@ IDevice::ConstPtr TargetRunner::device() const return m_runControl->device(); } +void TargetRunner::reportPrepared() +{ + QTC_ASSERT(m_runControl, return); + m_runControl->d->onTargetPrepared(); +} + +void TargetRunner::reportStarted() +{ + QTC_ASSERT(m_runControl, return); + m_runControl->d->onTargetStarted(); +} + +void TargetRunner::reportStopped() +{ + QTC_ASSERT(m_runControl, return); + onStop(); + m_runControl->d->onTargetStopped(); +} + +void TargetRunner::reportFailure(const QString &msg) +{ + m_runControl->d->onTargetFailed(msg); +} + // ToolRunner @@ -1204,4 +1220,25 @@ IDevice::ConstPtr ToolRunner::device() const return m_runControl->device(); } +void ToolRunner::reportPrepared() +{ + m_runControl->d->onToolPrepared(); +} + +void ToolRunner::reportStarted() +{ + m_runControl->d->onToolStarted(); +} + +void ToolRunner::reportStopped() +{ + onStop(); + m_runControl->d->onToolStopped(); +} + +void ToolRunner::reportFailure(const QString &msg) +{ + m_runControl->d->onToolFailed(msg); +} + } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index ae16241973c..8898b181729 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -459,15 +459,17 @@ public: void appendMessage(const QString &msg, Utils::OutputFormat format); IDevice::ConstPtr device() const; - virtual void prepare() { emit prepared(); } - virtual void start() { emit started(); } - virtual void stop() { emit stopped(); } + virtual void prepare() { reportPrepared(); } + virtual void start() { reportStarted(); } + virtual void stop() { reportStopped(); } -signals: - void prepared(); - void started(); - void stopped(); - void failed(const QString &msg = QString()); + virtual void onStop() {} + virtual void onFailure() {} + + void reportPrepared(); + void reportStarted(); + void reportStopped(); + void reportFailure(const QString &msg = QString()); private: QPointer m_runControl; @@ -488,15 +490,17 @@ public: void appendMessage(const QString &msg, Utils::OutputFormat format); IDevice::ConstPtr device() const; - virtual void prepare() { emit prepared(); } - virtual void start() { emit started(); } - virtual void stop() { emit stopped(); } + virtual void prepare() { reportPrepared(); } + virtual void start() { reportStarted(); } + virtual void stop() { reportStopped(); } -signals: - void prepared(); - void started(); - void stopped(); - void failed(const QString &msg = QString()); + virtual void onStop() {} + virtual void onFailure() {} + + void reportPrepared(); + void reportStarted(); + void reportStopped(); + void reportFailure(const QString &msg = QString()); private: QPointer m_runControl;