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;
}
Environment EnvironmentModel::baseEnvironment() const
{
return d->m_baseEnvironment;
}
QVariant EnvironmentModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())

View File

@@ -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<EnvironmentItem> userChanges() const;
void setUserChanges(QList<EnvironmentItem> list);

View File

@@ -25,6 +25,7 @@
#include "environmentwidget.h"
#include <coreplugin/fileutils.h>
#include <coreplugin/find/itemviewfind.h>
#include <utils/detailswidget.h>
@@ -35,6 +36,7 @@
#include <utils/itemviews.h>
#include <utils/tooltip/tooltip.h>
#include <QDir>
#include <QString>
#include <QPushButton>
#include <QTreeView>
@@ -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 &current)
{
if (current.isValid()) {

View File

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