diff --git a/src/libs/utils/environmentmodel.cpp b/src/libs/utils/environmentmodel.cpp index fde8e7ad550..303f7cf7d21 100644 --- a/src/libs/utils/environmentmodel.cpp +++ b/src/libs/utils/environmentmodel.cpp @@ -129,6 +129,11 @@ bool EnvironmentModel::changes(const QString &name) const return d->findInChanges(name) >= 0; } +Environment EnvironmentModel::baseEnvironment() const +{ + return d->m_baseEnvironment; +} + QVariant EnvironmentModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) diff --git a/src/libs/utils/environmentmodel.h b/src/libs/utils/environmentmodel.h index 3eb0ece6cba..4230c82d794 100644 --- a/src/libs/utils/environmentmodel.h +++ b/src/libs/utils/environmentmodel.h @@ -60,6 +60,7 @@ public: QString indexToVariable(const QModelIndex &index) const; QModelIndex variableToIndex(const QString &name) const; bool changes(const QString &key) const; + Environment baseEnvironment() const; void setBaseEnvironment(const Environment &env); QList userChanges() const; void setUserChanges(QList list); diff --git a/src/plugins/projectexplorer/environmentwidget.cpp b/src/plugins/projectexplorer/environmentwidget.cpp index e39f21532bd..89b0054f462 100644 --- a/src/plugins/projectexplorer/environmentwidget.cpp +++ b/src/plugins/projectexplorer/environmentwidget.cpp @@ -25,6 +25,7 @@ #include "environmentwidget.h" +#include #include #include @@ -35,6 +36,7 @@ #include #include +#include #include #include #include @@ -129,6 +131,7 @@ public: QPushButton *m_resetButton; QPushButton *m_unsetButton; QPushButton *m_batchEditButton; + QPushButton *m_terminalButton; }; EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetailsWidget) @@ -201,6 +204,11 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetails d->m_batchEditButton->setText(tr("&Batch Edit...")); buttonLayout->addWidget(d->m_batchEditButton); + d->m_terminalButton = new QPushButton(this); + d->m_terminalButton->setText(tr("Open &Terminal")); + d->m_terminalButton->setToolTip(tr("Open a terminal with this environment set up.")); + buttonLayout->addWidget(d->m_terminalButton); + buttonLayout->addStretch(); horizontalLayout->addLayout(buttonLayout); @@ -224,6 +232,9 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetails connect(d->m_environmentView->selectionModel(), &QItemSelectionModel::currentChanged, this, &EnvironmentWidget::environmentCurrentIndexChanged); + connect(d->m_terminalButton, &QAbstractButton::clicked, + this, &EnvironmentWidget::openTerminal); + connect(d->m_detailsContainer, &Utils::DetailsWidget::linkActivated, this, &EnvironmentWidget::linkActivated); @@ -356,6 +367,13 @@ void EnvironmentWidget::batchEditEnvironmentButtonClicked() d->m_model->setUserChanges(newChanges); } +void EnvironmentWidget::openTerminal() +{ + Utils::Environment env = d->m_model->baseEnvironment(); + env.modify(d->m_model->userChanges()); + Core::FileUtils::openTerminal(QDir::currentPath(), env); +} + void EnvironmentWidget::environmentCurrentIndexChanged(const QModelIndex ¤t) { if (current.isValid()) { diff --git a/src/plugins/projectexplorer/environmentwidget.h b/src/plugins/projectexplorer/environmentwidget.h index 004f1cb1e62..3eb85bcc8d7 100644 --- a/src/plugins/projectexplorer/environmentwidget.h +++ b/src/plugins/projectexplorer/environmentwidget.h @@ -66,6 +66,7 @@ private: void removeEnvironmentButtonClicked(); void unsetEnvironmentButtonClicked(); void batchEditEnvironmentButtonClicked(); + void openTerminal(); void environmentCurrentIndexChanged(const QModelIndex ¤t); void invalidateCurrentIndex(); void updateSummaryText();