From 10151809c4ea28f57d97f4f2f3f2fbbfe36cfa1d Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Wed, 27 May 2009 17:28:50 +0200 Subject: [PATCH] Add Environment settings to CMakeRunConfiguration --- .../cmakeprojectmanager/cmakeproject.cpp | 7 ++ .../cmakerunconfiguration.cpp | 106 +++++++++++++++--- .../cmakerunconfiguration.h | 35 ++++-- 3 files changed, 126 insertions(+), 22 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index ab4887c52f2..988c49ddc96 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -459,7 +459,10 @@ ProjectExplorer::Environment CMakeProject::environment(const QString &buildConfi void CMakeProject::setUseSystemEnvironment(const QString &buildConfiguration, bool b) { + if (b == useSystemEnvironment(buildConfiguration)) + return; setValue(buildConfiguration, "clearSystemEnvironment", !b); + emit environmentChanged(buildConfiguration); } bool CMakeProject::useSystemEnvironment(const QString &buildConfiguration) const @@ -475,7 +478,11 @@ QList<ProjectExplorer::EnvironmentItem> CMakeProject::userEnvironmentChanges(con void CMakeProject::setUserEnvironmentChanges(const QString &buildConfig, const QList<ProjectExplorer::EnvironmentItem> &diff) { + QStringList list = EnvironmentItem::toStringList(diff); + if (list == value(buildConfig, "userEnvironmentChanges")) + return; setValue(buildConfig, "userEnvironmentChanges", EnvironmentItem::toStringList(diff)); + emit environmentChanged(buildConfig); } QString CMakeProject::buildDirectory(const QString &buildConfiguration) const diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index 08fa7c1d07b..cb66f9a8e34 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -49,6 +49,12 @@ CMakeRunConfiguration::CMakeRunConfiguration(CMakeProject *pro, const QString &t , m_title(title) { setName(title); + + connect(pro, SIGNAL(activeBuildConfigurationChanged()), + this, SIGNAL(baseEnvironmentChanged())); + + connect(pro, SIGNAL(environmentChanged(QString)), + this, SIGNAL(baseEnvironmentChanged())); } CMakeRunConfiguration::~CMakeRunConfiguration() @@ -80,11 +86,6 @@ QStringList CMakeRunConfiguration::commandLineArguments() const return ProjectExplorer::Environment::parseCombinedArgString(m_arguments); } -ProjectExplorer::Environment CMakeRunConfiguration::environment() const -{ - return project()->environment(project()->activeBuildConfiguration()); -} - QString CMakeRunConfiguration::title() const { return m_title; @@ -108,6 +109,7 @@ void CMakeRunConfiguration::save(ProjectExplorer::PersistentSettingsWriter &writ writer.saveValue("CMakeRunConfiguration.UseTerminal", m_runMode == Console); writer.saveValue("CMakeRunConfiguation.Title", m_title); writer.saveValue("CMakeRunConfiguration.Arguments", m_arguments); + writer.saveValue("CMakeRunConfiguration.UserEnvironmentChanges", ProjectExplorer::EnvironmentItem::toStringList(m_userEnvironmentChanges)); } void CMakeRunConfiguration::restore(const ProjectExplorer::PersistentSettingsReader &reader) @@ -118,19 +120,12 @@ void CMakeRunConfiguration::restore(const ProjectExplorer::PersistentSettingsRea m_runMode = reader.restoreValue("CMakeRunConfiguration.UseTerminal").toBool() ? Console : Gui; m_title = reader.restoreValue("CMakeRunConfiguation.Title").toString(); m_arguments = reader.restoreValue("CMakeRunConfiguration.Arguments").toString(); + m_userEnvironmentChanges = ProjectExplorer::EnvironmentItem::fromStringList(reader.restoreValue("CMakeRunConfiguration.UserEnvironmentChanges").toStringList()); } QWidget *CMakeRunConfiguration::configurationWidget() { - QWidget *widget = new QWidget(); - QFormLayout *fl = new QFormLayout(); - widget->setLayout(fl); - QLineEdit *argumentsLineEdit = new QLineEdit(widget); - argumentsLineEdit->setText(m_arguments); - connect(argumentsLineEdit, SIGNAL(textChanged(QString)), - this, SLOT(setArguments(QString))); - fl->addRow(tr("Arguments:"), argumentsLineEdit); - return widget; + return new CMakeRunConfigurationWidget(this); } void CMakeRunConfiguration::setArguments(const QString &newText) @@ -145,6 +140,89 @@ QString CMakeRunConfiguration::dumperLibrary() const return dhl; } +ProjectExplorer::Environment CMakeRunConfiguration::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 CMakeRunConfiguration::environment() const +{ + ProjectExplorer::Environment env = baseEnvironment(); + env.modify(userEnvironmentChanges()); + return env; +} + +QList<ProjectExplorer::EnvironmentItem> CMakeRunConfiguration::userEnvironmentChanges() const +{ + return m_userEnvironmentChanges; +} + +void CMakeRunConfiguration::setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff) +{ + if (m_userEnvironmentChanges != diff) { + m_userEnvironmentChanges = diff; + emit userEnvironmentChangesChanged(diff); + } +} + +// Configuration widget + + +CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration *cmakeRunConfiguration, QWidget *parent) + : QWidget(parent), m_cmakeRunConfiguration(cmakeRunConfiguration) +{ + + QFormLayout *fl = new QFormLayout(); + QLineEdit *argumentsLineEdit = new QLineEdit(); + argumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(cmakeRunConfiguration->commandLineArguments())); + connect(argumentsLineEdit, SIGNAL(textChanged(QString)), + this, SLOT(setArguments(QString))); + fl->addRow(tr("Arguments:"), argumentsLineEdit); + + QVBoxLayout *vbx = new QVBoxLayout(this); + vbx->addLayout(fl); + m_environmentWidget = new ProjectExplorer::EnvironmentWidget(this); + vbx->addWidget(m_environmentWidget); + m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment()); + m_environmentWidget->setUserChanges(m_cmakeRunConfiguration->userEnvironmentChanges()); + + connect(m_environmentWidget, SIGNAL(userChangesUpdated()), + this, SLOT(userChangesUpdated())); + + connect(m_cmakeRunConfiguration, SIGNAL(baseEnvironmentChanged()), + this, SLOT(baseEnvironmentChanged())); + connect(m_cmakeRunConfiguration, SIGNAL(userEnvironmentChangesChanged(QList<ProjectExplorer::EnvironmentItem>)), + this, SLOT(userEnvironmentChangesChanged())); +} + +void CMakeRunConfigurationWidget::userChangesUpdated() +{ + m_cmakeRunConfiguration->setUserEnvironmentChanges(m_environmentWidget->userChanges()); +} + +void CMakeRunConfigurationWidget::baseEnvironmentChanged() +{ + m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment()); +} + +void CMakeRunConfigurationWidget::userEnvironmentChangesChanged() +{ + m_environmentWidget->setUserChanges(m_cmakeRunConfiguration->userEnvironmentChanges()); +} + +void CMakeRunConfigurationWidget::setArguments(const QString &args) +{ + m_cmakeRunConfiguration->setArguments(args); +} + + // Factory CMakeRunConfigurationFactory::CMakeRunConfigurationFactory() { diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h index f014894a67d..8227eaf8474 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h @@ -33,6 +33,7 @@ #include <projectexplorer/applicationrunconfiguration.h> #include <projectexplorer/environment.h> #include <projectexplorer/persistentsettings.h> +#include <projectexplorer/environmenteditmodel.h> namespace CMakeProjectManager { namespace Internal { @@ -41,6 +42,7 @@ class CMakeProject; class CMakeRunConfiguration : public ProjectExplorer::ApplicationRunConfiguration { + friend class CMakeRunConfigurationWidget; Q_OBJECT public: CMakeRunConfiguration(CMakeProject *pro, const QString &target, const QString &workingDirectory, const QString &title); @@ -62,24 +64,41 @@ public: virtual void restore(const ProjectExplorer::PersistentSettingsReader &reader); virtual QString dumperLibrary() const; +signals: + void baseEnvironmentChanged(); + void userEnvironmentChangesChanged(const QList<ProjectExplorer::EnvironmentItem> &diff); + private slots: void setArguments(const QString &newText); private: + ProjectExplorer::Environment baseEnvironment() const; + void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff); + QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const; + + RunMode m_runMode; QString m_target; QString m_workingDirectory; QString m_title; QString m_arguments; + QList<ProjectExplorer::EnvironmentItem> m_userEnvironmentChanges; +}; + +class CMakeRunConfigurationWidget : public QWidget +{ + Q_OBJECT +public: + CMakeRunConfigurationWidget(CMakeRunConfiguration *cmakeRunConfiguration, QWidget *parent = 0); +private slots: + void setArguments(const QString &args); + void baseEnvironmentChanged(); + void userEnvironmentChangesChanged(); + void userChangesUpdated(); +private: + CMakeRunConfiguration *m_cmakeRunConfiguration; + ProjectExplorer::EnvironmentWidget *m_environmentWidget; }; -/* The run configuration factory is used for restoring run configurations from - * settings. And used to create new runconfigurations in the "Run Settings" Dialog. - * For the first case bool canCreate(const QString &type) and - * QSharedPointer<RunConfiguration> create(Project *project, QString type) are used. - * For the second type the functions QStringList canCreate(Project *pro) and - * QString nameForType(const QString&) are used to generate a list of creatable - * RunConfigurations, and create(..) is used to create it. - */ class CMakeRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory { Q_OBJECT; -- GitLab