From 4ed70b7bea23bbdf8565ee55b090fa3750361de4 Mon Sep 17 00:00:00 2001 From: LoRd_MuldeR Date: Sun, 14 Oct 2012 22:21:57 +0200 Subject: [PATCH] If a QM file is used instead of a built-in translation, the QM file will now be remembered. Also the translation system can now be re-initialized by pressing CTRL+F5 in the Main window. --- gui/MainWindow.ui | 5 +- src/Config.h | 2 +- src/Dialog_MainWindow.cpp | 138 +++++++++++++++++++++++++------------- src/Dialog_MainWindow.h | 1 + src/Model_Settings.cpp | 12 ++++ src/Model_Settings.h | 1 + 6 files changed, 110 insertions(+), 49 deletions(-) diff --git a/gui/MainWindow.ui b/gui/MainWindow.ui index 13596dca..236a593d 100644 --- a/gui/MainWindow.ui +++ b/gui/MainWindow.ui @@ -1398,7 +1398,7 @@ 0 0 607 - 1677 + 1668 @@ -4385,6 +4385,9 @@ + + true + :/icons/folder_page.png:/icons/folder_page.png diff --git a/src/Config.h b/src/Config.h index 3ce9d561..c39bc191 100644 --- a/src/Config.h +++ b/src/Config.h @@ -30,7 +30,7 @@ #define VER_LAMEXP_MINOR_LO 6 #define VER_LAMEXP_TYPE Beta #define VER_LAMEXP_PATCH 2 -#define VER_LAMEXP_BUILD 1145 +#define VER_LAMEXP_BUILD 1148 /////////////////////////////////////////////////////////////////////////////// // Tool versions (minimum expected versions!) diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp index cccd16d8..abd1a66c 100644 --- a/src/Dialog_MainWindow.cpp +++ b/src/Dialog_MainWindow.cpp @@ -503,12 +503,14 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S currentLanguage->setText(lamexp_translation_name(langId)); currentLanguage->setIcon(QIcon(QString(":/flags/%1.png").arg(langId))); currentLanguage->setCheckable(true); + currentLanguage->setChecked(false); m_languageActionGroup->addAction(currentLanguage); menuLanguage->insertAction(actionLoadTranslationFromFile, currentLanguage); } menuLanguage->insertSeparator(actionLoadTranslationFromFile); connect(actionLoadTranslationFromFile, SIGNAL(triggered(bool)), this, SLOT(languageFromFileActionActivated(bool))); connect(m_languageActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(languageActionActivated(QAction*))); + actionLoadTranslationFromFile->setChecked(false); //Activate tools menu actions actionDisableUpdateReminder->setChecked(!m_settings->autoUpdateEnabled()); @@ -577,17 +579,8 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S connect(m_delayedFileTimer, SIGNAL(timeout()), this, SLOT(handleDelayedFiles())); m_messageHandler->start(); - //Load translation file - QList languageActions = m_languageActionGroup->actions(); - while(!languageActions.isEmpty()) - { - QAction *currentLanguage = languageActions.takeFirst(); - if(currentLanguage->data().toString().compare(m_settings->currentLanguage(), Qt::CaseInsensitive) == 0) - { - currentLanguage->setChecked(true); - languageActionActivated(currentLanguage); - } - } + //Load translation + initializeTranslation(); //Re-translate (make sure we translate once) QEvent languageChangeEvent(QEvent::LanguageChange); @@ -657,29 +650,6 @@ void MainWindow::addFiles(const QStringList &files) tabWidget->setCurrentIndex(0); - //int timeMT = 0, timeST = 0; - // - //--Prepass-- - // - //FileAnalyzer_ST *analyzerPre = new FileAnalyzer_ST(files); - //connect(analyzerPre, SIGNAL(fileSelected(QString)), m_banner, SLOT(setText(QString)), Qt::QueuedConnection); - //connect(analyzerPre, SIGNAL(progressValChanged(unsigned int)), m_banner, SLOT(setProgressVal(unsigned int)), Qt::QueuedConnection); - //connect(analyzerPre, SIGNAL(progressMaxChanged(unsigned int)), m_banner, SLOT(setProgressMax(unsigned int)), Qt::QueuedConnection); - //connect(analyzerPre, SIGNAL(fileAnalyzed(AudioFileModel)), m_fileListModel, SLOT(addFile(AudioFileModel)), Qt::QueuedConnection); - //connect(m_banner, SIGNAL(userAbort()), analyzerPre, SLOT(abortProcess()), Qt::DirectConnection); - // - //try - //{ - // m_fileListModel->setBlockUpdates(true); - // m_banner->show(tr("Adding file(s), please wait..."), analyzerPre); - //} - //catch(...) - //{ - // /* ignore any exceptions that may occur */ - //} - // - //--MT-- - FileAnalyzer *analyzer = new FileAnalyzer(files); connect(analyzer, SIGNAL(fileSelected(QString)), m_banner, SLOT(setText(QString)), Qt::QueuedConnection); connect(analyzer, SIGNAL(progressValChanged(unsigned int)), m_banner, SLOT(setProgressVal(unsigned int)), Qt::QueuedConnection); @@ -724,9 +694,6 @@ void MainWindow::addFiles(const QStringList &files) } LAMEXP_DELETE(analyzer); - //LAMEXP_DELETE(analyzerST); - //LAMEXP_DELETE(analyzerPre); - m_banner->close(); } @@ -807,6 +774,9 @@ bool MainWindow::checkForUpdates(void) return bReadyToInstall; } +/* + * Refresh list of favorites + */ void MainWindow::refreshFavorites(void) { QList folderList = m_outputFolderFavoritesMenu->actions(); @@ -837,6 +807,68 @@ void MainWindow::refreshFavorites(void) } } +/* + * Initilaize translation + */ +void MainWindow::initializeTranslation(void) +{ + bool translationLoaded = false; + + //Try to load "external" translation file + if(!m_settings->currentLanguageFile().isEmpty()) + { + const QString qmFilePath = QFileInfo(m_settings->currentLanguageFile()).canonicalFilePath(); + if(QFileInfo(qmFilePath).exists() && QFileInfo(qmFilePath).isFile() && (QFileInfo(qmFilePath).suffix().compare("qm", Qt::CaseInsensitive) == 0)) + { + if(lamexp_install_translator_from_file(qmFilePath)) + { + QList actions = m_languageActionGroup->actions(); + while(!actions.isEmpty()) actions.takeFirst()->setChecked(false); + actionLoadTranslationFromFile->setChecked(true); + translationLoaded = true; + } + } + } + + //Try to load "built-in" translation file + if(!translationLoaded) + { + QList languageActions = m_languageActionGroup->actions(); + while(!languageActions.isEmpty()) + { + QAction *currentLanguage = languageActions.takeFirst(); + if(currentLanguage->data().toString().compare(m_settings->currentLanguage(), Qt::CaseInsensitive) == 0) + { + currentLanguage->setChecked(true); + languageActionActivated(currentLanguage); + translationLoaded = true; + } + } + } + + //Fallback to default translation + if(!translationLoaded) + { + QList languageActions = m_languageActionGroup->actions(); + while(!languageActions.isEmpty()) + { + QAction *currentLanguage = languageActions.takeFirst(); + if(currentLanguage->data().toString().compare(LAMEXP_DEFAULT_LANGID, Qt::CaseInsensitive) == 0) + { + currentLanguage->setChecked(true); + languageActionActivated(currentLanguage); + translationLoaded = true; + } + } + } + + //Make sure we loaded some translation + if(!translationLoaded) + { + qFatal("Failed to load any translation, this is NOT supposed to happen!"); + } +} + //////////////////////////////////////////////////////////// // EVENTS //////////////////////////////////////////////////////////// @@ -1044,15 +1076,6 @@ void MainWindow::resizeEvent(QResizeEvent *event) */ void MainWindow::keyPressEvent(QKeyEvent *e) { - if(e->key() == Qt::Key_F5) - { - if(outputFolderView->isVisible()) - { - QTimer::singleShot(0, this, SLOT(refreshFolderContextActionTriggered())); - return; - } - } - if(e->key() == Qt::Key_Delete) { if(sourceFileView->isVisible()) @@ -1062,6 +1085,22 @@ void MainWindow::keyPressEvent(QKeyEvent *e) } } + if(e->modifiers().testFlag(Qt::ControlModifier) && (e->key() == Qt::Key_F5)) + { + initializeTranslation(); + MessageBeep(MB_ICONINFORMATION); + return; + } + + if(e->key() == Qt::Key_F5) + { + if(outputFolderView->isVisible()) + { + QTimer::singleShot(0, this, SLOT(refreshFolderContextActionTriggered())); + return; + } + } + QMainWindow::keyPressEvent(e); } @@ -1678,7 +1717,9 @@ void MainWindow::languageActionActivated(QAction *action) if(lamexp_install_translator(langId)) { action->setChecked(true); + actionLoadTranslationFromFile->setChecked(false); m_settings->currentLanguage(langId); + m_settings->currentLanguageFile(QString()); } } } @@ -1695,13 +1736,16 @@ void MainWindow::languageFromFileActionActivated(bool checked) if(dialog.exec()) { QStringList selectedFiles = dialog.selectedFiles(); - if(lamexp_install_translator_from_file(selectedFiles.first())) + const QString qmFile = QFileInfo(selectedFiles.first()).canonicalFilePath(); + if(lamexp_install_translator_from_file(qmFile)) { QList actions = m_languageActionGroup->actions(); while(!actions.isEmpty()) { actions.takeFirst()->setChecked(false); } + actionLoadTranslationFromFile->setChecked(true); + m_settings->currentLanguageFile(qmFile); } else { diff --git a/src/Dialog_MainWindow.h b/src/Dialog_MainWindow.h index 39e914af..33ad7783 100644 --- a/src/Dialog_MainWindow.h +++ b/src/Dialog_MainWindow.h @@ -171,6 +171,7 @@ private: void addFiles(const QStringList &files); void addFolder(const QString &path, bool recursive = false, bool delayed = false); bool checkForUpdates(void); + void initializeTranslation(void); void refreshFavorites(void); bool m_accepted; diff --git a/src/Model_Settings.cpp b/src/Model_Settings.cpp index 6bcbc34d..5de3b6bf 100644 --- a/src/Model_Settings.cpp +++ b/src/Model_Settings.cpp @@ -88,6 +88,7 @@ LAMEXP_MAKE_ID(antivirNotificationsEnabled, "Flags/EnableAntivirusNotifications" LAMEXP_MAKE_ID(dropBoxWidgetEnabled, "Flags/EnableDropBoxWidget"); LAMEXP_MAKE_ID(shellIntegrationEnabled, "Flags/EnableShellIntegration"); LAMEXP_MAKE_ID(currentLanguage, "Localization/Language"); +LAMEXP_MAKE_ID(currentLanguageFile, "Localization/UseQMFile"); LAMEXP_MAKE_ID(lameAlgoQuality, "AdvancedOptions/LAME/AlgorithmQuality"); LAMEXP_MAKE_ID(lameChannelMode, "AdvancedOptions/LAME/ChannelMode"); LAMEXP_MAKE_ID(forceStereoDownmix, "AdvancedOptions/StereoDownmix/Force"); @@ -250,6 +251,16 @@ void SettingsModel::validate(void) this->outputDir(musicLocation.isEmpty() ? QDesktopServices::storageLocation(QDesktopServices::HomeLocation) : musicLocation); } + if(!this->currentLanguageFile().isEmpty()) + { + const QString qmPath = QFileInfo(this->currentLanguageFile()).canonicalFilePath(); + if(!(QFileInfo(qmPath).exists() && QFileInfo(qmPath).isFile() && (QFileInfo(qmPath).suffix().compare("qm", Qt::CaseInsensitive) == 0))) + { + qWarning("Current language file \"%s\" missing, reverting to built-in translator!", qmPath.toUtf8().constData()); + this->currentLanguageFile(QString()); + } + } + if(!lamexp_query_translations().contains(this->currentLanguage(), Qt::CaseInsensitive)) { qWarning("Current language \"%s\" is unknown, reverting to default language!", this->currentLanguage().toLatin1().constData()); @@ -375,6 +386,7 @@ LAMEXP_MAKE_OPTION_B(antivirNotificationsEnabled, true) LAMEXP_MAKE_OPTION_B(dropBoxWidgetEnabled, true) LAMEXP_MAKE_OPTION_B(shellIntegrationEnabled, !lamexp_portable_mode()) LAMEXP_MAKE_OPTION_S(currentLanguage, defaultLanguage()) +LAMEXP_MAKE_OPTION_S(currentLanguageFile, QString()) LAMEXP_MAKE_OPTION_I(lameAlgoQuality, 3) LAMEXP_MAKE_OPTION_I(lameChannelMode, 0) LAMEXP_MAKE_OPTION_B(forceStereoDownmix, false) diff --git a/src/Model_Settings.h b/src/Model_Settings.h index 89ad6c72..1b27f1a1 100644 --- a/src/Model_Settings.h +++ b/src/Model_Settings.h @@ -99,6 +99,7 @@ public: LAMEXP_MAKE_OPTION_B(dropBoxWidgetEnabled); LAMEXP_MAKE_OPTION_B(shellIntegrationEnabled); LAMEXP_MAKE_OPTION_S(currentLanguage); + LAMEXP_MAKE_OPTION_S(currentLanguageFile); LAMEXP_MAKE_OPTION_I(lameAlgoQuality); LAMEXP_MAKE_OPTION_I(lameChannelMode); LAMEXP_MAKE_OPTION_B(forceStereoDownmix);