Added a Warning When VS2019 is not Installed with Link to Download it (#2042)

* Added a warning when VS2019 is not installed with link to download it

Signed-off-by: nggieber <nggieber@amazon.com>

* Widden VSWarning dialog

Signed-off-by: nggieber <nggieber@amazon.com>

* Fix issue with checking for Visual Studio

Signed-off-by: nggieber <nggieber@amazon.com>

* PALify compiler detection

Signed-off-by: nggieber <nggieber@amazon.com>

* Changed windows compiler check to waitForFinished instead of waitForReadyRead

Signed-off-by: nggieber <nggieber@amazon.com>
This commit is contained in:
AMZN-nggieber
2021-07-12 11:54:36 -07:00
committed by GitHub
parent f83439e6c4
commit 2fad7f37db
10 changed files with 152 additions and 57 deletions
@@ -17,6 +17,8 @@
#include <QProcessEnvironment>
#include <QGuiApplication>
#include <QProgressDialog>
#include <QSpacerItem>
#include <QGridLayout>
namespace O3DE::ProjectManager
{
@@ -374,46 +376,27 @@ namespace O3DE::ProjectManager
return true;
}
static bool IsVS2019Installed_internal()
bool FindSupportedCompiler(QWidget* parent)
{
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
QString programFilesPath = environment.value("ProgramFiles(x86)");
QString vsWherePath = programFilesPath + "\\Microsoft Visual Studio\\Installer\\vswhere.exe";
auto findCompilerResult = FindSupportedCompilerForPlatform();
QFileInfo vsWhereFile(vsWherePath);
if (vsWhereFile.exists() && vsWhereFile.isFile())
if (!findCompilerResult.IsSuccess())
{
QProcess vsWhereProcess;
vsWhereProcess.setProcessChannelMode(QProcess::MergedChannels);
QMessageBox vsWarningMessage(parent);
vsWarningMessage.setIcon(QMessageBox::Warning);
vsWarningMessage.setWindowTitle(QObject::tr("Create Project"));
// Makes link clickable
vsWarningMessage.setTextFormat(Qt::RichText);
vsWarningMessage.setText(findCompilerResult.GetError());
vsWarningMessage.setStandardButtons(QMessageBox::Close);
vsWhereProcess.start(
vsWherePath,
QStringList{ "-version", "16.0", "-latest", "-requires", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
"-property", "isComplete" });
if (!vsWhereProcess.waitForStarted())
{
return false;
}
while (vsWhereProcess.waitForReadyRead())
{
}
QString vsWhereOutput(vsWhereProcess.readAllStandardOutput());
if (vsWhereOutput.startsWith("1"))
{
return true;
}
QSpacerItem* horizontalSpacer = new QSpacerItem(600, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
QGridLayout* layout = reinterpret_cast<QGridLayout*>(vsWarningMessage.layout());
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
vsWarningMessage.exec();
}
return false;
}
bool IsVS2019Installed()
{
static bool vs2019Installed = IsVS2019Installed_internal();
return vs2019Installed;
return findCompilerResult.IsSuccess();
}
ProjectManagerScreen GetProjectManagerScreen(const QString& screen)