diff --git a/src/plugins/webassembly/webassemblyconstants.h b/src/plugins/webassembly/webassemblyconstants.h index 56315b0b404..897508ef51f 100644 --- a/src/plugins/webassembly/webassemblyconstants.h +++ b/src/plugins/webassembly/webassemblyconstants.h @@ -14,5 +14,7 @@ const char WEBASSEMBLY_DEVICE_DEVICE_ID[] = "WebAssembly Device"; const char WEBASSEMBLY_QT_VERSION[] = "Qt4ProjectManager.QtVersion.WebAssembly"; const char WEBASSEMBLY_RUNCONFIGURATION_EMRUN[] = "WebAssembly.RunConfiguration.Emrun"; +const char WEBASSEMBLY_EMSDK_CONFIG_FILE[] = ".emscripten"; + } // namespace WebAssembly } // namespace Constants diff --git a/src/plugins/webassembly/webassemblyemsdk.cpp b/src/plugins/webassembly/webassemblyemsdk.cpp index 6541200eaa7..f2fa4fe72b4 100644 --- a/src/plugins/webassembly/webassemblyemsdk.cpp +++ b/src/plugins/webassembly/webassemblyemsdk.cpp @@ -3,6 +3,8 @@ #include "webassemblyemsdk.h" +#include "webassemblyconstants.h" + #include #include @@ -26,7 +28,7 @@ const char emSdkVersionKey[] = "WebAssembly/emSdkVersion1"; const FilePath timeStampFile(const FilePath &sdkRoot) { - return sdkRoot / ".emscripten"; + return sdkRoot / Constants::WEBASSEMBLY_EMSDK_CONFIG_FILE; } static QString emSdkEnvOutput(const FilePath &sdkRoot) diff --git a/src/plugins/webassembly/webassemblysettings.cpp b/src/plugins/webassembly/webassemblysettings.cpp index b33d41ba570..3e522d9d65d 100644 --- a/src/plugins/webassembly/webassemblysettings.cpp +++ b/src/plugins/webassembly/webassemblysettings.cpp @@ -73,6 +73,13 @@ WebAssemblySettings::WebAssemblySettings() instruction->setOpenExternalLinks(true); instruction->setWordWrap(true); + m_statusIsEmsdkDir = new InfoLabel(Tr::tr("The chosen directory is an emsdk location.")); + m_statusSdkInstalled = new InfoLabel(Tr::tr("An SDK is installed.")); + m_statusSdkActivated = new InfoLabel(Tr::tr("An SDK is activated.")); + m_statusSdkValid = new InfoLabel(Tr::tr("The activated SDK is usable by %1.") + .arg(QGuiApplication::applicationDisplayName()), + InfoLabel::NotOk); + m_emSdkVersionDisplay = new InfoLabel; m_emSdkVersionDisplay->setElideMode(Qt::ElideNone); m_emSdkVersionDisplay->setWordWrap(true); @@ -98,6 +105,10 @@ WebAssemblySettings::WebAssemblySettings() Column { instruction, emSdk, + m_statusIsEmsdkDir, + m_statusSdkInstalled, + m_statusSdkActivated, + m_statusSdkValid, m_emSdkVersionDisplay, }, }, @@ -122,6 +133,27 @@ WebAssemblySettings::WebAssemblySettings() readSettings(); } +enum EmsdkError { + EmsdkErrorUnknown, + EmsdkErrorNoDir, + EmsdkErrorNoEmsdkDir, + EmsdkErrorNoSdkInstalled, + EmsdkErrorNoSdkActivated, +}; + +static EmsdkError emsdkError(const Utils::FilePath &sdkRoot) +{ + if (!sdkRoot.exists()) + return EmsdkErrorNoDir; + if (!(sdkRoot / "emsdk").refersToExecutableFile(FilePath::WithBatSuffix)) + return EmsdkErrorNoEmsdkDir; + if (!(sdkRoot / "upstream/.emsdk_version").isReadableFile()) + return EmsdkErrorNoSdkInstalled; + if (!(sdkRoot / Constants::WEBASSEMBLY_EMSDK_CONFIG_FILE).isReadableFile()) + return EmsdkErrorNoSdkActivated; + return EmsdkErrorUnknown; +} + void WebAssemblySettings::updateStatus() { WebAssemblyEmSdk::clearCaches(); @@ -129,6 +161,10 @@ void WebAssemblySettings::updateStatus() const Utils::FilePath newEmSdk = emSdk.pathChooser()->filePath(); const bool sdkValid = newEmSdk.exists() && WebAssemblyEmSdk::isValid(newEmSdk); + m_statusIsEmsdkDir->setVisible(!sdkValid); + m_statusSdkInstalled->setVisible(!sdkValid); + m_statusSdkActivated->setVisible(!sdkValid); + m_statusSdkValid->setVisible(!sdkValid); m_emSdkVersionDisplay->setVisible(sdkValid); m_emSdkEnvDisplay->setEnabled(sdkValid); @@ -148,6 +184,13 @@ void WebAssemblySettings::updateStatus() .arg(bold(sdkVersion.toString()))); m_emSdkEnvDisplay->setText(environmentDisplay(newEmSdk)); } else { + const EmsdkError error = emsdkError(newEmSdk); + const bool isEmsdkDir = error != EmsdkErrorNoDir && error != EmsdkErrorNoEmsdkDir; + m_statusIsEmsdkDir->setType(isEmsdkDir ? InfoLabel::Ok : InfoLabel::NotOk); + const bool sdkInstalled = isEmsdkDir && error != EmsdkErrorNoSdkInstalled; + m_statusSdkInstalled->setType(sdkInstalled ? InfoLabel::Ok : InfoLabel::NotOk); + const bool sdkActivated = sdkInstalled && error != EmsdkErrorNoSdkActivated; + m_statusSdkActivated->setType(sdkActivated ? InfoLabel::Ok : InfoLabel::NotOk); m_emSdkEnvDisplay->clear(); } diff --git a/src/plugins/webassembly/webassemblysettings.h b/src/plugins/webassembly/webassemblysettings.h index c7169b6c821..de322b4874a 100644 --- a/src/plugins/webassembly/webassemblysettings.h +++ b/src/plugins/webassembly/webassemblysettings.h @@ -21,6 +21,10 @@ public: Utils::FilePathAspect emSdk{this}; private: + Utils::InfoLabel *m_statusIsEmsdkDir = nullptr; + Utils::InfoLabel *m_statusSdkInstalled = nullptr; + Utils::InfoLabel *m_statusSdkActivated = nullptr; + Utils::InfoLabel *m_statusSdkValid = nullptr; Utils::InfoLabel *m_emSdkVersionDisplay = nullptr; QTextBrowser *m_emSdkEnvDisplay = nullptr; Utils::InfoLabel *m_qtVersionDisplay = nullptr;