From 08b7486bf00ed92c7ee176d78896112fe11157f2 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 30 Aug 2019 02:38:10 -0400 Subject: [PATCH 1/2] General: Make UI strings translation-aware Makes the UI strings localizable for other languages. Fairly trivial, as there's not many dialogs to translate. --- hecl-gui/MainWindow.cpp | 84 ++++++++++++++++++++---------------- hecl-gui/SysReqTableView.cpp | 80 +++++++++++++++++----------------- hecl-gui/SysReqTableView.hpp | 2 +- 3 files changed, 88 insertions(+), 78 deletions(-) diff --git a/hecl-gui/MainWindow.cpp b/hecl-gui/MainWindow.cpp index 2b5d8dc52..1ee020dd1 100644 --- a/hecl-gui/MainWindow.cpp +++ b/hecl-gui/MainWindow.cpp @@ -84,7 +84,7 @@ MainWindow::MainWindow(QWidget* parent) m_ui->processOutput->setFont(mFont); m_cursor = QTextCursor(m_ui->processOutput->document()); - m_updateURDEButton = new QPushButton(QStringLiteral("Update URDE"), m_ui->centralwidget); + 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(); @@ -115,12 +115,15 @@ MainWindow::~MainWindow() { } void MainWindow::onExtract() { - if (m_path.isEmpty()) + if (m_path.isEmpty()) { return; - QString imgPath = QFileDialog::getOpenFileName(this, QStringLiteral("Extract Image"), m_path, - QStringLiteral("Images (*.iso *.wbfs *.gcm)")); - if (imgPath.isEmpty()) + } + + const QString imgPath = + QFileDialog::getOpenFileName(this, tr("Extract Image"), m_path, tr("Images (*.iso *.wbfs *.gcm)")); + if (imgPath.isEmpty()) { return; + } m_ui->processOutput->clear(); KillProcessTree(m_heclProc); @@ -140,7 +143,7 @@ void MainWindow::onExtract() { m_ui->heclTabs->setCurrentIndex(0); disableOperations(); - m_ui->extractBtn->setText(QStringLiteral("Cancel")); + m_ui->extractBtn->setText(tr("Cancel")); m_ui->extractBtn->setEnabled(true); disconnect(m_ui->extractBtn, &QPushButton::clicked, nullptr, nullptr); connect(m_ui->extractBtn, &QPushButton::clicked, this, &MainWindow::doHECLTerminate); @@ -174,7 +177,7 @@ void MainWindow::onPackage() { m_ui->heclTabs->setCurrentIndex(0); disableOperations(); - m_ui->packageBtn->setText(QStringLiteral("Cancel")); + m_ui->packageBtn->setText(tr("Cancel")); m_ui->packageBtn->setEnabled(true); disconnect(m_ui->packageBtn, &QPushButton::clicked, nullptr, nullptr); connect(m_ui->packageBtn, &QPushButton::clicked, this, &MainWindow::doHECLTerminate); @@ -266,21 +269,23 @@ void MainWindow::onUpdateURDEPressed() { } void MainWindow::onBinaryDownloaded(QuaZip& file) { - bool err = !ExtractZip::extractDir(file, m_path); + const bool err = !ExtractZip::extractDir(file, m_path); - if (err) - m_ui->downloadErrorLabel->setText(QStringLiteral("Error extracting zip")); - else - m_ui->downloadErrorLabel->setText(QStringLiteral("Download successful"), true); + if (err) { + m_ui->downloadErrorLabel->setText(tr("Error extracting zip")); + } else { + m_ui->downloadErrorLabel->setText(tr("Download successful"), true); + } m_ui->downloadButton->setEnabled(true); checkDownloadedBinary(); - if (!err && m_ui->extractBtn->isEnabled()) - m_ui->downloadErrorLabel->setText(QStringLiteral("Download successful - Press 'Extract' to continue."), true); - if (!err && !m_ui->sysReqTable->isBlenderVersionOk()) - m_ui->downloadErrorLabel->setText( - QStringLiteral("Blender 2.78+ must be installed. Please download via Steam or blender.org.")); + if (!err && m_ui->extractBtn->isEnabled()) { + m_ui->downloadErrorLabel->setText(tr("Download successful - Press 'Extract' to continue."), true); + } + if (!err && !m_ui->sysReqTable->isBlenderVersionOk()) { + m_ui->downloadErrorLabel->setText(tr("Blender 2.78+ must be installed. Please download via Steam or blender.org.")); + } } void MainWindow::onBinaryFailed() { @@ -310,9 +315,9 @@ void MainWindow::enableOperations() { if (m_heclPath.isEmpty()) return; - m_ui->extractBtn->setText(QStringLiteral("Extract")); - m_ui->packageBtn->setText(QStringLiteral("Package")); - m_ui->launchBtn->setText(QStringLiteral("Launch")); + m_ui->extractBtn->setText(tr("Extract")); + m_ui->packageBtn->setText(tr("Package")); + m_ui->launchBtn->setText(tr("Launch")); m_ui->extractBtn->setEnabled(true); if (QFile::exists(m_path + QStringLiteral("/MP1/!original_ids.yaml"))) { @@ -321,14 +326,15 @@ void MainWindow::enableOperations() { m_ui->launchBtn->setEnabled(true); } - if (!m_ui->sysReqTable->isBlenderVersionOk()) + if (!m_ui->sysReqTable->isBlenderVersionOk()) { insertContinueNote(tr("Blender 2.78+ must be installed. Please download via Steam or blender.org.")); - else if (m_ui->launchBtn->isEnabled()) + } else if (m_ui->launchBtn->isEnabled()) { insertContinueNote(tr("Package complete - Press 'Launch' to start URDE.")); - else if (m_ui->packageBtn->isEnabled()) + } else if (m_ui->packageBtn->isEnabled()) { insertContinueNote(tr("Extract complete - Press 'Package' to continue.")); - else if (m_ui->extractBtn->isEnabled()) + } else if (m_ui->extractBtn->isEnabled()) { insertContinueNote(tr("Press 'Extract' to begin.")); + } } bool MainWindow::isPackageComplete() const { @@ -376,7 +382,7 @@ bool MainWindow::checkDownloadedBinary() { if (m_path.isEmpty()) { m_ui->heclTabs->setCurrentIndex(1); - m_ui->downloadErrorLabel->setText(QStringLiteral("Set working directory to continue."), true); + m_ui->downloadErrorLabel->setText(tr("Set working directory to continue."), true); enableOperations(); return false; } @@ -408,7 +414,7 @@ bool MainWindow::checkDownloadedBinary() { m_updateURDEButton->show(); } } else { - m_ui->currentBinaryLabel->setText(QStringLiteral("unknown -- re-download recommended")); + m_ui->currentBinaryLabel->setText(tr("unknown -- re-download recommended")); } m_urdePath = urdePath; @@ -417,9 +423,9 @@ bool MainWindow::checkDownloadedBinary() { enableOperations(); return true; } else { - m_ui->currentBinaryLabel->setText(QStringLiteral("none")); + m_ui->currentBinaryLabel->setText(tr("none")); m_ui->heclTabs->setCurrentIndex(1); - m_ui->downloadErrorLabel->setText(QStringLiteral("Press 'Download' to fetch latest URDE binary."), true); + m_ui->downloadErrorLabel->setText(tr("Press 'Download' to fetch latest URDE binary."), true); enableOperations(); } @@ -427,21 +433,25 @@ bool MainWindow::checkDownloadedBinary() { } void MainWindow::setPath(const QString& path) { - QFileInfo finfo(path); + const QFileInfo finfo(path); + QString usePath; - if (!path.isEmpty()) + if (!path.isEmpty()) { usePath = finfo.absoluteFilePath(); + } + if (!usePath.isEmpty() && !finfo.exists()) { - if (QMessageBox::question(this, QStringLiteral("Make Directory"), - QStringLiteral("%1 does not exist. Create it now?").arg(usePath)) == QMessageBox::Yes) + if (QMessageBox::question(this, tr("Make Directory"), tr("%1 does not exist. Create it now?").arg(usePath)) == + QMessageBox::Yes) { QDir().mkpath(usePath); - else + } else { usePath = QString(); + } } if (!usePath.isEmpty() && !finfo.isDir()) { - QMessageBox::warning(this, QStringLiteral("Directory Error"), QStringLiteral("%1 is not a directory").arg(usePath), - QMessageBox::Ok, QMessageBox::NoButton); + QMessageBox::warning(this, tr("Directory Error"), tr("%1 is not a directory").arg(usePath), QMessageBox::Ok, + QMessageBox::NoButton); usePath = QString(); } @@ -453,9 +463,9 @@ void MainWindow::setPath(const QString& path) { m_ui->downloadButton->setToolTip(QString()); m_ui->downloadButton->setEnabled(m_ui->binaryComboBox->isEnabled()); } else { - m_ui->downloadButton->setToolTip(QStringLiteral("Working directory must be set")); + m_ui->downloadButton->setToolTip(tr("Working directory must be set")); m_ui->downloadButton->setEnabled(false); - m_ui->currentBinaryLabel->setText(QStringLiteral("none")); + m_ui->currentBinaryLabel->setText(tr("none")); } m_ui->sysReqTable->updateFreeDiskSpace(m_path); diff --git a/hecl-gui/SysReqTableView.cpp b/hecl-gui/SysReqTableView.cpp index 69ee69a38..d0ba972e5 100644 --- a/hecl-gui/SysReqTableView.cpp +++ b/hecl-gui/SysReqTableView.cpp @@ -23,21 +23,21 @@ #elif _WIN32 static QString GetWindowsVersionString() { if (IsWindows10OrGreater()) - return QStringLiteral("Windows 10"); + return QObject::tr("Windows 10"); else if (IsWindows8Point1OrGreater()) - return QStringLiteral("Windows 8.1"); + return QObject::tr("Windows 8.1"); else if (IsWindows8OrGreater()) - return QStringLiteral("Windows 8"); + return QObject::tr("Windows 8"); else if (IsWindows7SP1OrGreater()) - return QStringLiteral("Windows 7 SP1"); + return QObject::tr("Windows 7 SP1"); else if (IsWindows7OrGreater()) - return QStringLiteral("Windows 7"); + return QObject::tr("Windows 7"); else if (IsWindowsVistaOrGreater()) - return QStringLiteral("Windows Vista"); + return QObject::tr("Windows Vista"); else if (IsWindowsXPOrGreater()) - return QStringLiteral("Windows XP"); + return QObject::tr("Windows XP"); else - return QStringLiteral("Windows Old And Won't Work"); + return QObject::tr("Windows Old And Won't Work"); } #endif @@ -47,7 +47,7 @@ SysReqTableModel::SysReqTableModel(QObject* parent) : QAbstractTableModel(parent if (file.open(QFile::ReadOnly)) { const QString str(QString::fromUtf8(file.readAll())); m_cpuSpeed = str.toInt() / 1000; - m_cpuSpeedStr.sprintf("%g GHz", m_cpuSpeed / 1000.0); + m_cpuSpeedStr = tr("%1 GHz").arg(m_cpuSpeed / 1000.0); } #elif defined(__APPLE__) QProcess spProc; @@ -77,7 +77,7 @@ SysReqTableModel::SysReqTableModel(QObject* parent) : QAbstractTableModel(parent n = n.nextSiblingElement(QStringLiteral("string")); const double speed = n.text().split(QLatin1Char{' '}).front().toDouble(); m_cpuSpeed = uint64_t(speed * 1000.0); - m_cpuSpeedStr.sprintf("%g GHz", speed); + m_cpuSpeedStr = tr("%1 GHz").arg(speed); } } #elif _WIN32 @@ -88,7 +88,7 @@ SysReqTableModel::SysReqTableModel(QObject* parent) : QAbstractTableModel(parent DWORD size = sizeof(MHz); if (RegQueryValueEx(hkey, _SYS_STR("~MHz"), nullptr, nullptr, (LPBYTE)&MHz, &size) == ERROR_SUCCESS) { m_cpuSpeed = uint64_t(MHz); - m_cpuSpeedStr.sprintf("%1.1f GHz", MHz / 1000.f); + m_cpuSpeedStr = tr("%1 GHz").arg(MHz / 1000.f, 1, 'f', 1); } } RegCloseKey(hkey); @@ -100,7 +100,7 @@ SysReqTableModel::SysReqTableModel(QObject* parent) : QAbstractTableModel(parent zeus::getCpuInfo(0x16, regs); m_cpuSpeed = uint64_t(regs[0]); } - m_cpuSpeedStr.sprintf("%g GHz", m_cpuSpeed / 1000.f); + m_cpuSpeedStr = tr("%1 GHz").arg(m_cpuSpeed / 1000.f); #endif #if _WIN32 ULONGLONG memSize; @@ -109,35 +109,35 @@ SysReqTableModel::SysReqTableModel(QObject* parent) : QAbstractTableModel(parent #else m_memorySize = uint64_t(sysconf(_SC_PHYS_PAGES)) * sysconf(_SC_PAGESIZE); #endif - m_memorySizeStr.sprintf("%g GiB", m_memorySize / 1024.f / 1024.f / 1024.f); + m_memorySizeStr = tr("%1 GiB").arg(m_memorySize / 1024.f / 1024.f / 1024.f); #ifdef __APPLE__ GetMacOSSystemVersion(m_macosMajor, m_macosMinor, m_macosPatch); - if (m_macosPatch == 0) - m_osVersion.sprintf("macOS %d.%d", m_macosMajor, m_macosMinor); - else - m_osVersion.sprintf("macOS %d.%d.%d", m_macosMajor, m_macosMinor, m_macosPatch); + if (m_macosPatch == 0) { + m_osVersion = tr("macOS %1.%2").arg(m_macosMajor, m_macosMinor); + } else { + m_osVersion = tr("macOS %1.%2.%3").arg(m_macosMajor, m_macosMinor, m_macosPatch); + } #elif _WIN32 m_win7SP1OrGreater = IsWindows7SP1OrGreater(); m_osVersion = GetWindowsVersionString(); #elif __linux__ - m_osVersion = QStringLiteral("Linux"); + m_osVersion = tr("Linux"); #endif hecl::blender::FindBlender(m_blendMajor, m_blendMinor); if (m_blendMajor) { - m_blendVersionStr = - QStringLiteral("Blender ") + QString::number(m_blendMajor) + QLatin1Char{'.'} + QString::number(m_blendMinor); + m_blendVersionStr = tr("Blender %1.%2").arg(QString::number(m_blendMajor), QString::number(m_blendMinor)); } else { - m_blendVersionStr = QStringLiteral("Not Found"); + m_blendVersionStr = tr("Not Found"); } } void SysReqTableModel::updateFreeDiskSpace(const QString& path) { if (path.isEmpty()) { m_freeDiskSpace = 0; - m_freeDiskSpaceStr = QStringLiteral(""); + m_freeDiskSpaceStr = tr(""); } else { m_freeDiskSpace = QStorageInfo(path).bytesFree(); - m_freeDiskSpaceStr.sprintf("%1.1f GB", m_freeDiskSpace / 1000.f / 1000.f / 1000.f); + m_freeDiskSpaceStr = tr("%1 GB").arg(m_freeDiskSpace / 1000.f / 1000.f / 1000.f, 1, 'f', 1); } emit dataChanged(index(3, 0), index(3, 0)); } @@ -178,28 +178,28 @@ QVariant SysReqTableModel::data(const QModelIndex& index, int role) const { switch (index.row()) { case 0: #if ZEUS_ARCH_X86 || ZEUS_ARCH_X86_64 - return QStringLiteral("x86_64"); + return tr("x86_64"); #else return {}; #endif case 1: - return QStringLiteral("1.5 GHz"); + return tr("1.5 GHz"); case 2: - return QStringLiteral("3 GiB"); + return tr("3 GiB"); case 3: - return QStringLiteral("5 GB (MP1)"); + return tr("5 GB (MP1)"); case 4: #ifdef __APPLE__ - return QStringLiteral("macOS 10.9"); + return tr("macOS 10.9"); #elif defined(_WIN32) - return QStringLiteral("Windows 7 SP1"); + return tr("Windows 7 SP1"); #elif defined(__linux__) - return QStringLiteral("Linux"); + return tr("Linux"); #else return {}; #endif case 5: - return QStringLiteral("Blender 2.78"); + return tr("Blender 2.78"); } } else if (index.column() == 1) { /* Your System */ @@ -235,27 +235,27 @@ QVariant SysReqTableModel::headerData(int section, Qt::Orientation orientation, switch (section) { case 0: default: - return QStringLiteral("Recommended"); + return tr("Recommended"); case 1: - return QStringLiteral("Your System"); + return tr("Your System"); } } else { switch (section) { case 0: default: - return QStringLiteral("Architecture"); + return tr("Architecture"); case 1: - return QStringLiteral("CPU Speed"); + return tr("CPU Speed"); case 2: - return QStringLiteral("Memory"); + return tr("Memory"); case 3: - return QStringLiteral("Disk Space"); + return tr("Disk Space"); case 4: - return QStringLiteral("OS"); + return tr("OS"); case 5: - return QStringLiteral("Blender"); + return tr("Blender"); case 6: - return QStringLiteral("Vector ISA"); + return tr("Vector ISA"); } } } diff --git a/hecl-gui/SysReqTableView.hpp b/hecl-gui/SysReqTableView.hpp index 3f3b2644b..660dec47f 100644 --- a/hecl-gui/SysReqTableView.hpp +++ b/hecl-gui/SysReqTableView.hpp @@ -12,7 +12,7 @@ class SysReqTableModel : public QAbstractTableModel { uint64_t m_memorySize = 0; QString m_memorySizeStr; qint64 m_freeDiskSpace = 0; - QString m_freeDiskSpaceStr = QStringLiteral(""); + QString m_freeDiskSpaceStr = tr(""); #if __APPLE__ int m_macosMajor = 0; int m_macosMinor = 0; From 0fceb801caf45f20d473206465fe40cbb4ee2d69 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 30 Aug 2019 05:49:36 -0400 Subject: [PATCH 2/2] General: Bump Blender minimum version to 2.80 --- hecl-gui/MainWindow.cpp | 4 ++-- hecl-gui/SysReqTableView.cpp | 2 +- hecl-gui/SysReqTableView.hpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hecl-gui/MainWindow.cpp b/hecl-gui/MainWindow.cpp index 1ee020dd1..75cf18103 100644 --- a/hecl-gui/MainWindow.cpp +++ b/hecl-gui/MainWindow.cpp @@ -284,7 +284,7 @@ void MainWindow::onBinaryDownloaded(QuaZip& file) { m_ui->downloadErrorLabel->setText(tr("Download successful - Press 'Extract' to continue."), true); } if (!err && !m_ui->sysReqTable->isBlenderVersionOk()) { - m_ui->downloadErrorLabel->setText(tr("Blender 2.78+ must be installed. Please download via Steam or blender.org.")); + m_ui->downloadErrorLabel->setText(tr("Blender 2.80+ must be installed. Please download via Steam or blender.org.")); } } @@ -327,7 +327,7 @@ void MainWindow::enableOperations() { } if (!m_ui->sysReqTable->isBlenderVersionOk()) { - insertContinueNote(tr("Blender 2.78+ must be installed. Please download via Steam or blender.org.")); + insertContinueNote(tr("Blender 2.80+ must be installed. Please download via Steam or blender.org.")); } else if (m_ui->launchBtn->isEnabled()) { insertContinueNote(tr("Package complete - Press 'Launch' to start URDE.")); } else if (m_ui->packageBtn->isEnabled()) { diff --git a/hecl-gui/SysReqTableView.cpp b/hecl-gui/SysReqTableView.cpp index d0ba972e5..27d0d1daf 100644 --- a/hecl-gui/SysReqTableView.cpp +++ b/hecl-gui/SysReqTableView.cpp @@ -199,7 +199,7 @@ QVariant SysReqTableModel::data(const QModelIndex& index, int role) const { return {}; #endif case 5: - return tr("Blender 2.78"); + return tr("Blender 2.80"); } } else if (index.column() == 1) { /* Your System */ diff --git a/hecl-gui/SysReqTableView.hpp b/hecl-gui/SysReqTableView.hpp index 660dec47f..a8223b38c 100644 --- a/hecl-gui/SysReqTableView.hpp +++ b/hecl-gui/SysReqTableView.hpp @@ -31,7 +31,7 @@ public: int columnCount(const QModelIndex& parent = QModelIndex()) const; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - bool isBlenderVersionOk() const { return m_blendMajor > 2 || (m_blendMajor == 2 && m_blendMinor >= 78); } + bool isBlenderVersionOk() const { return m_blendMajor > 2 || (m_blendMajor == 2 && m_blendMinor >= 80); } void updateFreeDiskSpace(const QString& path); };