forked from qt-creator/qt-creator
WebAssembly: Base Settings handling on Core::PagedSettings
Change-Id: If28afd8046367eb1b8b12e54d2dae4235dbc821f Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -4,16 +4,16 @@ add_qtc_plugin(WebAssembly
|
|||||||
SOURCES
|
SOURCES
|
||||||
webassembly.qrc
|
webassembly.qrc
|
||||||
webassembly_global.h
|
webassembly_global.h
|
||||||
webassemblytr.h
|
|
||||||
webassemblyconstants.h
|
webassemblyconstants.h
|
||||||
webassemblydevice.cpp webassemblydevice.h
|
webassemblydevice.cpp webassemblydevice.h
|
||||||
webassemblyemsdk.cpp webassemblyemsdk.h
|
webassemblyemsdk.cpp webassemblyemsdk.h
|
||||||
webassemblyoptionspage.cpp webassemblyoptionspage.h
|
|
||||||
webassemblyplugin.cpp webassemblyplugin.h
|
webassemblyplugin.cpp webassemblyplugin.h
|
||||||
webassemblyqtversion.cpp webassemblyqtversion.h
|
webassemblyqtversion.cpp webassemblyqtversion.h
|
||||||
webassemblyrunconfigurationaspects.cpp webassemblyrunconfigurationaspects.h
|
|
||||||
webassemblyrunconfiguration.cpp webassemblyrunconfiguration.h
|
webassemblyrunconfiguration.cpp webassemblyrunconfiguration.h
|
||||||
|
webassemblyrunconfigurationaspects.cpp webassemblyrunconfigurationaspects.h
|
||||||
|
webassemblysettings.cpp webassemblysettings.h
|
||||||
webassemblytoolchain.cpp webassemblytoolchain.h
|
webassemblytoolchain.cpp webassemblytoolchain.h
|
||||||
|
webassemblytr.h
|
||||||
)
|
)
|
||||||
|
|
||||||
extend_qtc_plugin(WebAssembly
|
extend_qtc_plugin(WebAssembly
|
||||||
|
@@ -13,24 +13,25 @@ QtcPlugin {
|
|||||||
|
|
||||||
files: [
|
files: [
|
||||||
"webassembly.qrc",
|
"webassembly.qrc",
|
||||||
"webassembly_global.h", "webassemblytr.h",
|
"webassembly_global.h",
|
||||||
"webassemblyconstants.h",
|
"webassemblyconstants.h",
|
||||||
"webassemblydevice.cpp",
|
"webassemblydevice.cpp",
|
||||||
"webassemblydevice.h",
|
"webassemblydevice.h",
|
||||||
"webassemblyemsdk.cpp",
|
"webassemblyemsdk.cpp",
|
||||||
"webassemblyemsdk.h",
|
"webassemblyemsdk.h",
|
||||||
"webassemblyoptionspage.cpp",
|
|
||||||
"webassemblyoptionspage.h",
|
|
||||||
"webassemblyplugin.cpp",
|
"webassemblyplugin.cpp",
|
||||||
"webassemblyplugin.h",
|
"webassemblyplugin.h",
|
||||||
"webassemblyqtversion.cpp",
|
"webassemblyqtversion.cpp",
|
||||||
"webassemblyqtversion.h",
|
"webassemblyqtversion.h",
|
||||||
"webassemblyrunconfigurationaspects.cpp",
|
|
||||||
"webassemblyrunconfigurationaspects.h",
|
|
||||||
"webassemblyrunconfiguration.cpp",
|
"webassemblyrunconfiguration.cpp",
|
||||||
"webassemblyrunconfiguration.h",
|
"webassemblyrunconfiguration.h",
|
||||||
|
"webassemblyrunconfigurationaspects.cpp",
|
||||||
|
"webassemblyrunconfigurationaspects.h",
|
||||||
|
"webassemblysettings.cpp",
|
||||||
|
"webassemblysettings.h",
|
||||||
"webassemblytoolchain.cpp",
|
"webassemblytoolchain.cpp",
|
||||||
"webassemblytoolchain.h",
|
"webassemblytoolchain.h",
|
||||||
|
"webassemblytr.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
QtcTestFiles {
|
QtcTestFiles {
|
||||||
|
@@ -14,8 +14,5 @@ const char WEBASSEMBLY_DEVICE_DEVICE_ID[] = "WebAssembly Device";
|
|||||||
const char WEBASSEMBLY_QT_VERSION[] = "Qt4ProjectManager.QtVersion.WebAssembly";
|
const char WEBASSEMBLY_QT_VERSION[] = "Qt4ProjectManager.QtVersion.WebAssembly";
|
||||||
const char WEBASSEMBLY_RUNCONFIGURATION_EMRUN[] = "WebAssembly.RunConfiguration.Emrun";
|
const char WEBASSEMBLY_RUNCONFIGURATION_EMRUN[] = "WebAssembly.RunConfiguration.Emrun";
|
||||||
|
|
||||||
const char SETTINGS_GROUP[] = "WebAssembly";
|
|
||||||
const char SETTINGS_KEY_EMSDK[] = "EmSdk";
|
|
||||||
|
|
||||||
} // namespace WebAssembly
|
} // namespace WebAssembly
|
||||||
} // namespace Constants
|
} // namespace Constants
|
||||||
|
@@ -11,7 +11,6 @@
|
|||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
|
|
||||||
#include <QCache>
|
#include <QCache>
|
||||||
#include <QSettings>
|
|
||||||
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
@@ -99,21 +98,6 @@ QVersionNumber version(const FilePath &sdkRoot)
|
|||||||
return *emSdkVersionCache()->object(cacheKey);
|
return *emSdkVersionCache()->object(cacheKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerEmSdk(const FilePath &sdkRoot)
|
|
||||||
{
|
|
||||||
QSettings *s = Core::ICore::settings();
|
|
||||||
s->setValue(QLatin1String(Constants::SETTINGS_GROUP) + '/'
|
|
||||||
+ QLatin1String(Constants::SETTINGS_KEY_EMSDK), sdkRoot.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
FilePath registeredEmSdk()
|
|
||||||
{
|
|
||||||
QSettings *s = Core::ICore::settings();
|
|
||||||
const QString path = s->value(QLatin1String(Constants::SETTINGS_GROUP) + '/'
|
|
||||||
+ QLatin1String(Constants::SETTINGS_KEY_EMSDK)).toString();
|
|
||||||
return FilePath::fromUserInput(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
void clearCaches()
|
void clearCaches()
|
||||||
{
|
{
|
||||||
emSdkEnvCache()->clear();
|
emSdkEnvCache()->clear();
|
||||||
|
@@ -16,8 +16,6 @@ bool isValid(const Utils::FilePath &sdkRoot);
|
|||||||
void parseEmSdkEnvOutputAndAddToEnv(const QString &output, Utils::Environment &env);
|
void parseEmSdkEnvOutputAndAddToEnv(const QString &output, Utils::Environment &env);
|
||||||
void addToEnvironment(const Utils::FilePath &sdkRoot, Utils::Environment &env);
|
void addToEnvironment(const Utils::FilePath &sdkRoot, Utils::Environment &env);
|
||||||
QVersionNumber version(const Utils::FilePath &sdkRoot);
|
QVersionNumber version(const Utils::FilePath &sdkRoot);
|
||||||
void registerEmSdk(const Utils::FilePath &sdkRoot);
|
|
||||||
Utils::FilePath registeredEmSdk();
|
|
||||||
void clearCaches();
|
void clearCaches();
|
||||||
|
|
||||||
} // WebAssembly::Internal::WebAssemblyEmSdk
|
} // WebAssembly::Internal::WebAssemblyEmSdk
|
||||||
|
@@ -1,175 +0,0 @@
|
|||||||
// Copyright (C) 2020 The Qt Company Ltd.
|
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
||||||
|
|
||||||
#include "webassemblyconstants.h"
|
|
||||||
#include "webassemblyemsdk.h"
|
|
||||||
#include "webassemblyoptionspage.h"
|
|
||||||
#include "webassemblyqtversion.h"
|
|
||||||
#include "webassemblytoolchain.h"
|
|
||||||
#include "webassemblytr.h"
|
|
||||||
|
|
||||||
#include <coreplugin/icore.h>
|
|
||||||
#include <utils/environment.h>
|
|
||||||
#include <utils/infolabel.h>
|
|
||||||
#include <utils/pathchooser.h>
|
|
||||||
#include <utils/utilsicons.h>
|
|
||||||
|
|
||||||
#include <QGroupBox>
|
|
||||||
#include <QTextBrowser>
|
|
||||||
#include <QVBoxLayout>
|
|
||||||
|
|
||||||
using namespace Utils;
|
|
||||||
|
|
||||||
namespace WebAssembly {
|
|
||||||
namespace Internal {
|
|
||||||
|
|
||||||
class WebAssemblyOptionsWidget : public Core::IOptionsPageWidget
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
WebAssemblyOptionsWidget();
|
|
||||||
|
|
||||||
void updateStatus();
|
|
||||||
|
|
||||||
private:
|
|
||||||
void apply() final;
|
|
||||||
void showEvent(QShowEvent *event) final;
|
|
||||||
|
|
||||||
PathChooser *m_emSdkPathChooser;
|
|
||||||
InfoLabel *m_emSdkVersionDisplay;
|
|
||||||
QGroupBox *m_emSdkEnvGroupBox;
|
|
||||||
QTextBrowser *m_emSdkEnvDisplay;
|
|
||||||
InfoLabel *m_qtVersionDisplay;
|
|
||||||
};
|
|
||||||
|
|
||||||
WebAssemblyOptionsWidget::WebAssemblyOptionsWidget()
|
|
||||||
{
|
|
||||||
auto mainLayout = new QVBoxLayout(this);
|
|
||||||
|
|
||||||
{
|
|
||||||
auto pathChooserBox = new QGroupBox(Tr::tr("Emscripten SDK path:"));
|
|
||||||
pathChooserBox->setFlat(true);
|
|
||||||
auto layout = new QVBoxLayout(pathChooserBox);
|
|
||||||
auto instruction = new QLabel(
|
|
||||||
Tr::tr("Select the root directory of an installed %1. "
|
|
||||||
"Ensure that the activated SDK version is compatible with the %2 "
|
|
||||||
"or %3 version that you plan to develop against.")
|
|
||||||
.arg(R"(<a href="https://emscripten.org/docs/getting_started/downloads.html">Emscripten SDK</a>)")
|
|
||||||
.arg(R"(<a href="https://doc.qt.io/qt-5/wasm.html#install-emscripten">Qt 5</a>)")
|
|
||||||
.arg(R"(<a href="https://doc.qt.io/qt-6/wasm.html#install-emscripten">Qt 6</a>)"));
|
|
||||||
|
|
||||||
instruction->setOpenExternalLinks(true);
|
|
||||||
instruction->setWordWrap(true);
|
|
||||||
layout->addWidget(instruction);
|
|
||||||
m_emSdkPathChooser = new PathChooser(this);
|
|
||||||
m_emSdkPathChooser->setExpectedKind(PathChooser::Directory);
|
|
||||||
m_emSdkPathChooser->setInitialBrowsePathBackup(FileUtils::homePath());
|
|
||||||
m_emSdkPathChooser->setFilePath(WebAssemblyEmSdk::registeredEmSdk());
|
|
||||||
connect(m_emSdkPathChooser, &PathChooser::textChanged,
|
|
||||||
this, &WebAssemblyOptionsWidget::updateStatus);
|
|
||||||
layout->addWidget(m_emSdkPathChooser);
|
|
||||||
m_emSdkVersionDisplay = new InfoLabel(this);
|
|
||||||
m_emSdkVersionDisplay->setElideMode(Qt::ElideNone);
|
|
||||||
m_emSdkVersionDisplay->setWordWrap(true);
|
|
||||||
layout->addWidget(m_emSdkVersionDisplay);
|
|
||||||
mainLayout->addWidget(pathChooserBox);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
m_emSdkEnvGroupBox = new QGroupBox(Tr::tr("Emscripten SDK environment:"));
|
|
||||||
m_emSdkEnvGroupBox->setFlat(true);
|
|
||||||
m_emSdkEnvGroupBox->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::MinimumExpanding);
|
|
||||||
auto layout = new QVBoxLayout(m_emSdkEnvGroupBox);
|
|
||||||
m_emSdkEnvDisplay = new QTextBrowser;
|
|
||||||
m_emSdkEnvDisplay->setLineWrapMode(QTextBrowser::NoWrap);
|
|
||||||
m_emSdkEnvDisplay->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
|
|
||||||
layout->addWidget(m_emSdkEnvDisplay);
|
|
||||||
mainLayout->addWidget(m_emSdkEnvGroupBox, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
mainLayout->addStretch();
|
|
||||||
|
|
||||||
{
|
|
||||||
const QString minimumSupportedQtVersion =
|
|
||||||
WebAssemblyQtVersion::minimumSupportedQtVersion().toString();
|
|
||||||
m_qtVersionDisplay = new InfoLabel(
|
|
||||||
Tr::tr("Note: %1 supports Qt %2 for WebAssembly and higher. "
|
|
||||||
"Your installed lower Qt version(s) are not supported.")
|
|
||||||
.arg(Core::ICore::versionString(), minimumSupportedQtVersion),
|
|
||||||
InfoLabel::Warning);
|
|
||||||
m_qtVersionDisplay->setElideMode(Qt::ElideNone);
|
|
||||||
m_qtVersionDisplay->setWordWrap(true);
|
|
||||||
mainLayout->addWidget(m_qtVersionDisplay);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static QString environmentDisplay(const FilePath &sdkRoot)
|
|
||||||
{
|
|
||||||
Environment env;
|
|
||||||
WebAssemblyEmSdk::addToEnvironment(sdkRoot, env);
|
|
||||||
QString result;
|
|
||||||
auto h4 = [](const QString &text) { return QString("<h4>" + text + "</h4>"); };
|
|
||||||
result.append(h4(Tr::tr("Adding directories to PATH:")));
|
|
||||||
result.append(env.value("PATH").replace(OsSpecificAspects::pathListSeparator(sdkRoot.osType()), "<br/>"));
|
|
||||||
result.append(h4(Tr::tr("Setting environment variables:")));
|
|
||||||
for (const QString &envVar : env.toStringList()) {
|
|
||||||
if (!envVar.startsWith("PATH")) // Path was already printed out above
|
|
||||||
result.append(envVar + "<br/>");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebAssemblyOptionsWidget::updateStatus()
|
|
||||||
{
|
|
||||||
WebAssemblyEmSdk::clearCaches();
|
|
||||||
|
|
||||||
const FilePath sdkPath = m_emSdkPathChooser->filePath();
|
|
||||||
const bool sdkValid = sdkPath.exists() && WebAssemblyEmSdk::isValid(sdkPath);
|
|
||||||
|
|
||||||
m_emSdkVersionDisplay->setVisible(sdkValid);
|
|
||||||
m_emSdkEnvGroupBox->setVisible(sdkValid);
|
|
||||||
|
|
||||||
if (sdkValid) {
|
|
||||||
const QVersionNumber sdkVersion = WebAssemblyEmSdk::version(sdkPath);
|
|
||||||
const QVersionNumber minVersion = WebAssemblyToolChain::minimumSupportedEmSdkVersion();
|
|
||||||
const bool versionTooLow = sdkVersion < minVersion;
|
|
||||||
m_emSdkVersionDisplay->setType(versionTooLow ? InfoLabel::NotOk : InfoLabel::Ok);
|
|
||||||
auto bold = [](const QString &text) { return QString("<b>" + text + "</b>"); };
|
|
||||||
m_emSdkVersionDisplay->setText(
|
|
||||||
versionTooLow ? Tr::tr("The activated version %1 is not supported by %2. "
|
|
||||||
"Activate version %3 or higher.")
|
|
||||||
.arg(bold(sdkVersion.toString()))
|
|
||||||
.arg(bold(Core::ICore::versionString()))
|
|
||||||
.arg(bold(minVersion.toString()))
|
|
||||||
: Tr::tr("Activated version: %1")
|
|
||||||
.arg(bold(sdkVersion.toString())));
|
|
||||||
m_emSdkEnvDisplay->setText(environmentDisplay(sdkPath));
|
|
||||||
}
|
|
||||||
|
|
||||||
m_qtVersionDisplay->setVisible(WebAssemblyQtVersion::isUnsupportedQtVersionInstalled());
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebAssemblyOptionsWidget::showEvent(QShowEvent *event)
|
|
||||||
{
|
|
||||||
Q_UNUSED(event)
|
|
||||||
updateStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebAssemblyOptionsWidget::apply()
|
|
||||||
{
|
|
||||||
const FilePath sdkPath = m_emSdkPathChooser->filePath();
|
|
||||||
if (!WebAssemblyEmSdk::isValid(sdkPath))
|
|
||||||
return;
|
|
||||||
WebAssemblyEmSdk::registerEmSdk(sdkPath);
|
|
||||||
WebAssemblyToolChain::registerToolChains();
|
|
||||||
}
|
|
||||||
|
|
||||||
WebAssemblyOptionsPage::WebAssemblyOptionsPage()
|
|
||||||
{
|
|
||||||
setId(Id(Constants::SETTINGS_ID));
|
|
||||||
setDisplayName(Tr::tr("WebAssembly"));
|
|
||||||
setCategory(ProjectExplorer::Constants::DEVICE_SETTINGS_CATEGORY);
|
|
||||||
setWidgetCreator([] { return new WebAssemblyOptionsWidget; });
|
|
||||||
}
|
|
||||||
|
|
||||||
} // Internal
|
|
||||||
} // WebAssembly
|
|
@@ -1,18 +0,0 @@
|
|||||||
// Copyright (C) 2020 The Qt Company Ltd.
|
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <coreplugin/dialogs/ioptionspage.h>
|
|
||||||
|
|
||||||
namespace WebAssembly {
|
|
||||||
namespace Internal {
|
|
||||||
|
|
||||||
class WebAssemblyOptionsPage final : public Core::IOptionsPage
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
WebAssemblyOptionsPage();
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace Internal
|
|
||||||
} // namespace WebAssmbly
|
|
@@ -8,9 +8,9 @@
|
|||||||
#endif // WITH_TESTS
|
#endif // WITH_TESTS
|
||||||
#include "webassemblyconstants.h"
|
#include "webassemblyconstants.h"
|
||||||
#include "webassemblydevice.h"
|
#include "webassemblydevice.h"
|
||||||
#include "webassemblyoptionspage.h"
|
|
||||||
#include "webassemblyqtversion.h"
|
#include "webassemblyqtversion.h"
|
||||||
#include "webassemblyrunconfiguration.h"
|
#include "webassemblyrunconfiguration.h"
|
||||||
|
#include "webassemblysettings.h"
|
||||||
#include "webassemblytoolchain.h"
|
#include "webassemblytoolchain.h"
|
||||||
#include "webassemblytr.h"
|
#include "webassemblytr.h"
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
WebAssemblyQtVersionFactory qtVersionFactory;
|
WebAssemblyQtVersionFactory qtVersionFactory;
|
||||||
EmrunRunConfigurationFactory emrunRunConfigurationFactory;
|
EmrunRunConfigurationFactory emrunRunConfigurationFactory;
|
||||||
EmrunRunWorkerFactory emrunRunWorkerFactory;
|
EmrunRunWorkerFactory emrunRunWorkerFactory;
|
||||||
WebAssemblyOptionsPage optionsPage;
|
WebAssemblySettings settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
static WebAssemblyPluginPrivate *dd = nullptr;
|
static WebAssemblyPluginPrivate *dd = nullptr;
|
||||||
|
164
src/plugins/webassembly/webassemblysettings.cpp
Normal file
164
src/plugins/webassembly/webassemblysettings.cpp
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
// Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
|
#include "webassemblysettings.h"
|
||||||
|
|
||||||
|
#include "webassemblyconstants.h"
|
||||||
|
#include "webassemblyemsdk.h"
|
||||||
|
#include "webassemblyqtversion.h"
|
||||||
|
#include "webassemblytoolchain.h"
|
||||||
|
#include "webassemblytr.h"
|
||||||
|
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
|
|
||||||
|
#include <utils/aspects.h>
|
||||||
|
#include <utils/environment.h>
|
||||||
|
#include <utils/infolabel.h>
|
||||||
|
#include <utils/layoutbuilder.h>
|
||||||
|
#include <utils/pathchooser.h>
|
||||||
|
#include <utils/utilsicons.h>
|
||||||
|
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QTextBrowser>
|
||||||
|
|
||||||
|
using namespace Utils;
|
||||||
|
|
||||||
|
namespace WebAssembly {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
static WebAssemblySettings *theSettings = nullptr;
|
||||||
|
|
||||||
|
WebAssemblySettings *WebAssemblySettings::instance()
|
||||||
|
{
|
||||||
|
return theSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QString environmentDisplay(const FilePath &sdkRoot)
|
||||||
|
{
|
||||||
|
Environment env;
|
||||||
|
WebAssemblyEmSdk::addToEnvironment(sdkRoot, env);
|
||||||
|
QString result;
|
||||||
|
auto h4 = [](const QString &text) { return QString("<h4>" + text + "</h4>"); };
|
||||||
|
result.append(h4(Tr::tr("Adding directories to PATH:")));
|
||||||
|
result.append(env.value("PATH").replace(OsSpecificAspects::pathListSeparator(sdkRoot.osType()), "<br/>"));
|
||||||
|
result.append(h4(Tr::tr("Setting environment variables:")));
|
||||||
|
for (const QString &envVar : env.toStringList()) {
|
||||||
|
if (!envVar.startsWith("PATH")) // Path was already printed out above
|
||||||
|
result.append(envVar + "<br/>");
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
WebAssemblySettings::WebAssemblySettings()
|
||||||
|
{
|
||||||
|
theSettings = this;
|
||||||
|
|
||||||
|
setSettingsGroup("WebAssembly");
|
||||||
|
|
||||||
|
setId(Id(Constants::SETTINGS_ID));
|
||||||
|
setDisplayName(Tr::tr("WebAssembly"));
|
||||||
|
setCategory(ProjectExplorer::Constants::DEVICE_SETTINGS_CATEGORY);
|
||||||
|
|
||||||
|
registerAspect(&emSdk);
|
||||||
|
emSdk.setSettingsKey("EmSdk");
|
||||||
|
emSdk.setExpectedKind(Utils::PathChooser::ExistingDirectory);
|
||||||
|
emSdk.setDefaultFilePath(FileUtils::homePath());
|
||||||
|
|
||||||
|
setLayouter([this](QWidget *widget) {
|
||||||
|
auto instruction = new QLabel(
|
||||||
|
Tr::tr("Select the root directory of an installed %1. "
|
||||||
|
"Ensure that the activated SDK version is compatible with the %2 "
|
||||||
|
"or %3 version that you plan to develop against.")
|
||||||
|
.arg(R"(<a href="https://emscripten.org/docs/getting_started/downloads.html">Emscripten SDK</a>)")
|
||||||
|
.arg(R"(<a href="https://doc.qt.io/qt-5/wasm.html#install-emscripten">Qt 5</a>)")
|
||||||
|
.arg(R"(<a href="https://doc.qt.io/qt-6/wasm.html#install-emscripten">Qt 6</a>)"));
|
||||||
|
instruction->setOpenExternalLinks(true);
|
||||||
|
instruction->setWordWrap(true);
|
||||||
|
|
||||||
|
m_emSdkVersionDisplay = new InfoLabel;
|
||||||
|
m_emSdkVersionDisplay->setElideMode(Qt::ElideNone);
|
||||||
|
m_emSdkVersionDisplay->setWordWrap(true);
|
||||||
|
|
||||||
|
m_emSdkEnvDisplay = new QTextBrowser;
|
||||||
|
m_emSdkEnvDisplay->setLineWrapMode(QTextBrowser::NoWrap);
|
||||||
|
|
||||||
|
const QString minimumSupportedQtVersion =
|
||||||
|
WebAssemblyQtVersion::minimumSupportedQtVersion().toString();
|
||||||
|
m_qtVersionDisplay = new InfoLabel(
|
||||||
|
Tr::tr("Note: %1 supports Qt %2 for WebAssembly and higher. "
|
||||||
|
"Your installed lower Qt version(s) are not supported.")
|
||||||
|
.arg(Core::ICore::versionString(), minimumSupportedQtVersion),
|
||||||
|
InfoLabel::Warning);
|
||||||
|
m_qtVersionDisplay->setElideMode(Qt::ElideNone);
|
||||||
|
m_qtVersionDisplay->setWordWrap(true);
|
||||||
|
|
||||||
|
// _clang-format off
|
||||||
|
using namespace Layouting;
|
||||||
|
Column {
|
||||||
|
Group {
|
||||||
|
title(Tr::tr("Emscripten SDK path:")),
|
||||||
|
Column {
|
||||||
|
instruction,
|
||||||
|
emSdk,
|
||||||
|
m_emSdkVersionDisplay,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Group {
|
||||||
|
title(Tr::tr("Emscripten SDK environment:")),
|
||||||
|
bindTo(&m_emSdkEnvGroupBox),
|
||||||
|
Column {
|
||||||
|
m_emSdkEnvDisplay,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
m_qtVersionDisplay,
|
||||||
|
}.attachTo(widget);
|
||||||
|
// _clang-format on
|
||||||
|
|
||||||
|
updateStatus();
|
||||||
|
connect(emSdk.pathChooser(), &Utils::PathChooser::textChanged,
|
||||||
|
this, &WebAssemblySettings::updateStatus);
|
||||||
|
});
|
||||||
|
|
||||||
|
readSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebAssemblySettings::apply()
|
||||||
|
{
|
||||||
|
WebAssemblyToolChain::registerToolChains();
|
||||||
|
Core::IOptionsPage::apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebAssemblySettings::updateStatus()
|
||||||
|
{
|
||||||
|
WebAssemblyEmSdk::clearCaches();
|
||||||
|
|
||||||
|
const Utils::FilePath newEmSdk = emSdk.pathChooser()->filePath();
|
||||||
|
const bool sdkValid = newEmSdk.exists() && WebAssemblyEmSdk::isValid(newEmSdk);
|
||||||
|
|
||||||
|
m_emSdkVersionDisplay->setVisible(sdkValid);
|
||||||
|
m_emSdkEnvGroupBox->setEnabled(sdkValid);
|
||||||
|
|
||||||
|
if (sdkValid) {
|
||||||
|
const QVersionNumber sdkVersion = WebAssemblyEmSdk::version(newEmSdk);
|
||||||
|
const QVersionNumber minVersion = WebAssemblyToolChain::minimumSupportedEmSdkVersion();
|
||||||
|
const bool versionTooLow = sdkVersion < minVersion;
|
||||||
|
m_emSdkVersionDisplay->setType(versionTooLow ? InfoLabel::NotOk : InfoLabel::Ok);
|
||||||
|
auto bold = [](const QString &text) { return QString("<b>" + text + "</b>"); };
|
||||||
|
m_emSdkVersionDisplay->setText(
|
||||||
|
versionTooLow ? Tr::tr("The activated version %1 is not supported by %2. "
|
||||||
|
"Activate version %3 or higher.")
|
||||||
|
.arg(bold(sdkVersion.toString()))
|
||||||
|
.arg(bold(Core::ICore::versionString()))
|
||||||
|
.arg(bold(minVersion.toString()))
|
||||||
|
: Tr::tr("Activated version: %1")
|
||||||
|
.arg(bold(sdkVersion.toString())));
|
||||||
|
m_emSdkEnvDisplay->setText(environmentDisplay(newEmSdk));
|
||||||
|
} else {
|
||||||
|
m_emSdkEnvDisplay->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_qtVersionDisplay->setVisible(WebAssemblyQtVersion::isUnsupportedQtVersionInstalled());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // Internal
|
||||||
|
} // WebAssembly
|
35
src/plugins/webassembly/webassemblysettings.h
Normal file
35
src/plugins/webassembly/webassemblysettings.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <coreplugin/dialogs/ioptionspage.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QTextBrowser;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
namespace WebAssembly {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class WebAssemblySettings final : public Core::PagedSettings
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WebAssemblySettings();
|
||||||
|
|
||||||
|
static WebAssemblySettings *instance();
|
||||||
|
void apply() final;
|
||||||
|
|
||||||
|
Utils::FilePathAspect emSdk;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QWidget *m_emSdkEnvGroupBox = nullptr;
|
||||||
|
Utils::InfoLabel *m_emSdkVersionDisplay = nullptr;
|
||||||
|
QTextBrowser *m_emSdkEnvDisplay = nullptr;
|
||||||
|
Utils::InfoLabel *m_qtVersionDisplay = nullptr;
|
||||||
|
|
||||||
|
void updateStatus();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
|
} // namespace WebAssmbly
|
@@ -1,9 +1,11 @@
|
|||||||
// Copyright (C) 2020 The Qt Company Ltd.
|
// Copyright (C) 2020 The Qt Company Ltd.
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
|
#include "webassemblytoolchain.h"
|
||||||
|
|
||||||
#include "webassemblyconstants.h"
|
#include "webassemblyconstants.h"
|
||||||
#include "webassemblyemsdk.h"
|
#include "webassemblyemsdk.h"
|
||||||
#include "webassemblytoolchain.h"
|
#include "webassemblysettings.h"
|
||||||
#include "webassemblytr.h"
|
#include "webassemblytr.h"
|
||||||
|
|
||||||
#include <projectexplorer/devicesupport/devicemanager.h>
|
#include <projectexplorer/devicesupport/devicemanager.h>
|
||||||
@@ -49,7 +51,8 @@ static void addRegisteredMinGWToEnvironment(Environment &env)
|
|||||||
|
|
||||||
void WebAssemblyToolChain::addToEnvironment(Environment &env) const
|
void WebAssemblyToolChain::addToEnvironment(Environment &env) const
|
||||||
{
|
{
|
||||||
WebAssemblyEmSdk::addToEnvironment(WebAssemblyEmSdk::registeredEmSdk(), env);
|
const FilePath emSdk = WebAssemblySettings::instance()->emSdk();
|
||||||
|
WebAssemblyEmSdk::addToEnvironment(emSdk, env);
|
||||||
if (env.osType() == OsTypeWindows)
|
if (env.osType() == OsTypeWindows)
|
||||||
addRegisteredMinGWToEnvironment(env);
|
addRegisteredMinGWToEnvironment(env);
|
||||||
}
|
}
|
||||||
@@ -92,7 +95,7 @@ const QVersionNumber &WebAssemblyToolChain::minimumSupportedEmSdkVersion()
|
|||||||
|
|
||||||
static Toolchains doAutoDetect(const ToolchainDetector &detector)
|
static Toolchains doAutoDetect(const ToolchainDetector &detector)
|
||||||
{
|
{
|
||||||
const FilePath sdk = WebAssemblyEmSdk::registeredEmSdk();
|
const FilePath sdk = WebAssemblySettings::instance()->emSdk();
|
||||||
if (!WebAssemblyEmSdk::isValid(sdk))
|
if (!WebAssemblyEmSdk::isValid(sdk))
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user