From f873ad54e18ea08a68aefede22305c538e10db82 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 9 Mar 2018 10:34:39 +0100 Subject: [PATCH] RemoteLinux: Use Argument and Working directory aspects in run config Also some cosmetics in the run config widget setup. Change-Id: I02503d808b5ee7f81f46520f9e6d1750c2cd5de9 Reviewed-by: Christian Kandeler --- .../runconfigurationaspects.cpp | 8 +- .../remotelinuxrunconfiguration.cpp | 38 ++-------- .../remotelinux/remotelinuxrunconfiguration.h | 4 - .../remotelinuxrunconfigurationwidget.cpp | 74 +++++++------------ .../remotelinuxrunconfigurationwidget.h | 6 +- 5 files changed, 40 insertions(+), 90 deletions(-) diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp index 6b5b204af71..97b41b0e3ec 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -264,7 +265,12 @@ void ArgumentsAspect::setArguments(const QString &arguments) void ArgumentsAspect::fromMap(const QVariantMap &map) { - m_arguments = map.value(settingsKey()).toString(); + QVariant args = map.value(settingsKey()); + // Until 3.7 a QStringList was stored for Remote Linux + if (args.type() == QVariant::StringList) + m_arguments = QtcProcess::joinArgs(args.toStringList(), OsTypeLinux); + else + m_arguments = args.toString(); } void ArgumentsAspect::toMap(QVariantMap &map) const diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp index de41bc32c0b..2e1e18055b4 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -55,10 +56,8 @@ class RemoteLinuxRunConfigurationPrivate { public: QString targetName; - QString arguments; bool useAlternateRemoteExecutable = false; QString alternateRemoteExecutable; - QString workingDirectory; }; } // namespace Internal @@ -75,6 +74,9 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Core::I { addExtraAspect(new RemoteLinuxEnvironmentAspect(this)); + addExtraAspect(new ArgumentsAspect(this, ArgumentsKey)); + addExtraAspect(new WorkingDirectoryAspect(this, WorkingDirectoryKey)); + connect(target, &Target::deploymentDataChanged, this, &RemoteLinuxRunConfiguration::handleBuildSystemDataUpdated); connect(target, &Target::applicationTargetsChanged, @@ -109,19 +111,17 @@ Runnable RemoteLinuxRunConfiguration::runnable() const StandardRunnable r; r.environment = extraAspect()->environment(); r.executable = remoteExecutableFilePath(); - r.commandLineArguments = arguments(); - r.workingDirectory = workingDirectory(); + r.commandLineArguments = extraAspect()->arguments(); + r.workingDirectory = extraAspect()->workingDirectory().toString(); return r; } QVariantMap RemoteLinuxRunConfiguration::toMap() const { QVariantMap map = RunConfiguration::toMap(); - map.insert(QLatin1String(ArgumentsKey), d->arguments); map.insert(QLatin1String(TargetNameKey), d->targetName); map.insert(QLatin1String(UseAlternateExeKey), d->useAlternateRemoteExecutable); map.insert(QLatin1String(AlternateExeKey), d->alternateRemoteExecutable); - map.insert(QLatin1String(WorkingDirectoryKey), d->workingDirectory); return map; } @@ -135,15 +135,9 @@ bool RemoteLinuxRunConfiguration::fromMap(const QVariantMap &map) if (!RunConfiguration::fromMap(map)) return false; - QVariant args = map.value(QLatin1String(ArgumentsKey)); - if (args.type() == QVariant::StringList) // Until 3.7 a QStringList was stored. - d->arguments = QtcProcess::joinArgs(args.toStringList(), OsTypeLinux); - else - d->arguments = args.toString(); d->targetName = map.value(QLatin1String(TargetNameKey)).toString(); d->useAlternateRemoteExecutable = map.value(QLatin1String(UseAlternateExeKey), false).toBool(); d->alternateRemoteExecutable = map.value(QLatin1String(AlternateExeKey)).toString(); - d->workingDirectory = map.value(QLatin1String(WorkingDirectoryKey)).toString(); // Hack for old-style mangled ids. FIXME: Remove. if (d->targetName.isEmpty()) { @@ -160,11 +154,6 @@ QString RemoteLinuxRunConfiguration::defaultDisplayName() const return RunConfigurationFactory::decoratedTargetName(d->targetName, target()); } -QString RemoteLinuxRunConfiguration::arguments() const -{ - return d->arguments; -} - QString RemoteLinuxRunConfiguration::localExecutableFilePath() const { return target()->applicationTargets().targetFilePath(d->targetName).toString(); @@ -182,21 +171,6 @@ QString RemoteLinuxRunConfiguration::remoteExecutableFilePath() const ? alternateRemoteExecutable() : defaultRemoteExecutableFilePath(); } -void RemoteLinuxRunConfiguration::setArguments(const QString &args) -{ - d->arguments = args; -} - -QString RemoteLinuxRunConfiguration::workingDirectory() const -{ - return d->workingDirectory; -} - -void RemoteLinuxRunConfiguration::setWorkingDirectory(const QString &wd) -{ - d->workingDirectory = wd; -} - void RemoteLinuxRunConfiguration::setUseAlternateExecutable(bool useAlternate) { d->useAlternateRemoteExecutable = useAlternate; diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.h b/src/plugins/remotelinux/remotelinuxrunconfiguration.h index e60fd1ffa54..947e22ba26d 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.h +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.h @@ -53,10 +53,6 @@ public: QString localExecutableFilePath() const; QString defaultRemoteExecutableFilePath() const; QString remoteExecutableFilePath() const; - QString arguments() const; - void setArguments(const QString &args); - QString workingDirectory() const; - void setWorkingDirectory(const QString &wd); void setAlternateRemoteExecutable(const QString &exe); QString alternateRemoteExecutable() const; void setUseAlternateExecutable(bool useAlternate); diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationwidget.cpp b/src/plugins/remotelinux/remotelinuxrunconfigurationwidget.cpp index 1f898bfdc63..db6043ceb41 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationwidget.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationwidget.cpp @@ -27,19 +27,19 @@ #include "remotelinuxrunconfiguration.h" +#include + #include #include -#include -#include #include -#include +#include #include #include #include #include -#include -#include + +using namespace ProjectExplorer; namespace RemoteLinux { namespace Internal { @@ -48,7 +48,7 @@ class RemoteLinuxRunConfigurationWidgetPrivate { public: RemoteLinuxRunConfigurationWidgetPrivate(RemoteLinuxRunConfiguration *runConfig) - : runConfiguration(runConfig), ignoreChange(false) + : runConfiguration(runConfig) { const auto selectable = Qt::TextSelectableByKeyboard | Qt::TextSelectableByMouse; localExecutableLabel.setTextInteractionFlags(selectable); @@ -56,10 +56,8 @@ public: } RemoteLinuxRunConfiguration * const runConfiguration; - bool ignoreChange; + bool ignoreChange = false; - QLineEdit argsLineEdit; - QLineEdit workingDirLineEdit; QLabel localExecutableLabel; QLabel remoteExecutableLabel; QCheckBox useAlternateCommandBox; @@ -72,31 +70,16 @@ public: using namespace Internal; -RemoteLinuxRunConfigurationWidget::RemoteLinuxRunConfigurationWidget(RemoteLinuxRunConfiguration *runConfiguration, - QWidget *parent) - : QWidget(parent), d(new RemoteLinuxRunConfigurationWidgetPrivate(runConfiguration)) +RemoteLinuxRunConfigurationWidget::RemoteLinuxRunConfigurationWidget(RemoteLinuxRunConfiguration *runConfiguration) + : d(new RemoteLinuxRunConfigurationWidgetPrivate(runConfiguration)) { - QVBoxLayout *mainLayout = new QVBoxLayout(this); + auto mainLayout = new QVBoxLayout(this); mainLayout->setMargin(0); - addGenericWidgets(mainLayout); -} -RemoteLinuxRunConfigurationWidget::~RemoteLinuxRunConfigurationWidget() -{ - delete d; -} - -void RemoteLinuxRunConfigurationWidget::addFormLayoutRow(QWidget *label, QWidget *field) -{ - d->genericWidgetsLayout.addRow(label, field); -} - -void RemoteLinuxRunConfigurationWidget::addGenericWidgets(QVBoxLayout *mainLayout) -{ - Utils::DetailsWidget *detailsContainer = new Utils::DetailsWidget(this); + auto detailsContainer = new Utils::DetailsWidget(this); detailsContainer->setState(Utils::DetailsWidget::NoSummary); - QWidget *details = new QWidget(this); + auto details = new QWidget(this); details->setLayout(&d->genericWidgetsLayout); detailsContainer->setWidget(details); @@ -107,8 +90,8 @@ void RemoteLinuxRunConfigurationWidget::addGenericWidgets(QVBoxLayout *mainLayou d->localExecutableLabel.setText(d->runConfiguration->localExecutableFilePath()); d->genericWidgetsLayout.addRow(tr("Executable on host:"), &d->localExecutableLabel); d->genericWidgetsLayout.addRow(tr("Executable on device:"), &d->remoteExecutableLabel); - QWidget * const altRemoteExeWidget = new QWidget; - QHBoxLayout * const altRemoteExeLayout = new QHBoxLayout(altRemoteExeWidget); + auto altRemoteExeWidget = new QWidget; + auto altRemoteExeLayout = new QHBoxLayout(altRemoteExeWidget); altRemoteExeLayout->setContentsMargins(0, 0, 0, 0); d->alternateCommand.setText(d->runConfiguration->alternateRemoteExecutable()); altRemoteExeLayout->addWidget(&d->alternateCommand); @@ -117,15 +100,11 @@ void RemoteLinuxRunConfigurationWidget::addGenericWidgets(QVBoxLayout *mainLayou altRemoteExeLayout->addWidget(&d->useAlternateCommandBox); d->genericWidgetsLayout.addRow(tr("Alternate executable on device:"), altRemoteExeWidget); - d->argsLineEdit.setText(d->runConfiguration->arguments()); - d->genericWidgetsLayout.addRow(tr("Arguments:"), &d->argsLineEdit); + d->runConfiguration->extraAspect() + ->addToMainConfigurationWidget(this, &d->genericWidgetsLayout); + d->runConfiguration->extraAspect() + ->addToMainConfigurationWidget(this, &d->genericWidgetsLayout); - d->workingDirLineEdit.setPlaceholderText(tr("")); - d->workingDirLineEdit.setText(d->runConfiguration->workingDirectory()); - d->genericWidgetsLayout.addRow(tr("Working directory:"), &d->workingDirLineEdit); - - connect(&d->argsLineEdit, &QLineEdit::textEdited, - this, &RemoteLinuxRunConfigurationWidget::argumentsEdited); connect(d->runConfiguration, &RemoteLinuxRunConfiguration::targetInformationChanged, this, &RemoteLinuxRunConfigurationWidget::updateTargetInformation); connect(d->runConfiguration, &RemoteLinuxRunConfiguration::deploySpecsChanged, @@ -134,15 +113,19 @@ void RemoteLinuxRunConfigurationWidget::addGenericWidgets(QVBoxLayout *mainLayou this, &RemoteLinuxRunConfigurationWidget::handleUseAlternateCommandChanged); connect(&d->alternateCommand, &QLineEdit::textEdited, this, &RemoteLinuxRunConfigurationWidget::handleAlternateCommandChanged); - connect(&d->workingDirLineEdit, &QLineEdit::textEdited, - this, &RemoteLinuxRunConfigurationWidget::handleWorkingDirectoryChanged); + handleDeploySpecsChanged(); handleUseAlternateCommandChanged(); } -void RemoteLinuxRunConfigurationWidget::argumentsEdited(const QString &text) +RemoteLinuxRunConfigurationWidget::~RemoteLinuxRunConfigurationWidget() { - d->runConfiguration->setArguments(text); + delete d; +} + +void RemoteLinuxRunConfigurationWidget::addFormLayoutRow(QWidget *label, QWidget *field) +{ + d->genericWidgetsLayout.addRow(label, field); } void RemoteLinuxRunConfigurationWidget::updateTargetInformation() @@ -179,9 +162,4 @@ void RemoteLinuxRunConfigurationWidget::handleAlternateCommandChanged() d->runConfiguration->setAlternateRemoteExecutable(d->alternateCommand.text().trimmed()); } -void RemoteLinuxRunConfigurationWidget::handleWorkingDirectoryChanged() -{ - d->runConfiguration->setWorkingDirectory(d->workingDirLineEdit.text().trimmed()); -} - } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationwidget.h b/src/plugins/remotelinux/remotelinuxrunconfigurationwidget.h index 0ac60985c6b..3c31c9f978c 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationwidget.h +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationwidget.h @@ -43,21 +43,17 @@ class REMOTELINUX_EXPORT RemoteLinuxRunConfigurationWidget : public QWidget { Q_OBJECT public: - explicit RemoteLinuxRunConfigurationWidget(RemoteLinuxRunConfiguration *runConfiguration, - QWidget *parent = 0); + explicit RemoteLinuxRunConfigurationWidget(RemoteLinuxRunConfiguration *runConfiguration); ~RemoteLinuxRunConfigurationWidget(); void addFormLayoutRow(QWidget *label, QWidget *field); private: - void argumentsEdited(const QString &args); void updateTargetInformation(); void handleDeploySpecsChanged(); void handleUseAlternateCommandChanged(); void handleAlternateCommandChanged(); - void handleWorkingDirectoryChanged(); - void addGenericWidgets(QVBoxLayout *mainLayout); void setLabelText(QLabel &label, const QString ®ularText, const QString &errorText); Internal::RemoteLinuxRunConfigurationWidgetPrivate * const d;