From 79f0ed89b0d833667a1aec8338024f76e9c44c9d Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sun, 3 Aug 2025 13:26:25 +0500 Subject: [PATCH] Manager: Add a language selector in Preferences --- src/qt/qt_vmmanager_main.cpp | 14 ++++++++++ src/qt/qt_vmmanager_main.hpp | 1 + src/qt/qt_vmmanager_mainwindow.cpp | 25 +++++++++++++++++ src/qt/qt_vmmanager_mainwindow.hpp | 3 ++ src/qt/qt_vmmanager_mainwindow.ui | 2 +- src/qt/qt_vmmanager_preferences.cpp | 21 ++++++++++++++ src/qt/qt_vmmanager_preferences.hpp | 1 + src/qt/qt_vmmanager_preferences.ui | 43 +++++++++++++++++++++++++++++ 8 files changed, 109 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index d2ce2f025..368a38dd2 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -751,6 +751,20 @@ VMManagerMain::onPreferencesUpdated() } } +void +VMManagerMain::onLanguageUpdated() +{ + vm_model->refreshConfigs(); + /* Hack to work around details widgets not being re-translatable + without going through layers of abstraction */ + ui->detailsArea->layout()->removeWidget(vm_details); + delete vm_details; + vm_details = new VMManagerDetails(); + ui->detailsArea->layout()->addWidget(vm_details); + if (vm_model->rowCount(QModelIndex()) > 0) + vm_details->updateData(selected_sysconfig); +} + int VMManagerMain::getActiveMachineCount() { diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index bb2bb180b..8ec1129ae 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -79,6 +79,7 @@ public slots: #endif void modelDataChange(); void onPreferencesUpdated(); + void onLanguageUpdated(); void onConfigUpdated(const QString &uuid); int getActiveMachineCount(); diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index 3bc7ddece..af9f3082c 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -23,6 +23,8 @@ # include "qt_updatecheckdialog.hpp" #endif #include "qt_about.hpp" +#include "qt_progsettings.hpp" +#include "qt_util.hpp" #include #include @@ -113,6 +115,7 @@ VMManagerMainWindow(QWidget *parent) // Inform the main view when preferences are updated connect(this, &VMManagerMainWindow::preferencesUpdated, vmm, &VMManagerMain::onPreferencesUpdated); + connect(this, &VMManagerMainWindow::languageUpdated, vmm, &VMManagerMain::onLanguageUpdated); } @@ -151,6 +154,7 @@ VMManagerMainWindow::preferencesTriggered() const auto prefs = new VMManagerPreferences(); if (prefs->exec() == QDialog::Accepted) { emit preferencesUpdated(); + updateLanguage(); } } @@ -164,6 +168,27 @@ VMManagerMainWindow::saveSettings() const config->sync(); } +void +VMManagerMainWindow::updateLanguage() +{ + ProgSettings::loadTranslators(QCoreApplication::instance()); + ProgSettings::reloadStrings(); + ui->retranslateUi(this); + setWindowTitle(tr("%1 VM Manager").arg(EMU_NAME)); + emit languageUpdated(); +} + +void +VMManagerMainWindow::changeEvent(QEvent *event) +{ +#ifdef Q_OS_WINDOWS + if (event->type() == QEvent::LanguageChange) { + QApplication::setFont(QFont(ProgSettings::getFontName(lang_id), 9)); + } +#endif + QWidget::changeEvent(event); +} + void VMManagerMainWindow::closeEvent(QCloseEvent *event) { diff --git a/src/qt/qt_vmmanager_mainwindow.hpp b/src/qt/qt_vmmanager_mainwindow.hpp index ca7b0043d..2f2d34d25 100644 --- a/src/qt/qt_vmmanager_mainwindow.hpp +++ b/src/qt/qt_vmmanager_mainwindow.hpp @@ -36,6 +36,7 @@ public: ~VMManagerMainWindow() override; signals: void preferencesUpdated(); + void languageUpdated(); private: Ui::VMManagerMainWindow *ui; @@ -46,6 +47,7 @@ private: public slots: void setStatusLeft(const QString &text) const; void setStatusRight(const QString &text) const; + void updateLanguage(); private slots: void vmmSelectionChanged(const QModelIndex ¤tSelection, QProcess::ProcessState processState) const; @@ -60,6 +62,7 @@ private slots: void on_actionAbout_Qt_triggered(); protected: + void changeEvent(QEvent *event) override; void closeEvent(QCloseEvent *event) override; }; diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index fa32241a4..7cd817a0b 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -11,7 +11,7 @@ - MainWindow + 86Box VM Manager diff --git a/src/qt/qt_vmmanager_preferences.cpp b/src/qt/qt_vmmanager_preferences.cpp index eaf8e0205..b03c66aa4 100644 --- a/src/qt/qt_vmmanager_preferences.cpp +++ b/src/qt/qt_vmmanager_preferences.cpp @@ -18,12 +18,14 @@ #include #include +#include "qt_progsettings.hpp" #include "qt_vmmanager_preferences.hpp" #include "qt_vmmanager_config.hpp" #include "ui_qt_vmmanager_preferences.h" extern "C" { #include <86box/86box.h> +#include <86box/config.h> #include <86box/version.h> } @@ -44,6 +46,15 @@ VMManagerPreferences(QWidget *parent) : ui(new Ui::VMManagerPreferences) ui->systemDirectory->setText(QDir(vmm_path).path()); } + ui->comboBoxLanguage->setItemData(0, 0); + for (int i = 1; i < ProgSettings::languages.length(); i++) { + ui->comboBoxLanguage->addItem(ProgSettings::languages[i].second, i); + if (i == lang_id) { + ui->comboBoxLanguage->setCurrentIndex(ui->comboBoxLanguage->findData(i)); + } + } + ui->comboBoxLanguage->model()->sort(Qt::AscendingOrder); + // TODO: Defaults #if EMU_BUILD_NUM != 0 const auto configUpdateCheck = config->getStringValue("update_check").toInt(); @@ -70,11 +81,21 @@ VMManagerPreferences::chooseDirectoryLocation() ui->systemDirectory->setText(QDir::toNativeSeparators(directory)); } +void +VMManagerPreferences::on_pushButtonLanguage_released() +{ + ui->comboBoxLanguage->setCurrentIndex(0); +} + void VMManagerPreferences::accept() { const auto config = new VMManagerConfig(VMManagerConfig::ConfigType::General); config->setStringValue("system_directory", ui->systemDirectory->text()); + + lang_id = ui->comboBoxLanguage->currentData().toInt(); + config_save_global(); + #if EMU_BUILD_NUM != 0 config->setStringValue("update_check", ui->updateCheckBox->isChecked() ? "1" : "0"); #endif diff --git a/src/qt/qt_vmmanager_preferences.hpp b/src/qt/qt_vmmanager_preferences.hpp index aedba862a..d28ff79ac 100644 --- a/src/qt/qt_vmmanager_preferences.hpp +++ b/src/qt/qt_vmmanager_preferences.hpp @@ -37,6 +37,7 @@ private: QString settingsFile; private slots: void chooseDirectoryLocation(); + void on_pushButtonLanguage_released(); protected: void accept() override; void reject() override; diff --git a/src/qt/qt_vmmanager_preferences.ui b/src/qt/qt_vmmanager_preferences.ui index 1743a0bfb..37caaae56 100644 --- a/src/qt/qt_vmmanager_preferences.ui +++ b/src/qt/qt_vmmanager_preferences.ui @@ -53,6 +53,42 @@ + + + + Language: + + + + + + + + + + 0 + 0 + + + + 30 + + + + (System Default) + + + + + + + + Default + + + + + @@ -92,6 +128,13 @@ + + dirSelectButton + comboBoxLanguage + pushButtonLanguage + updateCheckBox + regexSearchCheckBox +