diff options
Diffstat (limited to 'ui/qt/main_window_preferences_frame.cpp')
-rw-r--r-- | ui/qt/main_window_preferences_frame.cpp | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/ui/qt/main_window_preferences_frame.cpp b/ui/qt/main_window_preferences_frame.cpp index fca0479835..db4f5cabad 100644 --- a/ui/qt/main_window_preferences_frame.cpp +++ b/ui/qt/main_window_preferences_frame.cpp @@ -19,10 +19,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "wireshark_application.h" #include "main_window_preferences_frame.h" +#include "qt_ui_utils.h" + #include "ui_main_window_preferences_frame.h" +#include "ui/language.h" #include <epan/prefs-int.h> +#include <wsutil/filesystem.h> #include <QFileDialog> #include <QDebug> @@ -45,7 +50,6 @@ MainWindowPreferencesFrame::MainWindowPreferencesFrame(QWidget *parent) : pref_auto_scroll_percentage_ = prefFromPrefPtr(&prefs.gui_auto_scroll_percentage); pref_toolbar_main_style_ = prefFromPrefPtr(&prefs.gui_toolbar_main_style); pref_toolbar_filter_style_ = prefFromPrefPtr(&prefs.gui_toolbar_filter_style); - pref_qt_language_ = prefFromPrefPtr(&prefs.gui_qt_language); QStyleOption style_opt; QString indent_ss = QString( @@ -64,6 +68,44 @@ MainWindowPreferencesFrame::MainWindowPreferencesFrame(QWidget *parent) : ui->maxFilterLineEdit->setMaximumWidth(num_entry_width); ui->maxRecentLineEdit->setMaximumWidth(num_entry_width); ui->autoScrollPercentageLineEdit->setMaximumWidth(num_entry_width); + + QString globalLanguagesPath(QString(get_datafile_dir()) + "/languages/"); + QString userLanguagesPath(gchar_free_to_qstring(get_persconffile_path("languages/", FALSE))); + + + + QStringList filenames = QDir(":/i18n/").entryList(QStringList("wireshark_*.qm")); + filenames += QDir(globalLanguagesPath).entryList(QStringList("wireshark_*.qm")); + filenames += QDir(userLanguagesPath).entryList(QStringList("wireshark_*.qm")); + + for (int i = 0; i < filenames.size(); i += 1) { + QString locale; + locale = filenames[i]; + locale.truncate(locale.lastIndexOf('.')); + locale.remove(0, locale.indexOf('_') + 1); + + QString lang = QLocale::languageToString(QLocale(locale).language()); + QIcon ico = QIcon(); + if (QFile::exists(QString(":/languages/%1.svg").arg(locale))) + ico.addFile(QString(":/languages/%1.svg").arg(locale)); + if (QFile::exists(globalLanguagesPath + locale + ".svg")) + ico.addFile(globalLanguagesPath + locale + ".svg"); + if (QFile::exists(userLanguagesPath + locale + ".svg")) + ico.addFile(userLanguagesPath + locale + ".svg"); + + ui->languageComboBox->addItem(ico, lang, locale); + } + + ui->languageComboBox->setItemData(0, "auto"); + ui->languageComboBox->model()->sort(0); + + for (int i = 0; i < ui->languageComboBox->count(); i += 1) { + if (QString(language) == ui->languageComboBox->itemData(i).toString()) { + ui->languageComboBox->setCurrentIndex(i); + break; + } + } + } MainWindowPreferencesFrame::~MainWindowPreferencesFrame() @@ -102,7 +144,14 @@ void MainWindowPreferencesFrame::updateWidgets() ui->mainToolbarComboBox->setCurrentIndex(pref_toolbar_main_style_->stashed_val.enumval); ui->filterToolbarComboBox->setCurrentIndex(pref_toolbar_filter_style_->stashed_val.enumval); - ui->languageComboBox->setCurrentIndex(pref_qt_language_->stashed_val.enumval); + + QStringList filenames = QDir(":/i18n/").entryList(QStringList("wireshark_*.qm")); + for (int i = 0; i < ui->languageComboBox->count(); i += 1) { + if (QString(language) == ui->languageComboBox->itemData(i).toString()) { + ui->languageComboBox->setCurrentIndex(i); + break; + } + } } void MainWindowPreferencesFrame::on_geometryCheckBox_toggled(bool checked) @@ -186,7 +235,10 @@ void MainWindowPreferencesFrame::on_filterToolbarComboBox_currentIndexChanged(in void MainWindowPreferencesFrame::on_languageComboBox_currentIndexChanged(int index) { - pref_qt_language_->stashed_val.enumval = index; + if (language) + delete language; + + language = strdup(ui->languageComboBox->itemData(index).toString().toStdString().c_str()); } /* |