Skip to content

Commit

Permalink
Qt: Fix translation initialization (fixes #776)
Browse files Browse the repository at this point in the history
  • Loading branch information
endrift committed Jul 6, 2017
1 parent 26e9894 commit ff59804
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 70 deletions.
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ Bugfixes:
- 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
Expand Down
79 changes: 14 additions & 65 deletions src/platform/qt/GBAApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "GBAApp.h"

#include "AudioProcessor.h"
#include "ConfigController.h"
#include "Display.h"
#include "GameController.h"
#include "Window.h"
Expand All @@ -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>

Expand All @@ -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;

Expand All @@ -45,72 +44,22 @@ GBAApp::GBAApp(int& argc, char* argv[])
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*");

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()));
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();
}

w->show();

w->controller()->setMultiplayerController(&m_multiplayer);
w->multiplayerChanged();
}

GBAApp::~GBAApp() {
Expand All @@ -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);
Expand Down Expand Up @@ -175,32 +124,32 @@ void GBAApp::continueAll(const QList<Window*>& paused) {
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;
}

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;
}

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;
}
Expand Down
6 changes: 3 additions & 3 deletions src/platform/qt/GBAApp.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
#include <QFileDialog>
#include <QThread>

#include "ConfigController.h"
#include "MultiplayerController.h"

struct NoIntroDB;
Expand All @@ -21,6 +20,7 @@ mLOG_DECLARE_CATEGORY(QT);

namespace QGBA {

class ConfigController;
class GameController;
class Window;

Expand All @@ -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();

Expand All @@ -67,7 +67,7 @@ Q_OBJECT
void pauseAll(QList<Window*>* paused);
void continueAll(const QList<Window*>& paused);

ConfigController m_configController;
ConfigController* m_configController;
QList<Window*> m_windows;
MultiplayerController m_multiplayer;

Expand Down
1 change: 1 addition & 0 deletions src/platform/qt/GameController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "InputController.h"
#include "LogController.h"
#include "MultiplayerController.h"
#include "Override.h"
#include "VFileDevice.h"

#include <QCoreApplication>
Expand Down
3 changes: 2 additions & 1 deletion src/platform/qt/library/LibraryController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
* 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"

Expand Down
53 changes: 52 additions & 1 deletion src/platform/qt/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -22,11 +27,57 @@ Q_IMPORT_PLUGIN(QWindowsAudioPlugin);
#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();
}

0 comments on commit ff59804

Please sign in to comment.