ProjectExplorer: declare ProcessStep in header

ProcessStep is goint to be reused in the workspace build configuration.

Change-Id: I5f70429fa615991a32a16bdd508a21cda389960f
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
David Schulz
2024-09-26 15:40:34 +02:00
parent 525d833cdb
commit fe757caf81
2 changed files with 68 additions and 44 deletions

View File

@@ -21,58 +21,64 @@ const char PROCESS_COMMAND_KEY[] = "ProjectExplorer.ProcessStep.Command";
const char PROCESS_WORKINGDIRECTORY_KEY[] = "ProjectExplorer.ProcessStep.WorkingDirectory"; const char PROCESS_WORKINGDIRECTORY_KEY[] = "ProjectExplorer.ProcessStep.WorkingDirectory";
const char PROCESS_ARGUMENTS_KEY[] = "ProjectExplorer.ProcessStep.Arguments"; const char PROCESS_ARGUMENTS_KEY[] = "ProjectExplorer.ProcessStep.Arguments";
class ProcessStep final : public AbstractProcessStep ProcessStep::ProcessStep(BuildStepList *bsl, Id id)
: AbstractProcessStep(bsl, id)
{ {
public: m_command.setSettingsKey(PROCESS_COMMAND_KEY);
ProcessStep(BuildStepList *bsl, Id id) m_command.setLabelText(Tr::tr("Command:"));
: AbstractProcessStep(bsl, id) m_command.setExpectedKind(PathChooser::Command);
{ m_command.setHistoryCompleter("PE.ProcessStepCommand.History");
command.setSettingsKey(PROCESS_COMMAND_KEY);
command.setLabelText(Tr::tr("Command:"));
command.setExpectedKind(PathChooser::Command);
command.setHistoryCompleter("PE.ProcessStepCommand.History");
arguments.setSettingsKey(PROCESS_ARGUMENTS_KEY); m_arguments.setSettingsKey(PROCESS_ARGUMENTS_KEY);
arguments.setDisplayStyle(StringAspect::LineEditDisplay); m_arguments.setDisplayStyle(StringAspect::LineEditDisplay);
arguments.setLabelText(Tr::tr("Arguments:")); m_arguments.setLabelText(Tr::tr("Arguments:"));
workingDirectory.setSettingsKey(PROCESS_WORKINGDIRECTORY_KEY); m_workingDirectory.setSettingsKey(PROCESS_WORKINGDIRECTORY_KEY);
workingDirectory.setValue(QString(Constants::DEFAULT_WORKING_DIR)); m_workingDirectory.setValue(QString(Constants::DEFAULT_WORKING_DIR));
workingDirectory.setLabelText(Tr::tr("Working directory:")); m_workingDirectory.setLabelText(Tr::tr("Working directory:"));
workingDirectory.setExpectedKind(PathChooser::Directory); m_workingDirectory.setExpectedKind(PathChooser::Directory);
setWorkingDirectoryProvider([this] { setWorkingDirectoryProvider([this] {
const FilePath workingDir = workingDirectory(); const FilePath workingDir = m_workingDirectory();
if (workingDir.isEmpty()) if (workingDir.isEmpty())
return FilePath::fromString(fallbackWorkingDirectory()); return FilePath::fromString(fallbackWorkingDirectory());
return workingDir; return workingDir;
}); });
setCommandLineProvider([this] { setCommandLineProvider([this] {
return CommandLine{command(), arguments(), CommandLine::Raw}; return CommandLine{m_command(), m_arguments(), CommandLine::Raw};
}); });
setSummaryUpdater([this] { setSummaryUpdater([this] {
QString display = displayName(); QString display = displayName();
if (display.isEmpty()) if (display.isEmpty())
display = Tr::tr("Custom Process Step"); display = Tr::tr("Custom Process Step");
ProcessParameters param; ProcessParameters param;
setupProcessParameters(&param); setupProcessParameters(&param);
return param.summary(display); return param.summary(display);
}); });
} }
private: void ProcessStep::setCommand(const Utils::FilePath &command)
void setupOutputFormatter(OutputFormatter *formatter) final {
{ m_command.setValue(command);
formatter->addLineParsers(kit()->createOutputParsers()); }
AbstractProcessStep::setupOutputFormatter(formatter);
}
FilePathAspect command{this}; void ProcessStep::setArguments(const QStringList &arguments)
StringAspect arguments{this}; {
FilePathAspect workingDirectory{this}; m_arguments.setValue(arguments.join(" "));
}; }
void ProcessStep::setWorkingDirectory(const Utils::FilePath &workingDirectory)
{
m_workingDirectory.setValue(workingDirectory);
}
void ProcessStep::setupOutputFormatter(OutputFormatter *formatter)
{
formatter->addLineParsers(kit()->createOutputParsers());
AbstractProcessStep::setupOutputFormatter(formatter);
}
// ProcessStepFactory // ProcessStepFactory

View File

@@ -3,10 +3,28 @@
#pragma once #pragma once
#include "abstractprocessstep.h"
#include "buildstep.h" #include "buildstep.h"
namespace ProjectExplorer::Internal { namespace ProjectExplorer::Internal {
class ProcessStep final : public AbstractProcessStep
{
public:
ProcessStep(BuildStepList *bsl, Utils::Id id);
void setCommand(const Utils::FilePath &command);
void setArguments(const QStringList &arguments);
void setWorkingDirectory(const Utils::FilePath &workingDirectory);
private:
void setupOutputFormatter(Utils::OutputFormatter *formatter) final;
Utils::FilePathAspect m_command{this};
Utils::StringAspect m_arguments{this};
Utils::FilePathAspect m_workingDirectory{this};
};
class ProcessStepFactory final : public BuildStepFactory class ProcessStepFactory final : public BuildStepFactory
{ {
public: public: