WebAssembly: Use the most recent settings access pattern

Includes delaying construction until its first actual use.

Change-Id: Ide0f7a12250c2597f45993d6ef0fb604c974a763
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2023-07-13 18:50:58 +02:00
parent 7a4fa635cf
commit 9567f82b75
4 changed files with 33 additions and 26 deletions

View File

@@ -39,7 +39,6 @@ public:
WebAssemblyQtVersionFactory qtVersionFactory; WebAssemblyQtVersionFactory qtVersionFactory;
EmrunRunConfigurationFactory emrunRunConfigurationFactory; EmrunRunConfigurationFactory emrunRunConfigurationFactory;
EmrunRunWorkerFactory emrunRunWorkerFactory; EmrunRunWorkerFactory emrunRunWorkerFactory;
WebAssemblySettings settings;
}; };
static WebAssemblyPluginPrivate *dd = nullptr; static WebAssemblyPluginPrivate *dd = nullptr;

View File

@@ -10,6 +10,7 @@
#include "webassemblytr.h" #include "webassemblytr.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/dialogs/ioptionspage.h>
#include <utils/aspects.h> #include <utils/aspects.h>
#include <utils/environment.h> #include <utils/environment.h>
@@ -24,13 +25,11 @@
using namespace Utils; using namespace Utils;
namespace WebAssembly { namespace WebAssembly::Internal {
namespace Internal {
static WebAssemblySettings *theSettings = nullptr; WebAssemblySettings &settings()
WebAssemblySettings *WebAssemblySettings::instance()
{ {
static WebAssemblySettings theSettings;
return theSettings; return theSettings;
} }
@@ -52,15 +51,9 @@ static QString environmentDisplay(const FilePath &sdkRoot)
WebAssemblySettings::WebAssemblySettings() WebAssemblySettings::WebAssemblySettings()
{ {
theSettings = this;
setSettingsGroup("WebAssembly"); setSettingsGroup("WebAssembly");
setAutoApply(false);
setId(Id(Constants::SETTINGS_ID));
setDisplayName(Tr::tr("WebAssembly"));
setCategory(ProjectExplorer::Constants::DEVICE_SETTINGS_CATEGORY);
registerAspect(&emSdk);
emSdk.setSettingsKey("EmSdk"); emSdk.setSettingsKey("EmSdk");
emSdk.setExpectedKind(Utils::PathChooser::ExistingDirectory); emSdk.setExpectedKind(Utils::PathChooser::ExistingDirectory);
emSdk.setDefaultValue(FileUtils::homePath()); emSdk.setDefaultValue(FileUtils::homePath());
@@ -164,5 +157,20 @@ void WebAssemblySettings::updateStatus()
m_qtVersionDisplay->setVisible(WebAssemblyQtVersion::isUnsupportedQtVersionInstalled()); m_qtVersionDisplay->setVisible(WebAssemblyQtVersion::isUnsupportedQtVersionInstalled());
} }
} // Internal // WebAssemblySettingsPage
} // WebAssembly
class WebAssemblySettingsPage final : public Core::IOptionsPage
{
public:
WebAssemblySettingsPage()
{
setId(Id(Constants::SETTINGS_ID));
setDisplayName(Tr::tr("WebAssembly"));
setCategory(ProjectExplorer::Constants::DEVICE_SETTINGS_CATEGORY);
setSettingsProvider([] { return &settings(); });
}
};
const WebAssemblySettingsPage settingsPage;
} // WebAssembly::Internal

View File

@@ -3,23 +3,22 @@
#pragma once #pragma once
#include <coreplugin/dialogs/ioptionspage.h> #include <utils/aspects.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QTextBrowser; class QTextBrowser;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace WebAssembly { namespace Utils { class InfoLabel; }
namespace Internal {
class WebAssemblySettings final : public Core::PagedSettings namespace WebAssembly::Internal {
class WebAssemblySettings final : public Utils::AspectContainer
{ {
public: public:
WebAssemblySettings(); WebAssemblySettings();
static WebAssemblySettings *instance(); Utils::FilePathAspect emSdk{this};
Utils::FilePathAspect emSdk;
private: private:
QWidget *m_emSdkEnvGroupBox = nullptr; QWidget *m_emSdkEnvGroupBox = nullptr;
@@ -30,5 +29,6 @@ private:
void updateStatus(); void updateStatus();
}; };
} // namespace Internal WebAssemblySettings &settings();
} // namespace WebAssmbly
} // WebAssmbly::Internal

View File

@@ -51,7 +51,7 @@ static void addRegisteredMinGWToEnvironment(Environment &env)
void WebAssemblyToolChain::addToEnvironment(Environment &env) const void WebAssemblyToolChain::addToEnvironment(Environment &env) const
{ {
const FilePath emSdk = WebAssemblySettings::instance()->emSdk(); const FilePath emSdk = settings().emSdk();
WebAssemblyEmSdk::addToEnvironment(emSdk, env); WebAssemblyEmSdk::addToEnvironment(emSdk, env);
if (env.osType() == OsTypeWindows) if (env.osType() == OsTypeWindows)
addRegisteredMinGWToEnvironment(env); addRegisteredMinGWToEnvironment(env);
@@ -95,7 +95,7 @@ const QVersionNumber &WebAssemblyToolChain::minimumSupportedEmSdkVersion()
static Toolchains doAutoDetect(const ToolchainDetector &detector) static Toolchains doAutoDetect(const ToolchainDetector &detector)
{ {
const FilePath sdk = WebAssemblySettings::instance()->emSdk(); const FilePath sdk = settings().emSdk();
if (!WebAssemblyEmSdk::isValid(sdk)) if (!WebAssemblyEmSdk::isValid(sdk))
return {}; return {};