ProjectExplorer: Introduce base class for enabled/disabled project configuration

... and use this as a base for all RunConfigurations.

Clean out code in the individual run configurations dealing with their
enabled/disabled state.

Change-Id: Icc2ea136b056f7aea7ce96480b4402459d7ac0ce
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-07-17 14:34:05 +02:00
parent c01ddc4660
commit 131c7a1c4e
29 changed files with 163 additions and 371 deletions

View File

@@ -44,11 +44,11 @@
#include <utils/detailswidget.h>
#include <utils/stringutils.h>
#include <utils/persistentsettings.h>
#include <utils/utilsicons.h>
#include <qtsupport/qtoutputformatter.h>
#include <qtsupport/qtsupportconstants.h>
#include <qtsupport/qtkitinformation.h>
#include <utils/hostosinfo.h>
#include <utils/utilsicons.h>
#include "api/runenvironment.h"
@@ -140,34 +140,15 @@ QbsRunConfiguration::QbsRunConfiguration(Target *parent, QbsRunConfiguration *so
ctor();
}
bool QbsRunConfiguration::isEnabled() const
{
QbsProject *project = static_cast<QbsProject *>(target()->project());
return !project->isParsing() && project->hasParseResult();
}
QString QbsRunConfiguration::disabledReason() const
{
QbsProject *project = static_cast<QbsProject *>(target()->project());
if (project->isParsing())
return tr("The .qbs files are currently being parsed.");
if (!project->hasParseResult())
return tr("Parsing of .qbs files has failed.");
return QString();
}
void QbsRunConfiguration::ctor()
{
setDefaultDisplayName(defaultDisplayName());
QbsProject *project = static_cast<QbsProject *>(target()->project());
connect(project, &Project::parsingStarted, this, &RunConfiguration::enabledChanged);
connect(project, &Project::parsingFinished, this, [this](bool success) {
auto terminalAspect = extraAspect<TerminalAspect>();
if (success && !terminalAspect->isUserSet())
terminalAspect->setUseTerminal(isConsoleApplication());
emit enabledChanged();
});
connect(BuildManager::instance(), &BuildManager::buildStateChanged, this,
[this, project](Project *p) {