diff options
author | hjk <hjk@qt.io> | 2019-06-25 10:10:06 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-06-25 12:38:03 +0000 |
commit | cc10788d60a704585f6a0304624b0d005baa1405 (patch) | |
tree | d822ef41cd4aebad1bc236e8c977c0bcf2022c16 /src | |
parent | 63e418024225f104c7bc51110ac2b12dec4d23ba (diff) | |
download | qt-creator-cc10788d60a704585f6a0304624b0d005baa1405.tar.gz |
ProjectExplorer: Start centralizing BuildStepWidget update logic
... and use the autotool configure step as guinea pig.
Change-Id: I0bbc9fee70b3c8626eb0dec0f728e8368f860484
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
5 files changed, 52 insertions, 45 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index 0007ddf447..3a058c8f03 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -83,8 +83,6 @@ void AutotoolsBuildConfiguration::initialize(const BuildInfo &info) // ./configure. auto configureStep = new ConfigureStep(buildSteps); buildSteps->appendStep(configureStep); - connect(this, &BuildConfiguration::buildDirectoryChanged, - configureStep, &ConfigureStep::notifyBuildDirectoryChanged); // make auto makeStep = new MakeStep(buildSteps); diff --git a/src/plugins/autotoolsprojectmanager/configurestep.cpp b/src/plugins/autotoolsprojectmanager/configurestep.cpp index 73d6d5e53f..9a5f45a0ad 100644 --- a/src/plugins/autotoolsprojectmanager/configurestep.cpp +++ b/src/plugins/autotoolsprojectmanager/configurestep.cpp @@ -89,6 +89,25 @@ ConfigureStep::ConfigureStep(BuildStepList *bsl) : AbstractProcessStep(bsl, CONF m_additionalArgumentsAspect->setSettingsKey(CONFIGURE_ADDITIONAL_ARGUMENTS_KEY); m_additionalArgumentsAspect->setLabelText(tr("Arguments:")); m_additionalArgumentsAspect->setHistoryCompleter("AutotoolsPM.History.ConfigureArgs"); + + connect(m_additionalArgumentsAspect, &ProjectConfigurationAspect::changed, this, [this] { + m_runConfigure = true; + }); + + setSummaryUpdater([this] { + BuildConfiguration *bc = buildConfiguration(); + + ProcessParameters param; + param.setMacroExpander(bc->macroExpander()); + param.setEnvironment(bc->environment()); + param.setWorkingDirectory(bc->buildDirectory()); + param.setCommandLine({FilePath::fromString(projectDirRelativeToBuildDir(bc) + "configure"), + m_additionalArgumentsAspect->value(), + CommandLine::Raw}); + + return param.summaryInWorkdir(displayName()); + }); + } bool ConfigureStep::init() @@ -129,40 +148,3 @@ void ConfigureStep::doRun() m_runConfigure = false; AbstractProcessStep::doRun(); } - -BuildStepConfigWidget *ConfigureStep::createConfigWidget() -{ - m_widget = AbstractProcessStep::createConfigWidget(); - - updateDetails(); - - connect(m_additionalArgumentsAspect, &ProjectConfigurationAspect::changed, this, [this] { - m_runConfigure = true; - updateDetails(); - }); - - return m_widget.data(); -} - -void ConfigureStep::notifyBuildDirectoryChanged() -{ - updateDetails(); -} - -void ConfigureStep::updateDetails() -{ - if (!m_widget) - return; - - BuildConfiguration *bc = buildConfiguration(); - - ProcessParameters param; - param.setMacroExpander(bc->macroExpander()); - param.setEnvironment(bc->environment()); - param.setWorkingDirectory(bc->buildDirectory()); - param.setCommandLine({FilePath::fromString(projectDirRelativeToBuildDir(bc) + "configure"), - m_additionalArgumentsAspect->value(), - CommandLine::Raw}); - - m_widget->setSummaryText(param.summaryInWorkdir(displayName())); -} diff --git a/src/plugins/autotoolsprojectmanager/configurestep.h b/src/plugins/autotoolsprojectmanager/configurestep.h index 4faa7a24b7..380eb413c0 100644 --- a/src/plugins/autotoolsprojectmanager/configurestep.h +++ b/src/plugins/autotoolsprojectmanager/configurestep.h @@ -67,20 +67,14 @@ class ConfigureStep : public ProjectExplorer::AbstractProcessStep public: explicit ConfigureStep(ProjectExplorer::BuildStepList *bsl); - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; - void setAdditionalArguments(const QString &list); - void notifyBuildDirectoryChanged(); private: bool init() override; void doRun() override; - void updateDetails(); - ProjectExplorer::BaseStringAspect *m_additionalArgumentsAspect = nullptr; bool m_runConfigure = false; - QPointer<ProjectExplorer::BuildStepConfigWidget> m_widget; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index 35e02b8972..68fe979b91 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -155,6 +155,11 @@ BuildStepConfigWidget *BuildStep::createConfigWidget() aspect->addToConfigurationLayout(formLayout); } + connect(buildConfiguration(), &BuildConfiguration::buildDirectoryChanged, + widget, &BuildStepConfigWidget::recreateSummary); + + widget->setSummaryUpdater(m_summaryUpdater); + return widget; } @@ -267,6 +272,11 @@ void BuildStep::doCancel() << "neeeds to implement the doCancel() function"); } +void BuildStep::setSummaryUpdater(const std::function<QString ()> &summaryUpdater) +{ + m_summaryUpdater = summaryUpdater; +} + void BuildStep::setEnabled(bool b) { if (m_enabled == b) @@ -412,6 +422,10 @@ BuildStepConfigWidget::BuildStepConfigWidget(BuildStep *step) m_summaryText = "<b>" + m_displayName + "</b>"; connect(m_step, &ProjectConfiguration::displayNameChanged, this, &BuildStepConfigWidget::updateSummary); + for (auto aspect : step->aspects()) { + connect(aspect, &ProjectConfigurationAspect::changed, + this, &BuildStepConfigWidget::recreateSummary); + } } QString BuildStepConfigWidget::summaryText() const @@ -437,4 +451,16 @@ void BuildStepConfigWidget::setSummaryText(const QString &summaryText) } } +void BuildStepConfigWidget::setSummaryUpdater(const std::function<QString()> &summaryUpdater) +{ + m_summaryUpdater = summaryUpdater; + recreateSummary(); +} + +void BuildStepConfigWidget::recreateSummary() +{ + if (m_summaryUpdater) + setSummaryText(m_summaryUpdater()); +} + } // ProjectExplorer diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index 0abf7d5b78..9322bb459a 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -97,6 +97,8 @@ public: void setImmutable(bool immutable) { m_immutable = immutable; } virtual QVariant data(Core::Id id) const; + void setSummaryUpdater(const std::function<QString ()> &summaryUpdater); + signals: /// Adds a \p task to the Issues pane. /// Do note that for linking compile output with tasks, you should first emit the task @@ -129,6 +131,7 @@ private: bool m_widgetExpandedByDefault = true; bool m_runInGuiThread = true; Utils::optional<bool> m_wasExpanded; + std::function<QString()> m_summaryUpdater; }; class PROJECTEXPLORER_EXPORT BuildStepInfo @@ -209,6 +212,9 @@ public: void setDisplayName(const QString &displayName); void setSummaryText(const QString &summaryText); + void setSummaryUpdater(const std::function<QString()> &summaryUpdater); + void recreateSummary(); + signals: void updateSummary(); @@ -216,6 +222,7 @@ private: BuildStep *m_step = nullptr; QString m_displayName; QString m_summaryText; + std::function<QString()> m_summaryUpdater; }; } // namespace ProjectExplorer |