diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h index 8227eaf84745c8cdee23e53c65fb7ad10f84c539..20ab7415143406074b10d63aba3a75592192652e 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h @@ -75,7 +75,6 @@ private: void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff); QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const; - RunMode m_runMode; QString m_target; QString m_workingDirectory; diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index 1953e9635500d9c4359109a16d53b80e515cfb8e..9efea6c444a03ae89c972412d8a8557a909c8270 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -63,10 +63,8 @@ public: }; CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomExecutableRunConfiguration *rc) - : m_ignoreChange(false) + : m_ignoreChange(false), m_runConfiguration(rc) { - m_runConfiguration = rc; - QFormLayout *layout = new QFormLayout; layout->setMargin(0); @@ -88,7 +86,14 @@ CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomE m_useTerminalCheck = new QCheckBox(tr("Run in &Terminal"), this); layout->addRow(QString(), m_useTerminalCheck); - setLayout(layout); + m_environmentWidget = new EnvironmentWidget(this); + m_environmentWidget->setBaseEnvironment(rc->baseEnvironment()); + m_environmentWidget->setUserChanges(rc->userEnvironmentChanges()); + + QVBoxLayout *vbox = new QVBoxLayout(this); + vbox->addLayout(layout); + vbox->addWidget(m_environmentWidget); + changed(); connect(m_userName, SIGNAL(textEdited(QString)), @@ -103,8 +108,32 @@ CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomE this, SLOT(termToggled(bool))); connect(m_runConfiguration, SIGNAL(changed()), this, SLOT(changed())); + + connect(m_environmentWidget, SIGNAL(userChangesUpdated()), + this, SLOT(userChangesUpdated())); + + connect(m_runConfiguration, SIGNAL(baseEnvironmentChanged()), + this, SLOT(baseEnvironmentChanged())); + connect(m_runConfiguration, SIGNAL(userEnvironmentChangesChanged(QList<ProjectExplorer::EnvironmentItem>)), + this, SLOT(userEnvironmentChangesChanged())); +} + +void CustomExecutableConfigurationWidget::userChangesUpdated() +{ + m_runConfiguration->setUserEnvironmentChanges(m_environmentWidget->userChanges()); +} + +void CustomExecutableConfigurationWidget::baseEnvironmentChanged() +{ + m_environmentWidget->setBaseEnvironment(m_runConfiguration->baseEnvironment()); +} + +void CustomExecutableConfigurationWidget::userEnvironmentChangesChanged() +{ + m_environmentWidget->setUserChanges(m_runConfiguration->userEnvironmentChanges()); } + void CustomExecutableConfigurationWidget::setExecutable() { m_ignoreChange = true; @@ -158,6 +187,13 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Project *pro) { m_workingDirectory = "$BUILDDIR"; setName(tr("Custom Executable")); + + connect(pro, SIGNAL(activeBuildConfigurationChanged()), + this, SIGNAL(baseEnvironmentChanged())); + + connect(pro, SIGNAL(environmentChanged(QString)), + this, SIGNAL(baseEnvironmentChanged())); + } CustomExecutableRunConfiguration::~CustomExecutableRunConfiguration() @@ -241,11 +277,37 @@ QStringList CustomExecutableRunConfiguration::commandLineArguments() const return m_cmdArguments; } -Environment CustomExecutableRunConfiguration::environment() const +ProjectExplorer::Environment CustomExecutableRunConfiguration::baseEnvironment() const +{ + // TODO use either System Environment + // build environment + // or empty + //Environment env = Environment(QProcess::systemEnvironment()); + + QString config = project()->activeBuildConfiguration(); + ProjectExplorer::Environment env = project()->environment(project()->activeBuildConfiguration()); + return env; +} + +ProjectExplorer::Environment CustomExecutableRunConfiguration::environment() const +{ + ProjectExplorer::Environment env = baseEnvironment(); + env.modify(userEnvironmentChanges()); + return env; +} + +QList<ProjectExplorer::EnvironmentItem> CustomExecutableRunConfiguration::userEnvironmentChanges() const { - return project()->environment(project()->activeBuildConfiguration()); + return m_userEnvironmentChanges; } +void CustomExecutableRunConfiguration::setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff) +{ + if (m_userEnvironmentChanges != diff) { + m_userEnvironmentChanges = diff; + emit userEnvironmentChangesChanged(diff); + } +} void CustomExecutableRunConfiguration::save(PersistentSettingsWriter &writer) const { @@ -255,6 +317,7 @@ void CustomExecutableRunConfiguration::save(PersistentSettingsWriter &writer) co writer.saveValue("UseTerminal", m_runMode == Console); writer.saveValue("UserSetName", m_userSetName); writer.saveValue("UserName", m_userName); + writer.saveValue("UserEnvironmentChanges", ProjectExplorer::EnvironmentItem::toStringList(m_userEnvironmentChanges)); ApplicationRunConfiguration::save(writer); } @@ -266,6 +329,7 @@ void CustomExecutableRunConfiguration::restore(const PersistentSettingsReader &r m_runMode = reader.restoreValue("UseTerminal").toBool() ? Console : Gui; m_userSetName = reader.restoreValue("UserSetName").toBool(); m_userName = reader.restoreValue("UserName").toString(); + m_userEnvironmentChanges = ProjectExplorer::EnvironmentItem::fromStringList(reader.restoreValue("UserEnvironmentChanges").toStringList()); ApplicationRunConfiguration::restore(reader); } diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h index 107c889f954c4e9e72128612af856ababa7f03ca..7487770538a35ec1312b1ea8c4e15f58fc781c6c 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h @@ -33,6 +33,7 @@ #include "applicationrunconfiguration.h" #include <utils/pathchooser.h> +#include <projectexplorer/environmenteditmodel.h> #include <QtGui/QToolButton> @@ -91,7 +92,15 @@ public: signals: void changed(); + void baseEnvironmentChanged(); + void userEnvironmentChangesChanged(const QList<ProjectExplorer::EnvironmentItem> &diff); + + private: + ProjectExplorer::Environment baseEnvironment() const; + void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff); + QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const; + void setExecutable(const QString &executable); void setCommandLineArguments(const QString &commandLineArguments); void setWorkingDirectory(const QString &workingDirectory); @@ -103,6 +112,7 @@ private: RunMode m_runMode; bool m_userSetName; QString m_userName; + QList<ProjectExplorer::EnvironmentItem> m_userEnvironmentChanges; }; class CustomExecutableRunConfigurationFactory : public IRunConfigurationFactory @@ -137,6 +147,10 @@ private slots: void setWorkingDirectory(); void termToggled(bool); + void userChangesUpdated(); + void baseEnvironmentChanged(); + void userEnvironmentChangesChanged(); + private: bool m_ignoreChange; CustomExecutableRunConfiguration *m_runConfiguration; @@ -145,6 +159,7 @@ private: QLineEdit *m_commandLineArgumentsLineEdit; Core::Utils::PathChooser *m_workingDirectory; QCheckBox *m_useTerminalCheck; + ProjectExplorer::EnvironmentWidget *m_environmentWidget; }; } // namespace Internal