From 48167ee5f156857f48172ea01fdd78d7aab14145 Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Thu, 28 May 2009 16:34:31 +0200 Subject: [PATCH] Add a few options to the runconfigurations base environment Note: This code should be shared between Qt4RunConfiguration, CMakeRunConfiguration and CustomRunExecutable. Also we are approaching other IDEs like configuraion options for setting the environment. Without having a good GUI for that. I'll probably be redesigning this for 1.3 or 1.4. --- src/plugins/qt4projectmanager/qt4project.cpp | 2 +- .../qt4projectmanager/qt4runconfiguration.cpp | 100 +++++++++++++++--- .../qt4projectmanager/qt4runconfiguration.h | 12 +++ 3 files changed, 100 insertions(+), 14 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 6dd9617e999..549e8a57af2 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -710,7 +710,7 @@ QString Qt4Project::buildDirectory(const QString &buildConfiguration) const ProjectExplorer::Environment Qt4Project::baseEnvironment(const QString &buildConfiguration) const { - Environment env = useSystemEnvironment(buildConfiguration) ? Environment(QProcess::systemEnvironment()) : Environment(); + Environment env = useSystemEnvironment(buildConfiguration) ? Environment::systemEnvironment() : Environment(); qtVersion(buildConfiguration)->addToEnvironment(env); return env; } diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index c4da15dd23a..a5c80a4c351 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -47,6 +47,8 @@ #include <QtGui/QLabel> #include <QtGui/QCheckBox> #include <QtGui/QToolButton> +#include <QtGui/QGroupBox> +#include <QtGui/QRadioButton> using namespace Qt4ProjectManager::Internal; using namespace Qt4ProjectManager; @@ -62,7 +64,8 @@ Qt4RunConfiguration::Qt4RunConfiguration(Qt4Project *pro, const QString &proFile m_configWidget(0), m_cachedTargetInformationValid(false), m_isUsingDyldImageSuffix(false), - m_userSetWokingDirectory(false) + m_userSetWokingDirectory(false), + m_baseEnvironmentBase(Qt4RunConfiguration::BuildEnvironmentBase) { if (!m_proFilePath.isEmpty()) setName(QFileInfo(m_proFilePath).completeBaseName()); @@ -142,14 +145,46 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run this, SLOT(usingDyldImageSuffixToggled(bool))); #endif - QVBoxLayout *vbox = new QVBoxLayout(this); - vbox->addLayout(toplayout); + + + QGroupBox *box = new QGroupBox(tr("Environment"),this); + QVBoxLayout *boxLayout = new QVBoxLayout(); + box->setLayout(boxLayout); + box->setFlat(true); + + QLabel *label = new QLabel(tr("Base environment for this runconfiguration:"), this); + boxLayout->addWidget(label); + + m_cleanEnvironmentRadioButton = new QRadioButton("Clean Environment", box); + m_systemEnvironmentRadioButton = new QRadioButton("System Environment", box); + m_buildEnvironmentRadioButton = new QRadioButton("Build Environment", box); + boxLayout->addWidget(m_cleanEnvironmentRadioButton); + boxLayout->addWidget(m_systemEnvironmentRadioButton); + boxLayout->addWidget(m_buildEnvironmentRadioButton); + + if (qt4RunConfiguration->baseEnvironmentBase() == Qt4RunConfiguration::CleanEnvironmentBase) + m_cleanEnvironmentRadioButton->setChecked(true); + else if (qt4RunConfiguration->baseEnvironmentBase() == Qt4RunConfiguration::SystemEnvironmentBase) + m_systemEnvironmentRadioButton->setChecked(true); + else if (qt4RunConfiguration->baseEnvironmentBase() == Qt4RunConfiguration::BuildEnvironmentBase) + m_buildEnvironmentRadioButton->setChecked(true); + + connect(m_cleanEnvironmentRadioButton, SIGNAL(toggled(bool)), + this, SLOT(baseEnvironmentRadioButtonChanged())); + connect(m_systemEnvironmentRadioButton, SIGNAL(toggled(bool)), + this, SLOT(baseEnvironmentRadioButtonChanged())); + connect(m_buildEnvironmentRadioButton, SIGNAL(toggled(bool)), + this, SLOT(baseEnvironmentRadioButtonChanged())); m_environmentWidget = new ProjectExplorer::EnvironmentWidget(this); m_environmentWidget->setBaseEnvironment(m_qt4RunConfiguration->baseEnvironment()); m_environmentWidget->setUserChanges(m_qt4RunConfiguration->userEnvironmentChanges()); m_environmentWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - vbox->addWidget(m_environmentWidget); + boxLayout->addWidget(m_environmentWidget); + + QVBoxLayout *vbox = new QVBoxLayout(this); + vbox->addLayout(toplayout); + vbox->addWidget(box); connect(m_workingDirectoryEdit, SIGNAL(changed()), this, SLOT(setWorkingDirectory())); @@ -188,8 +223,32 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run this, SLOT(baseEnvironmentChanged())); } +void Qt4RunConfigurationWidget::baseEnvironmentRadioButtonChanged() +{ + m_ignoreChange = true; + if (m_cleanEnvironmentRadioButton->isChecked()) + m_qt4RunConfiguration->setBaseEnvironmentBase(Qt4RunConfiguration::CleanEnvironmentBase); + else if (m_systemEnvironmentRadioButton->isChecked()) + m_qt4RunConfiguration->setBaseEnvironmentBase(Qt4RunConfiguration::SystemEnvironmentBase); + else if (m_buildEnvironmentRadioButton->isChecked()) + m_qt4RunConfiguration->setBaseEnvironmentBase(Qt4RunConfiguration::BuildEnvironmentBase); + + m_environmentWidget->setBaseEnvironment(m_qt4RunConfiguration->baseEnvironment()); + m_ignoreChange = false; +} + void Qt4RunConfigurationWidget::baseEnvironmentChanged() { + if (m_ignoreChange) + return; + + if (m_qt4RunConfiguration->baseEnvironmentBase() == Qt4RunConfiguration::CleanEnvironmentBase) + m_cleanEnvironmentRadioButton->setChecked(true); + else if (m_qt4RunConfiguration->baseEnvironmentBase() == Qt4RunConfiguration::SystemEnvironmentBase) + m_systemEnvironmentRadioButton->setChecked(true); + else if (m_qt4RunConfiguration->baseEnvironmentBase() == Qt4RunConfiguration::BuildEnvironmentBase) + m_buildEnvironmentRadioButton->setChecked(true); + m_environmentWidget->setBaseEnvironment(m_qt4RunConfiguration->baseEnvironment()); } @@ -320,6 +379,7 @@ void Qt4RunConfiguration::save(PersistentSettingsWriter &writer) const writer.saveValue("UseTerminal", m_runMode == Console); writer.saveValue("UseDyldImageSuffix", m_isUsingDyldImageSuffix); writer.saveValue("UserEnvironmentChanges", ProjectExplorer::EnvironmentItem::toStringList(m_userEnvironmentChanges)); + writer.saveValue("BaseEnvironmentBase", m_baseEnvironmentBase); ApplicationRunConfiguration::save(writer); } @@ -338,6 +398,8 @@ void Qt4RunConfiguration::restore(const PersistentSettingsReader &reader) setName(QFileInfo(m_proFilePath).completeBaseName()); } m_userEnvironmentChanges = ProjectExplorer::EnvironmentItem::fromStringList(reader.restoreValue("UserEnvironmentChanges").toStringList()); + QVariant tmp = reader.restoreValue("BaseEnvironmentBase"); + m_baseEnvironmentBase = tmp.isValid() ? BaseEnvironmentBase(tmp.toInt()) : Qt4RunConfiguration::BuildEnvironmentBase; } QString Qt4RunConfiguration::executable() const @@ -380,15 +442,15 @@ QStringList Qt4RunConfiguration::commandLineArguments() const ProjectExplorer::Environment Qt4RunConfiguration::baseEnvironment() const { - // TODO use either System Environment - // build environment - // or empty - //Environment env = Environment(QProcess::systemEnvironment()); - - Qt4Project *pro = qobject_cast<Qt4Project *>(project()); - Q_ASSERT(pro); - QString config = pro->activeBuildConfiguration(); - ProjectExplorer::Environment env = pro->environment(pro->activeBuildConfiguration()); + ProjectExplorer::Environment env; + if (m_baseEnvironmentBase == Qt4RunConfiguration::CleanEnvironmentBase) { + // Nothing + } else if (m_baseEnvironmentBase == Qt4RunConfiguration::SystemEnvironmentBase) { + env = ProjectExplorer::Environment::systemEnvironment(); + } else if (m_baseEnvironmentBase == Qt4RunConfiguration::BuildEnvironmentBase) { + QString config = project()->activeBuildConfiguration(); + env = project()->environment(project()->activeBuildConfiguration()); + } if (m_isUsingDyldImageSuffix) { env.set("DYLD_IMAGE_SUFFIX", "_debug"); } @@ -564,6 +626,18 @@ QString Qt4RunConfiguration::dumperLibrary() const return version->debuggingHelperLibrary(); } +void Qt4RunConfiguration::setBaseEnvironmentBase(BaseEnvironmentBase env) +{ + if (m_baseEnvironmentBase == env) + return; + m_baseEnvironmentBase = env; + emit baseEnvironmentChanged(); +} + +Qt4RunConfiguration::BaseEnvironmentBase Qt4RunConfiguration::baseEnvironmentBase() const +{ + return m_baseEnvironmentBase; +} /// /// Qt4RunConfigurationFactory diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h index e9e407b4659..33bd7647c0f 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h @@ -42,6 +42,7 @@ class QWidget; class QCheckBox; class QLabel; class QLineEdit; +class QRadioButton; QT_END_NAMESPACE namespace Qt4ProjectManager { @@ -106,6 +107,10 @@ private slots: void setRunMode(RunMode runMode); private: + enum BaseEnvironmentBase { CleanEnvironmentBase, SystemEnvironmentBase, BuildEnvironmentBase }; + void setBaseEnvironmentBase(BaseEnvironmentBase env); + BaseEnvironmentBase baseEnvironmentBase() const; + ProjectExplorer::Environment baseEnvironment() const; void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff); QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const; @@ -126,6 +131,7 @@ private: bool m_userSetWokingDirectory; QString m_userWorkingDirectory; QList<ProjectExplorer::EnvironmentItem> m_userEnvironmentChanges; + BaseEnvironmentBase m_baseEnvironmentBase; }; class Qt4RunConfigurationWidget : public QWidget @@ -154,6 +160,7 @@ private slots: void termToggled(bool); void usingDyldImageSuffixToggled(bool); void usingDyldImageSuffixChanged(bool); + void baseEnvironmentRadioButtonChanged(); private: Qt4RunConfiguration *m_qt4RunConfiguration; bool m_ignoreChange; @@ -163,6 +170,11 @@ private: QLineEdit *m_argumentsLineEdit; QCheckBox *m_useTerminalCheck; QCheckBox *m_usingDyldImageSuffix; + + QRadioButton *m_cleanEnvironmentRadioButton; + QRadioButton *m_systemEnvironmentRadioButton; + QRadioButton *m_buildEnvironmentRadioButton; + ProjectExplorer::EnvironmentWidget *m_environmentWidget; bool m_isShown; }; -- GitLab