forked from qt-creator/qt-creator
ProjectExplorer: Use less indirection for BuildConfiguration aspects
Change-Id: I6c219bc35edccd723f39e71d52b246060c1c424e Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -79,7 +79,7 @@ public:
|
||||
void setInitialCMakeArguments(const QStringList &args);
|
||||
void setCMakeBuildType(const QString &cmakeBuildType, bool quiet = false);
|
||||
|
||||
ProjectExplorer::BuildDirectoryAspect buildDir{this};
|
||||
ProjectExplorer::BuildDirectoryAspect buildDir{this, this};
|
||||
Internal::InitialCMakeArgumentsAspect initialCMakeArguments{this};
|
||||
Utils::StringAspect additionalCMakeOptions{this};
|
||||
Utils::FilePathAspect sourceDirectory{this};
|
||||
|
@@ -36,8 +36,9 @@ public:
|
||||
QPointer<InfoLabel> problemLabel;
|
||||
};
|
||||
|
||||
BuildDirectoryAspect::BuildDirectoryAspect(const BuildConfiguration *bc)
|
||||
: d(new Private(bc->target()))
|
||||
BuildDirectoryAspect::BuildDirectoryAspect(AspectContainer *container, const BuildConfiguration *bc)
|
||||
: FilePathAspect(container),
|
||||
d(new Private(bc->target()))
|
||||
{
|
||||
setSettingsKey("ProjectExplorer.BuildConfiguration.BuildDirectory");
|
||||
setLabelText(Tr::tr("Build directory:"));
|
||||
|
@@ -14,8 +14,9 @@ class BuildConfiguration;
|
||||
class PROJECTEXPLORER_EXPORT BuildDirectoryAspect : public Utils::FilePathAspect
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit BuildDirectoryAspect(const BuildConfiguration *bc);
|
||||
explicit BuildDirectoryAspect(Utils::AspectContainer *container, const BuildConfiguration *bc);
|
||||
~BuildDirectoryAspect() override;
|
||||
|
||||
void allowInSourceBuilds(const Utils::FilePath &sourceDir);
|
||||
|
@@ -128,15 +128,17 @@ class BuildConfigurationPrivate
|
||||
public:
|
||||
BuildConfigurationPrivate(BuildConfiguration *bc)
|
||||
: m_buildSteps(bc, Constants::BUILDSTEPS_BUILD),
|
||||
m_cleanSteps(bc, Constants::BUILDSTEPS_CLEAN)
|
||||
m_cleanSteps(bc, Constants::BUILDSTEPS_CLEAN),
|
||||
m_buildDirectoryAspect(bc, bc),
|
||||
m_tooltipAspect(bc)
|
||||
{}
|
||||
|
||||
bool m_clearSystemEnvironment = false;
|
||||
EnvironmentItems m_userEnvironmentChanges;
|
||||
BuildStepList m_buildSteps;
|
||||
BuildStepList m_cleanSteps;
|
||||
BuildDirectoryAspect *m_buildDirectoryAspect = nullptr;
|
||||
StringAspect *m_tooltipAspect = nullptr;
|
||||
BuildDirectoryAspect m_buildDirectoryAspect;
|
||||
StringAspect m_tooltipAspect;
|
||||
FilePath m_lastEmittedBuildDirectory;
|
||||
mutable Environment m_cachedEnvironment;
|
||||
QString m_configWidgetDisplayName;
|
||||
@@ -190,24 +192,22 @@ BuildConfiguration::BuildConfiguration(Target *target, Utils::Id id)
|
||||
connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged,
|
||||
this, &BuildConfiguration::updateCacheAndEmitEnvironmentChanged);
|
||||
|
||||
d->m_buildDirectoryAspect = addAspect<BuildDirectoryAspect>(this);
|
||||
d->m_buildDirectoryAspect->setBaseFileName(target->project()->projectDirectory());
|
||||
d->m_buildDirectoryAspect->setEnvironment(environment());
|
||||
d->m_buildDirectoryAspect->setMacroExpanderProvider([this] { return macroExpander(); });
|
||||
connect(d->m_buildDirectoryAspect, &StringAspect::changed,
|
||||
d->m_buildDirectoryAspect.setBaseFileName(target->project()->projectDirectory());
|
||||
d->m_buildDirectoryAspect.setEnvironment(environment());
|
||||
d->m_buildDirectoryAspect.setMacroExpanderProvider([this] { return macroExpander(); });
|
||||
connect(&d->m_buildDirectoryAspect, &StringAspect::changed,
|
||||
this, &BuildConfiguration::emitBuildDirectoryChanged);
|
||||
connect(this, &BuildConfiguration::environmentChanged, this, [this] {
|
||||
d->m_buildDirectoryAspect->setEnvironment(environment());
|
||||
d->m_buildDirectoryAspect.setEnvironment(environment());
|
||||
emit this->target()->buildEnvironmentChanged(this);
|
||||
});
|
||||
|
||||
d->m_tooltipAspect = addAspect<StringAspect>();
|
||||
d->m_tooltipAspect->setLabelText(Tr::tr("Tooltip in target selector:"));
|
||||
d->m_tooltipAspect->setToolTip(Tr::tr("Appears as a tooltip when hovering the build configuration"));
|
||||
d->m_tooltipAspect->setDisplayStyle(StringAspect::LineEditDisplay);
|
||||
d->m_tooltipAspect->setSettingsKey("ProjectExplorer.BuildConfiguration.Tooltip");
|
||||
connect(d->m_tooltipAspect, &StringAspect::changed, this, [this] {
|
||||
setToolTip(d->m_tooltipAspect->value());
|
||||
d->m_tooltipAspect.setLabelText(Tr::tr("Tooltip in target selector:"));
|
||||
d->m_tooltipAspect.setToolTip(Tr::tr("Appears as a tooltip when hovering the build configuration"));
|
||||
d->m_tooltipAspect.setDisplayStyle(StringAspect::LineEditDisplay);
|
||||
d->m_tooltipAspect.setSettingsKey("ProjectExplorer.BuildConfiguration.Tooltip");
|
||||
connect(&d->m_tooltipAspect, &StringAspect::changed, this, [this] {
|
||||
setToolTip(d->m_tooltipAspect());
|
||||
});
|
||||
|
||||
connect(target, &Target::parsingStarted, this, &BuildConfiguration::enabledChanged);
|
||||
@@ -228,7 +228,7 @@ BuildConfiguration::~BuildConfiguration()
|
||||
FilePath BuildConfiguration::buildDirectory() const
|
||||
{
|
||||
FilePath path = FilePath::fromUserInput(
|
||||
environment().expandVariables(d->m_buildDirectoryAspect->value().trimmed()));
|
||||
environment().expandVariables(d->m_buildDirectoryAspect.value().trimmed()));
|
||||
// FIXME: If the macro expander is expected to be able to do some
|
||||
// structual changes, the fromUserInput() above might already have
|
||||
// mis-parsed. Should this here be encapsulated in the FilePathAspect?
|
||||
@@ -242,17 +242,17 @@ FilePath BuildConfiguration::buildDirectory() const
|
||||
|
||||
FilePath BuildConfiguration::rawBuildDirectory() const
|
||||
{
|
||||
return d->m_buildDirectoryAspect->filePath();
|
||||
return d->m_buildDirectoryAspect();
|
||||
}
|
||||
|
||||
void BuildConfiguration::setBuildDirectory(const FilePath &dir)
|
||||
{
|
||||
if (dir == d->m_buildDirectoryAspect->filePath())
|
||||
if (dir == d->m_buildDirectoryAspect())
|
||||
return;
|
||||
d->m_buildDirectoryAspect->setValue(dir);
|
||||
d->m_buildDirectoryAspect.setValue(dir);
|
||||
const FilePath fixedDir = BuildDirectoryAspect::fixupDir(buildDirectory());
|
||||
if (!fixedDir.isEmpty())
|
||||
d->m_buildDirectoryAspect->setValue(fixedDir);
|
||||
d->m_buildDirectoryAspect.setValue(fixedDir);
|
||||
emitBuildDirectoryChanged();
|
||||
}
|
||||
|
||||
@@ -425,7 +425,7 @@ bool BuildConfiguration::fromMap(const QVariantMap &map)
|
||||
d->m_customParsers = transform(map.value(CUSTOM_PARSERS_KEY).toList(), &Utils::Id::fromSetting);
|
||||
|
||||
const bool res = ProjectConfiguration::fromMap(map);
|
||||
setToolTip(d->m_tooltipAspect->value());
|
||||
setToolTip(d->m_tooltipAspect());
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -449,7 +449,7 @@ void BuildConfiguration::emitBuildDirectoryChanged()
|
||||
|
||||
ProjectExplorer::BuildDirectoryAspect *BuildConfiguration::buildDirectoryAspect() const
|
||||
{
|
||||
return d->m_buildDirectoryAspect;
|
||||
return &d->m_buildDirectoryAspect;
|
||||
}
|
||||
|
||||
void BuildConfiguration::setConfigWidgetDisplayName(const QString &display)
|
||||
@@ -459,7 +459,7 @@ void BuildConfiguration::setConfigWidgetDisplayName(const QString &display)
|
||||
|
||||
void BuildConfiguration::setBuildDirectoryHistoryCompleter(const QString &history)
|
||||
{
|
||||
d->m_buildDirectoryAspect->setHistoryCompleter(history);
|
||||
d->m_buildDirectoryAspect.setHistoryCompleter(history);
|
||||
}
|
||||
|
||||
void BuildConfiguration::setConfigWidgetHasFrame(bool configWidgetHasFrame)
|
||||
@@ -469,7 +469,7 @@ void BuildConfiguration::setConfigWidgetHasFrame(bool configWidgetHasFrame)
|
||||
|
||||
void BuildConfiguration::setBuildDirectorySettingsKey(const QString &key)
|
||||
{
|
||||
d->m_buildDirectoryAspect->setSettingsKey(key);
|
||||
d->m_buildDirectoryAspect.setSettingsKey(key);
|
||||
}
|
||||
|
||||
Environment BuildConfiguration::baseEnvironment() const
|
||||
|
Reference in New Issue
Block a user