diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index c6c6057f4bb..fb21454bb14 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -35,103 +35,96 @@ #include -#include +#include -using namespace ProjectExplorer; -using namespace ProjectExplorer::Internal; +namespace ProjectExplorer { +namespace Internal { -namespace { const char PROCESS_STEP_ID[] = "ProjectExplorer.ProcessStep"; const char PROCESS_COMMAND_KEY[] = "ProjectExplorer.ProcessStep.Command"; const char PROCESS_WORKINGDIRECTORY_KEY[] = "ProjectExplorer.ProcessStep.WorkingDirectory"; const char PROCESS_ARGUMENTS_KEY[] = "ProjectExplorer.ProcessStep.Arguments"; -} ProcessStep::ProcessStep(BuildStepList *bsl) : AbstractProcessStep(bsl, PROCESS_STEP_ID) { //: Default ProcessStep display name setDefaultDisplayName(tr("Custom Process Step")); - if (m_workingDirectory.isEmpty()) - m_workingDirectory = Constants::DEFAULT_WORKING_DIR; + + m_command = addAspect(); + m_command->setSettingsKey(PROCESS_COMMAND_KEY); + m_command->setDisplayStyle(BaseStringAspect::PathChooserDisplay); + m_command->setLabelText(tr("Command:")); + m_command->setExpectedKind(Utils::PathChooser::Command); + m_command->setHistoryCompleter("PE.ProcessStepCommand.History"); + + m_arguments = addAspect(); + m_arguments->setSettingsKey(PROCESS_ARGUMENTS_KEY); + m_arguments->setDisplayStyle(BaseStringAspect::LineEditDisplay); + m_arguments->setLabelText(tr("Arguments:")); + + m_workingDirectory = addAspect(); + m_workingDirectory->setSettingsKey(PROCESS_WORKINGDIRECTORY_KEY); + m_workingDirectory->setValue(Constants::DEFAULT_WORKING_DIR); + m_workingDirectory->setDisplayStyle(BaseStringAspect::PathChooserDisplay); + m_workingDirectory->setLabelText(tr("Working directory:")); + m_workingDirectory->setExpectedKind(Utils::PathChooser::Directory); } bool ProcessStep::init() { - BuildConfiguration *bc = buildConfiguration(); - ProcessParameters *pp = processParameters(); - pp->setMacroExpander(bc ? bc->macroExpander() : Utils::globalMacroExpander()); - pp->setEnvironment(bc ? bc->environment() : Utils::Environment::systemEnvironment()); - pp->setWorkingDirectory(workingDirectory()); - pp->setCommand(m_command); - pp->setArguments(m_arguments); - pp->resolveAll(); - + setupProcessParameters(processParameters()); setOutputParser(target()->kit()->createOutputParser()); return AbstractProcessStep::init(); } -void ProcessStep::doRun() +void ProcessStep::setupProcessParameters(ProcessParameters *pp) { - AbstractProcessStep::doRun(); + BuildConfiguration *bc = buildConfiguration(); + + QString command = m_command->value(); + QString arguments = m_arguments->value(); + QString workingDirectory = m_workingDirectory->value(); + if (workingDirectory.isEmpty()) { + if (bc) + workingDirectory = Constants::DEFAULT_WORKING_DIR; + else + workingDirectory = Constants::DEFAULT_WORKING_DIR_ALTERNATE; + } + + pp->setMacroExpander(bc ? bc->macroExpander() : Utils::globalMacroExpander()); + pp->setEnvironment(bc ? bc->environment() : Utils::Environment::systemEnvironment()); + pp->setWorkingDirectory(workingDirectory); + pp->setCommand(command); + pp->setArguments(arguments); + pp->resolveAll(); } BuildStepConfigWidget *ProcessStep::createConfigWidget() { - return new ProcessStepConfigWidget(this); -} + auto widget = AbstractProcessStep::createConfigWidget(); -QString ProcessStep::command() const -{ - return m_command; -} + Core::VariableChooser::addSupportForChildWidgets(widget, macroExpander()); -QString ProcessStep::arguments() const -{ - return m_arguments; -} + auto updateDetails = [this, widget] { + QString display = displayName(); + if (display.isEmpty()) + display = tr("Custom Process Step"); + ProcessParameters param; + setupProcessParameters(¶m); + widget->setSummaryText(param.summary(display)); + }; -QString ProcessStep::workingDirectory() const -{ - return m_workingDirectory; -} + updateDetails(); -void ProcessStep::setCommand(const QString &command) -{ - m_command = command; -} + connect(m_command, &ProjectConfigurationAspect::changed, + widget, updateDetails); + connect(m_workingDirectory, &ProjectConfigurationAspect::changed, + widget, updateDetails); + connect(m_arguments, &ProjectConfigurationAspect::changed, + widget, updateDetails); -void ProcessStep::setArguments(const QString &arguments) -{ - m_arguments = arguments; -} - -void ProcessStep::setWorkingDirectory(const QString &workingDirectory) -{ - if (workingDirectory.isEmpty()) - if (buildConfiguration()) - m_workingDirectory = Constants::DEFAULT_WORKING_DIR; - else - m_workingDirectory = Constants::DEFAULT_WORKING_DIR_ALTERNATE; - else - m_workingDirectory = workingDirectory; -} - -QVariantMap ProcessStep::toMap() const -{ - QVariantMap map(AbstractProcessStep::toMap()); - map.insert(PROCESS_COMMAND_KEY, command()); - map.insert(PROCESS_ARGUMENTS_KEY, arguments()); - map.insert(PROCESS_WORKINGDIRECTORY_KEY, workingDirectory()); - return map; -} - -bool ProcessStep::fromMap(const QVariantMap &map) -{ - setCommand(map.value(PROCESS_COMMAND_KEY).toString()); - setArguments(map.value(PROCESS_ARGUMENTS_KEY).toString()); - setWorkingDirectory(map.value(PROCESS_WORKINGDIRECTORY_KEY).toString()); - return AbstractProcessStep::fromMap(map); + return widget; } //******* @@ -144,80 +137,5 @@ ProcessStepFactory::ProcessStepFactory() setDisplayName(ProcessStep::tr("Custom Process Step", "item in combobox")); } -//******* -// ProcessStepConfigWidget -//******* - -ProcessStepConfigWidget::ProcessStepConfigWidget(ProcessStep *step) - : BuildStepConfigWidget(step), m_step(step) -{ - m_ui.setupUi(this); - m_ui.command->setExpectedKind(Utils::PathChooser::Command); - m_ui.command->setHistoryCompleter("PE.ProcessStepCommand.History"); - m_ui.workingDirectory->setExpectedKind(Utils::PathChooser::Directory); - - BuildConfiguration *bc = m_step->buildConfiguration(); - Utils::Environment env = bc ? bc->environment() : Utils::Environment::systemEnvironment(); - m_ui.command->setEnvironment(env); - m_ui.command->setPath(m_step->command()); - - m_ui.workingDirectory->setEnvironment(env); - m_ui.workingDirectory->setPath(m_step->workingDirectory()); - - m_ui.commandArgumentsLineEdit->setText(m_step->arguments()); - - updateDetails(); - - connect(m_ui.command, &Utils::PathChooser::rawPathChanged, - this, &ProcessStepConfigWidget::commandLineEditTextEdited); - connect(m_ui.workingDirectory, &Utils::PathChooser::rawPathChanged, - this, &ProcessStepConfigWidget::workingDirectoryLineEditTextEdited); - - connect(m_ui.commandArgumentsLineEdit, &QLineEdit::textEdited, - this, &ProcessStepConfigWidget::commandArgumentsLineEditTextEdited); - Core::VariableChooser::addSupportForChildWidgets(this, m_step->macroExpander()); -} - -void ProcessStepConfigWidget::updateDetails() -{ - QString displayName = m_step->displayName(); - if (displayName.isEmpty()) - displayName = tr("Custom Process Step"); - ProcessParameters param; - BuildConfiguration *bc = m_step->buildConfiguration(); - param.setMacroExpander(bc ? bc->macroExpander() : Utils::globalMacroExpander()); - param.setEnvironment(bc ? bc->environment() : Utils::Environment::systemEnvironment()); - - param.setWorkingDirectory(m_step->workingDirectory()); - param.setCommand(m_step->command()); - param.setArguments(m_step->arguments()); - m_summaryText = param.summary(displayName); - emit updateSummary(); -} - -QString ProcessStepConfigWidget::displayName() const -{ - return m_step->displayName(); -} - -QString ProcessStepConfigWidget::summaryText() const -{ - return m_summaryText; -} - -void ProcessStepConfigWidget::commandLineEditTextEdited() -{ - m_step->setCommand(m_ui.command->rawPath()); - updateDetails(); -} - -void ProcessStepConfigWidget::workingDirectoryLineEditTextEdited() -{ - m_step->setWorkingDirectory(m_ui.workingDirectory->rawPath()); -} - -void ProcessStepConfigWidget::commandArgumentsLineEditTextEdited() -{ - m_step->setArguments(m_ui.commandArgumentsLineEdit->text()); - updateDetails(); -} +} // Internal +} // ProjectExplorer diff --git a/src/plugins/projectexplorer/processstep.h b/src/plugins/projectexplorer/processstep.h index 3bff8fbdcaf..f7916bf4a44 100644 --- a/src/plugins/projectexplorer/processstep.h +++ b/src/plugins/projectexplorer/processstep.h @@ -25,8 +25,8 @@ #pragma once -#include "ui_processstep.h" #include "abstractprocessstep.h" +#include "projectconfigurationaspects.h" namespace ProjectExplorer { namespace Internal { @@ -47,40 +47,13 @@ public: BuildStepConfigWidget *createConfigWidget() override; - QString command() const; - QString arguments() const; - QString workingDirectory() const; - - void setCommand(const QString &command); - void setArguments(const QString &arguments); - void setWorkingDirectory(const QString &workingDirectory); - private: bool init() override; - void doRun() override; - QVariantMap toMap() const override; - bool fromMap(const QVariantMap &map) override; + void setupProcessParameters(ProcessParameters *pp); - QString m_command; - QString m_arguments; - QString m_workingDirectory; -}; - -class ProcessStepConfigWidget : public BuildStepConfigWidget -{ - Q_OBJECT -public: - ProcessStepConfigWidget(ProcessStep *step); - virtual QString displayName() const; - virtual QString summaryText() const; -private: - void commandLineEditTextEdited(); - void workingDirectoryLineEditTextEdited(); - void commandArgumentsLineEditTextEdited(); - void updateDetails(); - ProcessStep *m_step; - Ui::ProcessStepWidget m_ui; - QString m_summaryText; + ProjectExplorer::BaseStringAspect *m_command; + ProjectExplorer::BaseStringAspect *m_arguments; + ProjectExplorer::BaseStringAspect *m_workingDirectory; }; } // namespace Internal