diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp index 0ec65f95dbf..3d35900acdb 100644 --- a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp @@ -45,6 +45,7 @@ #include #include +#include #include #include #include @@ -412,8 +413,16 @@ void DeviceInformationConfigWidget::currentDeviceChanged() KitEnvironmentConfigWidget::KitEnvironmentConfigWidget(Kit *workingCopy, const KitInformation *ki) : KitConfigWidget(workingCopy, ki), m_summaryLabel(new QLabel), - m_manageButton(new QPushButton) + m_manageButton(new QPushButton), + m_mainWidget(new QWidget) { + auto *layout = new QVBoxLayout; + layout->addWidget(m_summaryLabel); + if (Utils::HostOsInfo::isWindowsHost()) + initMSVCOutputSwitch(layout); + + m_mainWidget->setLayout(layout); + refresh(); m_manageButton->setText(tr("Change...")); connect(m_manageButton, &QAbstractButton::clicked, @@ -422,7 +431,7 @@ KitEnvironmentConfigWidget::KitEnvironmentConfigWidget(Kit *workingCopy, const K QWidget *KitEnvironmentConfigWidget::mainWidget() const { - return m_summaryLabel; + return m_mainWidget; } QString KitEnvironmentConfigWidget::displayName() const @@ -452,6 +461,15 @@ void KitEnvironmentConfigWidget::makeReadOnly() QList KitEnvironmentConfigWidget::currentEnvironment() const { QList changes = EnvironmentKitInformation::environmentChanges(m_kit); + + if (Utils::HostOsInfo::isWindowsHost()) { + const Utils::EnvironmentItem forceMSVCEnglishItem("VSLANG", "1033"); + if (changes.indexOf(forceMSVCEnglishItem) >= 0) { + m_vslangCheckbox->setCheckState(Qt::Checked); + changes.removeAll(forceMSVCEnglishItem); + } + } + Utils::sort(changes, [](const Utils::EnvironmentItem &lhs, const Utils::EnvironmentItem &rhs) { return QString::localeAwareCompare(lhs.name, rhs.name) < 0; }); return changes; @@ -464,7 +482,7 @@ void KitEnvironmentConfigWidget::editEnvironmentChanges() Utils::EnvironmentDialog::Polisher polisher = [expander](QWidget *w) { Core::VariableChooser::addSupportForChildWidgets(w, expander); }; - const QList + QList changes = Utils::EnvironmentDialog::getEnvironmentItems(&ok, m_summaryLabel, currentEnvironment(), @@ -473,6 +491,12 @@ void KitEnvironmentConfigWidget::editEnvironmentChanges() if (!ok) return; + if (Utils::HostOsInfo::isWindowsHost()) { + const Utils::EnvironmentItem forceMSVCEnglishItem("VSLANG", "1033"); + if (m_vslangCheckbox->isChecked() && changes.indexOf(forceMSVCEnglishItem) < 0) + changes.append(forceMSVCEnglishItem); + } + EnvironmentKitInformation::setEnvironmentChanges(m_kit, changes); } @@ -481,5 +505,21 @@ QWidget *KitEnvironmentConfigWidget::buttonWidget() const return m_manageButton; } +void KitEnvironmentConfigWidget::initMSVCOutputSwitch(QVBoxLayout *layout) +{ + m_vslangCheckbox = new QCheckBox(tr("Force English MSVC compiler output (VSLANG=1033)")); + layout->addWidget(m_vslangCheckbox); + connect(m_vslangCheckbox, &QCheckBox::toggled, this, [this](bool checked) { + QList changes + = EnvironmentKitInformation::environmentChanges(m_kit); + const Utils::EnvironmentItem forceMSVCEnglishItem("VSLANG", "1033"); + if (!checked && changes.indexOf(forceMSVCEnglishItem) >= 0) + changes.removeAll(forceMSVCEnglishItem); + if (checked && changes.indexOf(forceMSVCEnglishItem) < 0) + changes.append(forceMSVCEnglishItem); + EnvironmentKitInformation::setEnvironmentChanges(m_kit, changes); + }); +} + } // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.h b/src/plugins/projectexplorer/kitinformationconfigwidget.h index f7fddaa2121..5fb6016d8cb 100644 --- a/src/plugins/projectexplorer/kitinformationconfigwidget.h +++ b/src/plugins/projectexplorer/kitinformationconfigwidget.h @@ -33,10 +33,12 @@ #include QT_BEGIN_NAMESPACE +class QCheckBox; class QComboBox; class QLabel; class QPlainTextEdit; class QPushButton; +class QVBoxLayout; QT_END_NAMESPACE namespace Utils { class PathChooser; } @@ -182,8 +184,12 @@ private: void editEnvironmentChanges(); QList currentEnvironment() const; + void initMSVCOutputSwitch(QVBoxLayout *layout); + QLabel *m_summaryLabel; QPushButton *m_manageButton; + QCheckBox *m_vslangCheckbox; + QWidget *m_mainWidget; }; } // namespace Internal