Add "Open Terminal" to EnvironmentWidget

Add a "Open Terminal" button to the environment widget. This opens
a terminal with the environment set up in the current working directory
of Qt Creator.

Task-number: QTCREATORBUG-19692
Change-Id: I33f60969d2a05a15f6f8fc1051f255e6c64f1e58
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Tobias Hunger
2018-08-31 10:56:08 +02:00
parent 626665b7a4
commit 72ada44be3
4 changed files with 25 additions and 0 deletions

View File

@@ -129,6 +129,11 @@ bool EnvironmentModel::changes(const QString &name) const
return d->findInChanges(name) >= 0; return d->findInChanges(name) >= 0;
} }
Environment EnvironmentModel::baseEnvironment() const
{
return d->m_baseEnvironment;
}
QVariant EnvironmentModel::data(const QModelIndex &index, int role) const QVariant EnvironmentModel::data(const QModelIndex &index, int role) const
{ {
if (!index.isValid()) if (!index.isValid())

View File

@@ -60,6 +60,7 @@ public:
QString indexToVariable(const QModelIndex &index) const; QString indexToVariable(const QModelIndex &index) const;
QModelIndex variableToIndex(const QString &name) const; QModelIndex variableToIndex(const QString &name) const;
bool changes(const QString &key) const; bool changes(const QString &key) const;
Environment baseEnvironment() const;
void setBaseEnvironment(const Environment &env); void setBaseEnvironment(const Environment &env);
QList<EnvironmentItem> userChanges() const; QList<EnvironmentItem> userChanges() const;
void setUserChanges(QList<EnvironmentItem> list); void setUserChanges(QList<EnvironmentItem> list);

View File

@@ -25,6 +25,7 @@
#include "environmentwidget.h" #include "environmentwidget.h"
#include <coreplugin/fileutils.h>
#include <coreplugin/find/itemviewfind.h> #include <coreplugin/find/itemviewfind.h>
#include <utils/detailswidget.h> #include <utils/detailswidget.h>
@@ -35,6 +36,7 @@
#include <utils/itemviews.h> #include <utils/itemviews.h>
#include <utils/tooltip/tooltip.h> #include <utils/tooltip/tooltip.h>
#include <QDir>
#include <QString> #include <QString>
#include <QPushButton> #include <QPushButton>
#include <QTreeView> #include <QTreeView>
@@ -129,6 +131,7 @@ public:
QPushButton *m_resetButton; QPushButton *m_resetButton;
QPushButton *m_unsetButton; QPushButton *m_unsetButton;
QPushButton *m_batchEditButton; QPushButton *m_batchEditButton;
QPushButton *m_terminalButton;
}; };
EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetailsWidget) EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetailsWidget)
@@ -201,6 +204,11 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetails
d->m_batchEditButton->setText(tr("&Batch Edit...")); d->m_batchEditButton->setText(tr("&Batch Edit..."));
buttonLayout->addWidget(d->m_batchEditButton); 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(); buttonLayout->addStretch();
horizontalLayout->addLayout(buttonLayout); horizontalLayout->addLayout(buttonLayout);
@@ -224,6 +232,9 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetails
connect(d->m_environmentView->selectionModel(), &QItemSelectionModel::currentChanged, connect(d->m_environmentView->selectionModel(), &QItemSelectionModel::currentChanged,
this, &EnvironmentWidget::environmentCurrentIndexChanged); this, &EnvironmentWidget::environmentCurrentIndexChanged);
connect(d->m_terminalButton, &QAbstractButton::clicked,
this, &EnvironmentWidget::openTerminal);
connect(d->m_detailsContainer, &Utils::DetailsWidget::linkActivated, connect(d->m_detailsContainer, &Utils::DetailsWidget::linkActivated,
this, &EnvironmentWidget::linkActivated); this, &EnvironmentWidget::linkActivated);
@@ -356,6 +367,13 @@ void EnvironmentWidget::batchEditEnvironmentButtonClicked()
d->m_model->setUserChanges(newChanges); 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 &current) void EnvironmentWidget::environmentCurrentIndexChanged(const QModelIndex &current)
{ {
if (current.isValid()) { if (current.isValid()) {

View File

@@ -66,6 +66,7 @@ private:
void removeEnvironmentButtonClicked(); void removeEnvironmentButtonClicked();
void unsetEnvironmentButtonClicked(); void unsetEnvironmentButtonClicked();
void batchEditEnvironmentButtonClicked(); void batchEditEnvironmentButtonClicked();
void openTerminal();
void environmentCurrentIndexChanged(const QModelIndex &current); void environmentCurrentIndexChanged(const QModelIndex &current);
void invalidateCurrentIndex(); void invalidateCurrentIndex();
void updateSummaryText(); void updateSummaryText();