forked from qt-creator/qt-creator
ProjectExplorer: make cloned workspace run configurations editable
Change-Id: Ic2c90da28f3cc498a698e948d99b13e296c3ca0d Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
@@ -547,7 +547,7 @@ bool Project::copySteps(Target *sourceTarget, Target *newTarget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (RunConfiguration *sourceRc : sourceTarget->runConfigurations()) {
|
for (RunConfiguration *sourceRc : sourceTarget->runConfigurations()) {
|
||||||
RunConfiguration *newRc = RunConfigurationFactory::clone(newTarget, sourceRc);
|
RunConfiguration *newRc = sourceRc->clone(newTarget);
|
||||||
if (!newRc) {
|
if (!newRc) {
|
||||||
runconfigurationError << sourceRc->displayName();
|
runconfigurationError << sourceRc->displayName();
|
||||||
continue;
|
continue;
|
||||||
|
@@ -356,6 +356,13 @@ void RunConfiguration::update()
|
|||||||
ProjectExplorerPlugin::updateRunActions();
|
ProjectExplorerPlugin::updateRunActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RunConfiguration *RunConfiguration::clone(Target *parent)
|
||||||
|
{
|
||||||
|
Store map;
|
||||||
|
toMap(map);
|
||||||
|
return RunConfigurationFactory::restore(parent, map);
|
||||||
|
}
|
||||||
|
|
||||||
BuildTargetInfo RunConfiguration::buildTargetInfo() const
|
BuildTargetInfo RunConfiguration::buildTargetInfo() const
|
||||||
{
|
{
|
||||||
BuildSystem *bs = target()->buildSystem();
|
BuildSystem *bs = target()->buildSystem();
|
||||||
@@ -656,13 +663,6 @@ RunConfiguration *RunConfigurationFactory::restore(Target *parent, const Store &
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
RunConfiguration *RunConfigurationFactory::clone(Target *parent, RunConfiguration *source)
|
|
||||||
{
|
|
||||||
Store map;
|
|
||||||
source->toMap(map);
|
|
||||||
return restore(parent, map);
|
|
||||||
}
|
|
||||||
|
|
||||||
const QList<RunConfigurationCreationInfo> RunConfigurationFactory::creatorsForTarget(Target *parent)
|
const QList<RunConfigurationCreationInfo> RunConfigurationFactory::creatorsForTarget(Target *parent)
|
||||||
{
|
{
|
||||||
QList<RunConfigurationCreationInfo> items;
|
QList<RunConfigurationCreationInfo> items;
|
||||||
|
@@ -174,6 +174,8 @@ public:
|
|||||||
|
|
||||||
const Utils::MacroExpander *macroExpander() const { return &m_expander; }
|
const Utils::MacroExpander *macroExpander() const { return &m_expander; }
|
||||||
|
|
||||||
|
virtual RunConfiguration *clone(Target *parent);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
RunConfiguration(Target *target, Utils::Id id);
|
RunConfiguration(Target *target, Utils::Id id);
|
||||||
|
|
||||||
@@ -233,7 +235,6 @@ public:
|
|||||||
virtual ~RunConfigurationFactory();
|
virtual ~RunConfigurationFactory();
|
||||||
|
|
||||||
static RunConfiguration *restore(Target *parent, const Utils::Store &map);
|
static RunConfiguration *restore(Target *parent, const Utils::Store &map);
|
||||||
static RunConfiguration *clone(Target *parent, RunConfiguration *source);
|
|
||||||
static const QList<RunConfigurationCreationInfo> creatorsForTarget(Target *parent);
|
static const QList<RunConfigurationCreationInfo> creatorsForTarget(Target *parent);
|
||||||
|
|
||||||
Utils::Id runConfigurationId() const { return m_runConfigurationId; }
|
Utils::Id runConfigurationId() const { return m_runConfigurationId; }
|
||||||
|
@@ -210,7 +210,7 @@ void RunSettingsWidget::cloneRunConfiguration()
|
|||||||
if (name.isEmpty())
|
if (name.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
RunConfiguration *newRc = RunConfigurationFactory::clone(m_target, activeRunConfiguration);
|
RunConfiguration *newRc = activeRunConfiguration->clone(m_target);
|
||||||
if (!newRc)
|
if (!newRc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@@ -235,6 +235,8 @@ void WorkspaceBuildSystem::reparse(bool force)
|
|||||||
|
|
||||||
if (force || oldFilters != m_filters)
|
if (force || oldFilters != m_filters)
|
||||||
scan(target()->project()->projectDirectory());
|
scan(target()->project()->projectDirectory());
|
||||||
|
else
|
||||||
|
emitBuildSystemUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorkspaceBuildSystem::triggerParsing()
|
void WorkspaceBuildSystem::triggerParsing()
|
||||||
@@ -369,6 +371,7 @@ public:
|
|||||||
const BuildTargetInfo bti = buildTargetInfo();
|
const BuildTargetInfo bti = buildTargetInfo();
|
||||||
executable.setLabelText(Tr::tr("Executable:"));
|
executable.setLabelText(Tr::tr("Executable:"));
|
||||||
executable.setValue(bti.targetFilePath);
|
executable.setValue(bti.targetFilePath);
|
||||||
|
executable.setSettingsKey("Workspace.RunConfiguration.Executable");
|
||||||
|
|
||||||
auto argumentsAsString = [this]() {
|
auto argumentsAsString = [this]() {
|
||||||
return CommandLine{
|
return CommandLine{
|
||||||
@@ -379,36 +382,47 @@ public:
|
|||||||
arguments.setLabelText(Tr::tr("Arguments:"));
|
arguments.setLabelText(Tr::tr("Arguments:"));
|
||||||
arguments.setMacroExpander(macroExpander());
|
arguments.setMacroExpander(macroExpander());
|
||||||
arguments.setArguments(argumentsAsString());
|
arguments.setArguments(argumentsAsString());
|
||||||
|
arguments.setSettingsKey("Workspace.RunConfiguration.Arguments");
|
||||||
|
|
||||||
workingDirectory.setLabelText(Tr::tr("Working directory:"));
|
workingDirectory.setLabelText(Tr::tr("Working directory:"));
|
||||||
workingDirectory.setDefaultWorkingDirectory(bti.workingDirectory);
|
workingDirectory.setDefaultWorkingDirectory(bti.workingDirectory);
|
||||||
|
workingDirectory.setSettingsKey("Workspace.RunConfiguration.WorkingDirectory");
|
||||||
|
|
||||||
setCommandLineGetter([this] {
|
setCommandLineGetter([this] {
|
||||||
const BuildTargetInfo bti = buildTargetInfo();
|
return CommandLine(executable.effectiveBinary(),
|
||||||
CommandLine cmdLine{
|
arguments.arguments(),
|
||||||
macroExpander()->expand(bti.targetFilePath),
|
CommandLine::Raw);
|
||||||
Utils::transform(
|
|
||||||
bti.additionalData.toMap()["arguments"].toStringList(),
|
|
||||||
[this](const QString &arg) { return macroExpander()->expand(arg); })};
|
|
||||||
|
|
||||||
return cmdLine;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
setUpdater([this, argumentsAsString] {
|
setUpdater([this, argumentsAsString] {
|
||||||
|
if (enabled.value()) // skip the update for cloned run configurations
|
||||||
|
return;
|
||||||
const BuildTargetInfo bti = buildTargetInfo();
|
const BuildTargetInfo bti = buildTargetInfo();
|
||||||
executable.setValue(bti.targetFilePath);
|
executable.setValue(bti.targetFilePath);
|
||||||
arguments.setArguments(argumentsAsString());
|
arguments.setArguments(argumentsAsString());
|
||||||
workingDirectory.setDefaultWorkingDirectory(bti.workingDirectory);
|
workingDirectory.setDefaultWorkingDirectory(bti.workingDirectory);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
auto enabledUpdater = [this] { setEnabled(enabled.value()); };
|
||||||
|
connect(&enabled, &BaseAspect::changed, this, enabledUpdater);
|
||||||
|
connect(this, &AspectContainer::fromMapFinished, this, enabledUpdater);
|
||||||
connect(target, &Target::buildSystemUpdated, this, &RunConfiguration::update);
|
connect(target, &Target::buildSystemUpdated, this, &RunConfiguration::update);
|
||||||
setEnabled(false);
|
enabledUpdater();
|
||||||
|
enabled.setSettingsKey("Workspace.RunConfiguration.Enabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
RunConfiguration *clone(Target *parent) override
|
||||||
|
{
|
||||||
|
RunConfiguration *result = RunConfiguration::clone(parent);
|
||||||
|
dynamic_cast<WorkspaceRunConfiguration *>(result)->enabled.setValue(true);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
TextDisplay hint{this};
|
TextDisplay hint{this};
|
||||||
FilePathAspect executable{this};
|
FilePathAspect executable{this};
|
||||||
ArgumentsAspect arguments{this};
|
ArgumentsAspect arguments{this};
|
||||||
WorkingDirectoryAspect workingDirectory{this};
|
WorkingDirectoryAspect workingDirectory{this};
|
||||||
|
BoolAspect enabled{this};
|
||||||
};
|
};
|
||||||
|
|
||||||
class WorkspaceProjectRunConfigurationFactory : public RunConfigurationFactory
|
class WorkspaceProjectRunConfigurationFactory : public RunConfigurationFactory
|
||||||
|
Reference in New Issue
Block a user