Add Continuous track, disable zip downloading

Opens update links in browser until new auto-update is implemented
This commit is contained in:
Luke Street 2021-03-19 00:31:34 -04:00
parent 7cc9abfac8
commit 32ba74db08
6 changed files with 361 additions and 336 deletions

View File

@ -128,21 +128,21 @@ URDEVersion::URDEVersion(const QString& filename) {
}
}
if (state == architecture) {
state = vectorISA;
state = extra;
Architecture archValue = StringToArchitecture(list[i]);
if (archValue != Architecture::Invalid) {
m_architecture = archValue;
continue;
}
}
if (state == vectorISA) {
state = extra;
VectorISA isa = StringToVectorISA(list[i]);
if (isa != VectorISA::Invalid) {
m_vectorISA = isa;
continue;
}
}
// if (state == vectorISA) {
// state = extra;
// VectorISA isa = StringToVectorISA(list[i]);
// if (isa != VectorISA::Invalid) {
// m_vectorISA = isa;
// continue;
// }
// }
m_extra += QLatin1Char('-') + list[i];
}
}
@ -153,13 +153,11 @@ QString URDEVersion::fileString(bool withExtension) const {
}
if (withExtension && !m_extension.isEmpty()) {
return QStringLiteral("urde-%1-%2-%3-%4%5%6")
.arg(m_version, PlatformToString(m_platform), ArchitectureToString(m_architecture),
VectorISAToString(m_vectorISA), m_extra, m_extension);
return QStringLiteral("urde-%1-%2-%3%4%5")
.arg(m_version, PlatformToString(m_platform), ArchitectureToString(m_architecture), m_extra, m_extension);
} else {
return QStringLiteral("urde-%1-%2-%3-%4%5")
.arg(m_version, PlatformToString(m_platform), ArchitectureToString(m_architecture),
VectorISAToString(m_vectorISA), m_extra);
return QStringLiteral("urde-%1-%2-%3%4")
.arg(m_version, PlatformToString(m_platform), ArchitectureToString(m_architecture), m_extra);
}
}

View File

@ -2,6 +2,8 @@
#include "Common.hpp"
#include <quazip.h>
#include <QDesktopServices>
#define KEY_PINNING 0
#if KEY_PINNING
@ -77,6 +79,7 @@ void DownloadManager::fetchBinary(const QString& str, const QString& outPath) {
const QString track = QSettings().value(QStringLiteral("update_track")).toString();
const auto url = QUrl(QStringLiteral("%1%2/%3/%4").arg(Domain, track, CurPlatformString, str));
#if PLATFORM_ZIP_DOWNLOAD
m_binaryInProgress = m_netManager.get(QNetworkRequest(url));
connect(m_binaryInProgress, &QNetworkReply::finished, this, &DownloadManager::binaryFinished);
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
@ -92,6 +95,9 @@ void DownloadManager::fetchBinary(const QString& str, const QString& outPath) {
m_progBar->setEnabled(true);
m_progBar->setValue(0);
}
#else
QDesktopServices::openUrl(url);
#endif
}
void DownloadManager::indexFinished() {

View File

@ -6,6 +6,12 @@
#include <QProgressBar>
#include <QLabel>
//#if _WIN32
//#define PLATFORM_ZIP_DOWNLOAD 1
//#else
#define PLATFORM_ZIP_DOWNLOAD 0
//#endif
class QuaZip;
class DownloadManager : public QObject {

View File

@ -59,7 +59,7 @@ static void KillProcessTree(QProcess& proc) {
}
#endif
const QStringList MainWindow::skUpdateTracks = {QStringLiteral("stable"), QStringLiteral("dev")};
const QStringList MainWindow::skUpdateTracks = {QStringLiteral("stable"), QStringLiteral("dev"), QStringLiteral("continuous")};
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
@ -73,7 +73,7 @@ MainWindow::MainWindow(QWidget* parent)
m_settings.setValue(QStringLiteral("urde_arguments"), QStringList{QStringLiteral("--no-shader-warmup")});
}
if (m_settings.value(QStringLiteral("update_track")).isNull()) {
m_settings.setValue(QStringLiteral("update_track"), QStringLiteral("stable"));
m_settings.setValue(QStringLiteral("update_track"), QStringLiteral("dev"));
}
m_ui->setupUi(this);
@ -108,16 +108,17 @@ MainWindow::MainWindow(QWidget* parent)
}
});
m_updateURDEButton = new QPushButton(tr("Update URDE"), m_ui->centralwidget);
m_ui->gridLayout->addWidget(m_updateURDEButton, 2, 3, 1, 1);
m_updateURDEButton->hide();
QPalette pal = m_updateURDEButton->palette();
pal.setColor(QPalette::Button, QColor(53, 53, 72));
m_updateURDEButton->setPalette(pal);
connect(m_updateURDEButton, &QPushButton::clicked, this, &MainWindow::onUpdateURDEPressed);
// m_updateURDEButton = new QPushButton(tr("Update URDE"), m_ui->centralwidget);
// m_ui->gridLayout->addWidget(m_updateURDEButton, 2, 3, 1, 1);
// m_updateURDEButton->hide();
// QPalette pal = m_updateURDEButton->palette();
// pal.setColor(QPalette::Button, QColor(53, 53, 72));
// m_updateURDEButton->setPalette(pal);
// connect(m_updateURDEButton, &QPushButton::clicked, this, &MainWindow::onUpdateURDEPressed);
qDebug() << "Stored track " << m_settings.value(QStringLiteral("update_track"));
const int index = skUpdateTracks.indexOf(m_settings.value(QStringLiteral("update_track")).toString());
m_ui->devTrackWarning->setVisible(index == 1);
m_ui->continuousTrackWarning->setVisible(index == 2);
m_ui->updateTrackComboBox->setCurrentIndex(index);
connect(m_ui->updateTrackComboBox, qOverload<int>(&QComboBox::currentIndexChanged), this,
&MainWindow::onUpdateTrackChanged);
@ -126,6 +127,9 @@ MainWindow::MainWindow(QWidget* parent)
std::bind(&MainWindow::onIndexDownloaded, this, std::placeholders::_1),
std::bind(&MainWindow::onBinaryDownloaded, this, std::placeholders::_1),
std::bind(&MainWindow::onBinaryFailed, this));
#if !PLATFORM_ZIP_DOWNLOAD
m_ui->downloadProgressBar->hide();
#endif
initOptions();
initSlots();
@ -282,17 +286,19 @@ void MainWindow::onIndexDownloaded(const QStringList& index) {
}
void MainWindow::onDownloadPressed() {
m_updateURDEButton->hide();
// m_updateURDEButton->hide();
QString filename = m_ui->binaryComboBox->currentData().value<URDEVersion>().fileString(true);
#if PLATFORM_ZIP_DOWNLOAD
disableOperations();
m_ui->downloadButton->setEnabled(false);
#endif
m_dlManager.fetchBinary(filename, m_path + QLatin1Char{'/'} + filename);
}
void MainWindow::onUpdateURDEPressed() {
m_ui->heclTabs->setCurrentIndex(2);
onDownloadPressed();
}
//void MainWindow::onUpdateURDEPressed() {
// m_ui->heclTabs->setCurrentIndex(2);
// onDownloadPressed();
//}
void MainWindow::onBinaryDownloaded(QuaZip& file) {
const bool err = !ExtractZip::extractDir(file, m_path);
@ -410,7 +416,7 @@ static bool GetDLPackage(const QString& path, QString& dlPackage) {
}
bool MainWindow::checkDownloadedBinary() {
m_updateURDEButton->hide();
// m_updateURDEButton->hide();
m_urdePath = QString();
m_heclPath = QString();
@ -422,24 +428,20 @@ bool MainWindow::checkDownloadedBinary() {
return false;
}
#if __APPLE__
QString urdePath = m_path + QStringLiteral("/URDE.app/Contents/MacOS/urde");
QString heclPath = m_path + QStringLiteral("/URDE.app/Contents/MacOS/hecl");
QString visigenPath = m_path + QStringLiteral("/URDE.app/Contents/MacOS/visigen");
#elif _WIN32
QString urdePath = m_path + QStringLiteral("/urde.exe");
QString heclPath = m_path + QStringLiteral("/hecl.exe");
QString visigenPath = m_path + QStringLiteral("/visigen.exe");
#else
QString urdePath = m_path + QStringLiteral("/urde");
QString heclPath = m_path + QStringLiteral("/hecl");
QString visigenPath = m_path + QStringLiteral("/visigen");
const QString dir = QApplication::instance()->applicationDirPath();
#if _WIN32
QString urdePath = dir + QStringLiteral("/urde.exe");
QString heclPath = dir + QStringLiteral("/hecl.exe");
QString visigenPath = dir + QStringLiteral("/visigen.exe");
if (!QFileInfo::exists(urdePath) || !QFileInfo::exists(heclPath) || !QFileInfo::exists(visigenPath)) {
const QString dir = QApplication::instance()->applicationDirPath();
urdePath = dir + QStringLiteral("/urde");
heclPath = dir + QStringLiteral("/hecl");
visigenPath = dir + QStringLiteral("/visigen");
urdePath = m_path + QStringLiteral("/urde.exe");
heclPath = m_path + QStringLiteral("/hecl.exe");
visigenPath = m_path + QStringLiteral("/visigen.exe");
}
#else
QString urdePath = dir + QStringLiteral("/urde");
QString heclPath = dir + QStringLiteral("/hecl");
QString visigenPath = dir + QStringLiteral("/visigen");
#endif
urdePath = QFileInfo(urdePath).absoluteFilePath();
heclPath = QFileInfo(heclPath).absoluteFilePath();
@ -451,9 +453,9 @@ bool MainWindow::checkDownloadedBinary() {
if (!urdeDlPackage.isEmpty() && urdeDlPackage == heclDlPackage && urdeDlPackage == visigenDlPackage) {
URDEVersion v(urdeDlPackage);
m_ui->currentBinaryLabel->setText(v.fileString(false));
if (m_recommendedVersion.isValid() && v.isValid() && m_recommendedVersion.getVersion() > v.getVersion()) {
m_updateURDEButton->show();
}
// if (m_recommendedVersion.isValid() && v.isValid() && m_recommendedVersion.getVersion() > v.getVersion()) {
// m_updateURDEButton->show();
// }
} else {
m_ui->currentBinaryLabel->setText(tr("unknown -- re-download recommended"));
}
@ -605,6 +607,7 @@ void MainWindow::onUpdateTrackChanged(int index) {
m_settings.setValue(QStringLiteral("update_track"), skUpdateTracks[index]);
m_dlManager.fetchIndex();
m_ui->devTrackWarning->setVisible(index == 1);
m_ui->continuousTrackWarning->setVisible(index == 2);
}
void MainWindow::initOptions() {

View File

@ -40,7 +40,7 @@ class MainWindow : public QMainWindow {
QStringList m_warpSettings;
QSettings m_settings;
URDEVersion m_recommendedVersion;
QPushButton* m_updateURDEButton;
// QPushButton* m_updateURDEButton;
bool m_inContinueNote = false;
QStringListModel m_launchOptionsModel;
@ -61,7 +61,7 @@ private slots:
void doHECLTerminate();
void onReturnPressed();
void onDownloadPressed();
void onUpdateURDEPressed();
// void onUpdateURDEPressed();
void onUpdateTrackChanged(int index);
private:

View File

@ -21,61 +21,6 @@
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Extract Directory:</string>
</property>
<property name="buddy">
<cstring>pathEdit</cstring>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="pathEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="sizeIncrement">
<size>
<width>1</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="browseBtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QTabWidget" name="heclTabs">
<property name="currentIndex">
@ -299,15 +244,15 @@
<item row="0" column="0" rowspan="4">
<widget class="QToolBox" name="toolBox">
<property name="currentIndex">
<number>3</number>
<number>2</number>
</property>
<widget class="QWidget" name="graphicsGroup">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>225</width>
<height>186</height>
<width>236</width>
<height>198</height>
</rect>
</property>
<attribute name="label">
@ -450,8 +395,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>166</width>
<height>105</height>
<width>174</width>
<height>111</height>
</rect>
</property>
<attribute name="label">
@ -499,8 +444,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>164</width>
<height>47</height>
<width>450</width>
<height>633</height>
</rect>
</property>
<attribute name="label">
@ -510,7 +455,7 @@
<item>
<widget class="QCheckBox" name="variableDtBox">
<property name="text">
<string>Variable Delta Time</string>
<string>Variable Delta Time (broken)</string>
</property>
</widget>
</item>
@ -535,7 +480,7 @@
<x>0</x>
<y>0</y>
<width>450</width>
<height>649</height>
<height>633</height>
</rect>
</property>
<attribute name="label">
@ -677,223 +622,6 @@
<string>&amp;System Check</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="8" column="1">
<widget class="QLabel" name="devTrackWarning">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt;Development Track selected!&lt;br/&gt;Development builds are considered unstable and may cause crashes. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="ErrorLabel" name="downloadErrorLabel">
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>47</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>47</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="96">
<red>164</red>
<green>166</green>
<blue>168</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="SysReqTableView" name="sysReqTable">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>500</width>
<height>300</height>
</size>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="0">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="0">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>68</red>
<green>68</green>
<blue>68</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QProgressBar" name="downloadProgressBar">
<property name="enabled">
<bool>false</bool>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<layout class="QFormLayout" name="formLayout">
<property name="horizontalSpacing">
<number>12</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Downloaded URDE Binary:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="currentBinaryLabel">
<property name="text">
<string>none</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Recommended URDE Binary:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="recommendedBinaryLabel">
<property name="text">
<string>fetching...</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Update Track:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="updateTrackComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Stable</string>
</property>
</item>
<item>
<property name="text">
<string>Development</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
@ -976,7 +704,236 @@
</item>
</layout>
</item>
<item row="7" column="1">
<item row="0" column="1">
<widget class="SysReqTableView" name="sysReqTable">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>500</width>
<height>300</height>
</size>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="0">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="0">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>68</red>
<green>68</green>
<blue>68</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
</widget>
</item>
<item row="0" column="0">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<layout class="QFormLayout" name="formLayout">
<property name="horizontalSpacing">
<number>12</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Downloaded URDE version:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="currentBinaryLabel">
<property name="text">
<string>none</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Recommended URDE version:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="recommendedBinaryLabel">
<property name="text">
<string>fetching...</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Update track:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="updateTrackComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Stable</string>
</property>
</item>
<item>
<property name="text">
<string>Development</string>
</property>
</item>
<item>
<property name="text">
<string>Continuous</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="5" column="1">
<widget class="ErrorLabel" name="downloadErrorLabel">
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>47</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>47</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="96">
<red>164</red>
<green>166</green>
<blue>168</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLabel" name="continuousTrackWarning">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt;Continuous track selected!&lt;br/&gt;Continuous builds are built after every commit &lt;br/&gt;and have &lt;/span&gt;&lt;span style=&quot; font-weight:600; color:#ff0000;&quot;&gt;no&lt;/span&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt; guarantee of working at all.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="1">
<widget class="QProgressBar" name="downloadProgressBar">
<property name="enabled">
<bool>false</bool>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLabel" name="devTrackWarning">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; color:#1a5fb4;&quot;&gt;Development track selected!&lt;br/&gt;Development builds are considered unstable and may cause crashes.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="10" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -1247,7 +1204,7 @@
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans'; font-size:10pt; font-weight:600;&quot;&gt;About HECL Frontend&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans'; font-size:10pt;&quot;&gt;&lt;br /&gt;The HECL frontend UI is designed and built by &lt;/span&gt;&lt;a href=&quot;https://axiodl.com&quot;&gt;&lt;span style=&quot; font-family:'Noto Sans'; font-size:10pt; text-decoration: underline; color:#007af4;&quot;&gt;Axiomatic Data Laboratories&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-family:'Noto Sans'; font-size:10pt;&quot;&gt; Copyright 2020&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot; font-family:'Noto Sans'; font-size:10pt; font-weight:600;&quot;&gt;Authors:&lt;/span&gt;&lt;span style=&quot; font-family:'Noto Sans'; font-size:10pt;&quot;&gt;&lt;br /&gt;Phillip &amp;quot;Antidote&amp;quot; Stephens&lt;br /&gt;Jack &amp;quot;jackoalan&amp;quot; Andersen&lt;br /&gt;Luke &amp;quot;encounter&amp;quot; Street&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Courier New'; font-size:10pt;&quot;&gt;The MIT License&lt;/span&gt;&lt;/p&gt;
@ -1270,7 +1227,62 @@ p, li { white-space: pre-wrap; }
</widget>
</widget>
</item>
<item row="5" column="0" rowspan="3">
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Extract Directory:</string>
</property>
<property name="buddy">
<cstring>pathEdit</cstring>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="pathEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="sizeIncrement">
<size>
<width>1</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="browseBtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0" rowspan="3">
<layout class="QHBoxLayout" name="bottomButtonBox">
<item>
<spacer name="horizontalSpacer_2">
@ -1359,7 +1371,7 @@ p, li { white-space: pre-wrap; }
</layout>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<widget class="QLabel" name="alphaVersionLabel">
<property name="text">
<string>&lt;center&gt;&lt;h1 style=&quot;color:red&quot;&gt;ALPHA VERSION&lt;/h1&gt;&lt;/center&gt;</string>
</property>