all repos — mgba @ 9b6fc4482555e1a9e06b088604ebaabbc8325e2b

mGBA Game Boy Advance Emulator

Qt: Fix translation initialization (fixes #776)
Vicki Pfau vi@endrift.com
Thu, 06 Jul 2017 11:13:28 -0700
commit

9b6fc4482555e1a9e06b088604ebaabbc8325e2b

parent

d3678471f681215765877d4d8be91ac4bbe768ff

M CHANGESCHANGES

@@ -164,6 +164,7 @@ - Qt: Fix initial window size (fixes mgba.io/i/766)

- Qt: Fix data directory path - Qt: Fix controls not saving on non-SDL builds - GB Video: Fix LYC regression + - Qt: Fix translation initialization (fixes mgba.io/i/776) Misc: - Qt: Add language selector - GBA Timer: Improve accuracy of timers
M src/platform/qt/GBAApp.cppsrc/platform/qt/GBAApp.cpp

@@ -6,6 +6,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "GBAApp.h" #include "AudioProcessor.h" +#include "ConfigController.h" #include "Display.h" #include "GameController.h" #include "Window.h"

@@ -14,11 +15,8 @@

#include <QFileInfo> #include <QFileOpenEvent> #include <QIcon> -#include <QLibraryInfo> -#include <QTranslator> #include <mgba/core/version.h> -#include <mgba/internal/gba/video.h> #include <mgba-util/socket.h> #include <mgba-util/vfs.h>

@@ -32,8 +30,9 @@ static GBAApp* g_app = nullptr;

mLOG_DEFINE_CATEGORY(QT, "Qt", "platform.qt"); -GBAApp::GBAApp(int& argc, char* argv[]) +GBAApp::GBAApp(int& argc, char* argv[], ConfigController* config) : QApplication(argc, argv) + , m_configController(config) { g_app = this;

@@ -45,21 +44,6 @@ #ifndef Q_OS_MAC

setWindowIcon(QIcon(":/res/mgba-512.png")); #endif - QLocale locale; - - if (!m_configController.getQtOption("language").isNull()) { - locale = QLocale(m_configController.getQtOption("language").toString()); - QLocale::setDefault(locale); - } - - QTranslator qtTranslator; - qtTranslator.load(locale, "qt", "_", QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - installTranslator(&qtTranslator); - - QTranslator langTranslator; - langTranslator.load(locale, binaryName, "-", ":/translations/"); - installTranslator(&langTranslator); - SocketSubsystemInit(); qRegisterMetaType<const uint32_t*>("const uint32_t*"); qRegisterMetaType<mCoreThread*>("mCoreThread*");

@@ -67,50 +51,15 @@

QApplication::setApplicationName(projectName); QApplication::setApplicationVersion(projectVersion); - if (!m_configController.getQtOption("displayDriver").isNull()) { - Display::setDriver(static_cast<Display::Driver>(m_configController.getQtOption("displayDriver").toInt())); - } - - mArguments args; - mGraphicsOpts graphicsOpts; - mSubParser subparser; - initParserForGraphics(&subparser, &graphicsOpts); - bool loaded = m_configController.parseArguments(&args, argc, argv, &subparser); - if (loaded && args.showHelp) { - usage(argv[0], subparser.usage); - ::exit(0); - return; + if (!m_configController->getQtOption("displayDriver").isNull()) { + Display::setDriver(static_cast<Display::Driver>(m_configController->getQtOption("displayDriver").toInt())); } reloadGameDB(); - if (!m_configController.getQtOption("audioDriver").isNull()) { - AudioProcessor::setDriver(static_cast<AudioProcessor::Driver>(m_configController.getQtOption("audioDriver").toInt())); - } - Window* w = new Window(&m_configController); - connect(w, &Window::destroyed, [this, w]() { - m_windows.removeAll(w); - }); - m_windows.append(w); - - if (loaded) { - w->argumentsPassed(&args); - } else { - w->loadConfig(); - } - freeArguments(&args); - - if (graphicsOpts.multiplier) { - w->resizeFrame(QSize(VIDEO_HORIZONTAL_PIXELS * graphicsOpts.multiplier, VIDEO_VERTICAL_PIXELS * graphicsOpts.multiplier)); - } - if (graphicsOpts.fullscreen) { - w->enterFullScreen(); + if (!m_configController->getQtOption("audioDriver").isNull()) { + AudioProcessor::setDriver(static_cast<AudioProcessor::Driver>(m_configController->getQtOption("audioDriver").toInt())); } - - w->show(); - - w->controller()->setMultiplayerController(&m_multiplayer); - w->multiplayerChanged(); } GBAApp::~GBAApp() {

@@ -132,7 +81,7 @@ Window* GBAApp::newWindow() {

if (m_windows.count() >= MAX_GBAS) { return nullptr; } - Window* w = new Window(&m_configController, m_multiplayer.attached()); + Window* w = new Window(m_configController, m_multiplayer.attached()); int windowId = m_multiplayer.attached(); connect(w, &Window::destroyed, [this, w]() { m_windows.removeAll(w);

@@ -175,10 +124,10 @@

QString GBAApp::getOpenFileName(QWidget* owner, const QString& title, const QString& filter) { QList<Window*> paused; pauseAll(&paused); - QString filename = QFileDialog::getOpenFileName(owner, title, m_configController.getOption("lastDirectory"), filter); + QString filename = QFileDialog::getOpenFileName(owner, title, m_configController->getOption("lastDirectory"), filter); continueAll(paused); if (!filename.isEmpty()) { - m_configController.setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); + m_configController->setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); } return filename; }

@@ -186,10 +135,10 @@

QString GBAApp::getSaveFileName(QWidget* owner, const QString& title, const QString& filter) { QList<Window*> paused; pauseAll(&paused); - QString filename = QFileDialog::getSaveFileName(owner, title, m_configController.getOption("lastDirectory"), filter); + QString filename = QFileDialog::getSaveFileName(owner, title, m_configController->getOption("lastDirectory"), filter); continueAll(paused); if (!filename.isEmpty()) { - m_configController.setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); + m_configController->setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); } return filename; }

@@ -197,10 +146,10 @@

QString GBAApp::getOpenDirectoryName(QWidget* owner, const QString& title) { QList<Window*> paused; pauseAll(&paused); - QString filename = QFileDialog::getExistingDirectory(owner, title, m_configController.getOption("lastDirectory")); + QString filename = QFileDialog::getExistingDirectory(owner, title, m_configController->getOption("lastDirectory")); continueAll(paused); if (!filename.isEmpty()) { - m_configController.setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); + m_configController->setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); } return filename; }
M src/platform/qt/GBAApp.hsrc/platform/qt/GBAApp.h

@@ -10,7 +10,6 @@ #include <QApplication>

#include <QFileDialog> #include <QThread> -#include "ConfigController.h" #include "MultiplayerController.h" struct NoIntroDB;

@@ -21,6 +20,7 @@ mLOG_DECLARE_CATEGORY(QT);

namespace QGBA { +class ConfigController; class GameController; class Window;

@@ -43,7 +43,7 @@ class GBAApp : public QApplication {

Q_OBJECT public: - GBAApp(int& argc, char* argv[]); + GBAApp(int& argc, char* argv[], ConfigController*); ~GBAApp(); static GBAApp* app();

@@ -67,7 +67,7 @@

void pauseAll(QList<Window*>* paused); void continueAll(const QList<Window*>& paused); - ConfigController m_configController; + ConfigController* m_configController; QList<Window*> m_windows; MultiplayerController m_multiplayer;
M src/platform/qt/GameController.cppsrc/platform/qt/GameController.cpp

@@ -9,6 +9,7 @@ #include "AudioProcessor.h"

#include "InputController.h" #include "LogController.h" #include "MultiplayerController.h" +#include "Override.h" #include "VFileDevice.h" #include <QCoreApplication>
M src/platform/qt/library/LibraryController.cppsrc/platform/qt/library/LibraryController.cpp

@@ -5,7 +5,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this

* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "LibraryController.h" -#include "../GBAApp.h" +#include "ConfigController.h" +#include "GBAApp.h" #include "LibraryGrid.h" #include "LibraryTree.h"
M src/platform/qt/main.cppsrc/platform/qt/main.cpp

@@ -7,10 +7,15 @@

// This must be defined before anything else is included. #define SDL_MAIN_HANDLED +#include "ConfigController.h" #include "GBAApp.h" #include "Window.h" #include <mgba/core/version.h> +#include <mgba/internal/gba/video.h> + +#include <QLibraryInfo> +#include <QTranslator> #ifdef QT_STATIC #include <QtPlugin>

@@ -21,12 +26,58 @@ Q_IMPORT_PLUGIN(QWindowsAudioPlugin);

#endif #endif #endif + +using namespace QGBA; int main(int argc, char* argv[]) { #ifdef BUILD_SDL SDL_SetMainReady(); #endif - QGBA::GBAApp application(argc, argv); + + ConfigController configController; + + QLocale locale; + if (!configController.getQtOption("language").isNull()) { + locale = QLocale(configController.getQtOption("language").toString()); + QLocale::setDefault(locale); + } + + mArguments args; + mGraphicsOpts graphicsOpts; + mSubParser subparser; + initParserForGraphics(&subparser, &graphicsOpts); + bool loaded = configController.parseArguments(&args, argc, argv, &subparser); + if (loaded && args.showHelp) { + usage(argv[0], subparser.usage); + return 0; + } + + GBAApp application(argc, argv, &configController); + + QTranslator qtTranslator; + qtTranslator.load(locale, "qt", "_", QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + application.installTranslator(&qtTranslator); + + QTranslator langTranslator; + langTranslator.load(locale, binaryName, "-", ":/translations/"); + application.installTranslator(&langTranslator); + + Window* w = application.newWindow(); + if (loaded) { + w->argumentsPassed(&args); + } else { + w->loadConfig(); + } + freeArguments(&args); + + if (graphicsOpts.multiplier) { + w->resizeFrame(QSize(VIDEO_HORIZONTAL_PIXELS * graphicsOpts.multiplier, VIDEO_VERTICAL_PIXELS * graphicsOpts.multiplier)); + } + if (graphicsOpts.fullscreen) { + w->enterFullScreen(); + } + + w->show(); return application.exec(); }