forked from qt-creator/qt-creator
ProjectExplorer: Aspectify ProcessStep
This also fixes the update of the summary line which apparently got lost at some time. Change-Id: I1d5095244046601bf4624afa133430fcb99b3336 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -35,103 +35,96 @@
|
||||
|
||||
#include <utils/macroexpander.h>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QFormLayout>
|
||||
|
||||
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<BaseStringAspect>();
|
||||
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<BaseStringAspect>();
|
||||
m_arguments->setSettingsKey(PROCESS_ARGUMENTS_KEY);
|
||||
m_arguments->setDisplayStyle(BaseStringAspect::LineEditDisplay);
|
||||
m_arguments->setLabelText(tr("Arguments:"));
|
||||
|
||||
m_workingDirectory = addAspect<BaseStringAspect>();
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user