| 
									
										
										
										
											2017-04-27 20:26:05 +02:00
										 |  |  | // SPDX-License-Identifier: GPL-2.0
 | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | #include "preferences_language.h"
 | 
					
						
							| 
									
										
										
										
											2018-01-01 20:23:40 +01:00
										 |  |  | #include "ui_preferences_language.h"
 | 
					
						
							| 
									
										
										
										
											2018-06-03 22:15:19 +02:00
										 |  |  | #include "core/qthelper.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-15 11:50:53 +02:00
										 |  |  | #include "core/settings/qPrefLanguage.h"
 | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <QApplication>
 | 
					
						
							|  |  |  | #include <QMessageBox>
 | 
					
						
							| 
									
										
										
										
											2015-09-17 18:08:24 -03:00
										 |  |  | #include <QSortFilterProxyModel>
 | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-17 18:08:24 -03:00
										 |  |  | #include "qt-models/models.h"
 | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-29 10:57:08 +01:00
										 |  |  | PreferencesLanguage::PreferencesLanguage() : AbstractPreferencesWidget(tr("Language"), QIcon(":preferences-desktop-locale-icon"), 4) | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | { | 
					
						
							|  |  |  | 	ui = new Ui::PreferencesLanguage(); | 
					
						
							|  |  |  | 	ui->setupUi(this); | 
					
						
							| 
									
										
										
										
											2015-09-17 18:08:24 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	QSortFilterProxyModel *filterModel = new QSortFilterProxyModel(); | 
					
						
							|  |  |  | 	filterModel->setSourceModel(LanguageModel::instance()); | 
					
						
							|  |  |  | 	filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); | 
					
						
							| 
									
										
										
										
											2015-10-30 13:14:06 -07:00
										 |  |  | 	ui->languageDropdown->setModel(filterModel); | 
					
						
							| 
									
										
										
										
											2015-09-17 18:08:24 -03:00
										 |  |  | 	filterModel->sort(0); | 
					
						
							|  |  |  | 	connect(ui->languageFilter, &QLineEdit::textChanged, | 
					
						
							|  |  |  | 			filterModel, &QSortFilterProxyModel::setFilterFixedString); | 
					
						
							| 
									
										
										
										
											2017-11-10 16:52:12 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dateFormatShortMap.insert("MM/dd/yyyy", "M/d/yy"); | 
					
						
							|  |  |  | 	dateFormatShortMap.insert("dd.MM.yyyy", "d.M.yy"); | 
					
						
							|  |  |  | 	dateFormatShortMap.insert("yyyy-MM-dd", "yy-M-d"); | 
					
						
							|  |  |  | 	foreach (QString format, dateFormatShortMap.keys()) | 
					
						
							|  |  |  | 		ui->dateFormatEntry->addItem(format); | 
					
						
							|  |  |  | 	connect(ui->dateFormatEntry, SIGNAL(currentIndexChanged(const QString&)), | 
					
						
							|  |  |  | 		this, SLOT(dateFormatChanged(const QString&))); | 
					
						
							| 
									
										
										
										
											2017-11-10 17:28:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	ui->timeFormatEntry->addItem("hh:mm"); | 
					
						
							|  |  |  | 	ui->timeFormatEntry->addItem("h:mm AP"); | 
					
						
							|  |  |  | 	ui->timeFormatEntry->addItem("hh:mm AP"); | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PreferencesLanguage::~PreferencesLanguage() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	delete ui; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-10 16:52:12 +02:00
										 |  |  | void PreferencesLanguage::dateFormatChanged(const QString &text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	ui->shortDateFormatEntry->setText(dateFormatShortMap.value(text)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | void PreferencesLanguage::refreshSettings() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-08-10 12:42:18 -03:00
										 |  |  | 	ui->languageSystemDefault->setChecked(prefs.locale.use_system_language); | 
					
						
							|  |  |  | 	ui->timeFormatSystemDefault->setChecked(!prefs.time_format_override); | 
					
						
							|  |  |  | 	ui->dateFormatSystemDefault->setChecked(!prefs.date_format_override); | 
					
						
							| 
									
										
										
										
											2017-11-10 17:28:09 +02:00
										 |  |  | 	ui->timeFormatEntry->setCurrentText(prefs.time_format); | 
					
						
							| 
									
										
										
										
											2017-11-10 16:52:12 +02:00
										 |  |  | 	ui->dateFormatEntry->setCurrentText(prefs.date_format); | 
					
						
							| 
									
										
										
										
											2016-08-10 12:42:18 -03:00
										 |  |  | 	ui->shortDateFormatEntry->setText(prefs.date_format_short); | 
					
						
							| 
									
										
										
										
											2015-10-30 13:14:06 -07:00
										 |  |  | 	QAbstractItemModel *m = ui->languageDropdown->model(); | 
					
						
							| 
									
										
										
										
											2016-09-20 12:42:59 -07:00
										 |  |  | 	QModelIndexList languages = m->match(m->index(0, 0), Qt::UserRole, QString(prefs.locale.lang_locale).replace("-", "_")); | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | 	if (languages.count()) | 
					
						
							| 
									
										
										
										
											2015-10-30 13:14:06 -07:00
										 |  |  | 		ui->languageDropdown->setCurrentIndex(languages.first().row()); | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-27 22:13:33 -03:00
										 |  |  | #include <QDebug>
 | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | void PreferencesLanguage::syncSettings() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-08-10 12:48:19 -03:00
										 |  |  | 	bool useSystemLang = prefs.locale.use_system_language; | 
					
						
							| 
									
										
										
										
											2016-08-27 22:13:33 -03:00
										 |  |  | 	QString currentText = ui->languageDropdown->currentText(); | 
					
						
							| 
									
										
										
										
											2016-08-10 12:48:19 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | 	if (useSystemLang != ui->languageSystemDefault->isChecked() || | 
					
						
							| 
									
										
										
										
											2016-08-10 12:48:19 -03:00
										 |  |  | 		(!useSystemLang && currentText != prefs.locale.language)) { | 
					
						
							| 
									
										
										
										
											2017-09-16 10:38:21 +02:00
										 |  |  | 		// remove the googlemaps cache folder on language change
 | 
					
						
							| 
									
										
										
										
											2017-09-02 15:28:40 +03:00
										 |  |  | 		QDir googlecachedir(QString(system_default_directory()).append("/googlemaps")); | 
					
						
							|  |  |  | 		googlecachedir.removeRecursively(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-17 15:58:26 -03:00
										 |  |  | 		QMessageBox::warning(this, tr("Restart required"), | 
					
						
							|  |  |  | 			tr("To correctly load a new language you must restart Subsurface.")); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-09-20 12:44:26 -07:00
										 |  |  | 	QAbstractItemModel *m = ui->languageDropdown->model(); | 
					
						
							|  |  |  | 	QModelIndexList languages = m->match(m->index(0, 0), Qt::DisplayRole, currentText); | 
					
						
							|  |  |  | 	QString currentLocale; | 
					
						
							|  |  |  | 	if (languages.count()) | 
					
						
							|  |  |  | 		currentLocale = m->data(languages.first(),Qt::UserRole).toString(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-15 11:50:53 +02:00
										 |  |  | 	qPrefLanguage::set_language(currentText); | 
					
						
							|  |  |  | 	qPrefLanguage::set_lang_locale(currentLocale); | 
					
						
							|  |  |  | 	qPrefLanguage::set_use_system_language(ui->languageSystemDefault->isChecked()); | 
					
						
							|  |  |  | 	qPrefLanguage::set_time_format_override(!ui->timeFormatSystemDefault->isChecked()); | 
					
						
							|  |  |  | 	qPrefLanguage::set_date_format_override(!ui->dateFormatSystemDefault->isChecked()); | 
					
						
							|  |  |  | 	qPrefLanguage::set_time_format(ui->timeFormatEntry->currentText()); | 
					
						
							|  |  |  | 	qPrefLanguage::set_date_format(ui->dateFormatEntry->currentText()); | 
					
						
							|  |  |  | 	qPrefLanguage::set_date_format_short(ui->shortDateFormatEntry->text()); | 
					
						
							| 
									
										
										
										
											2015-11-02 12:50:17 -08:00
										 |  |  | 	uiLanguage(NULL); | 
					
						
							| 
									
										
										
										
											2016-10-22 23:38:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-10 16:56:54 +02:00
										 |  |  | 	QString qDateTimeWeb = tr("These will be used as is. This might not be what you intended.\nSee http://doc.qt.io/qt-5/qdatetime.html#toString"); | 
					
						
							| 
									
										
										
										
											2016-10-22 23:38:23 +02:00
										 |  |  | 	QRegExp tfillegalchars("[^hHmszaApPt\\s:;\\.,]"); | 
					
						
							| 
									
										
										
										
											2017-11-10 17:28:09 +02:00
										 |  |  | 	if (tfillegalchars.indexIn(ui->timeFormatEntry->currentText()) >= 0) | 
					
						
							| 
									
										
										
										
											2016-10-22 23:38:23 +02:00
										 |  |  | 		QMessageBox::warning(this, tr("Literal characters"), | 
					
						
							| 
									
										
										
										
											2017-11-10 16:56:54 +02:00
										 |  |  | 			tr("Non-special character(s) in time format.\n") + qDateTimeWeb); | 
					
						
							| 
									
										
										
										
											2016-10-22 23:38:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-10 16:52:12 +02:00
										 |  |  | 	QRegExp dfillegalchars("[^dMy/\\s:;\\.,\\-]"); | 
					
						
							|  |  |  | 	if (dfillegalchars.indexIn(ui->dateFormatEntry->currentText()) >= 0 || | 
					
						
							| 
									
										
										
										
											2016-10-22 23:38:23 +02:00
										 |  |  | 	    dfillegalchars.indexIn(ui->shortDateFormatEntry->text()) >= 0) | 
					
						
							|  |  |  | 		QMessageBox::warning(this, tr("Literal characters"), | 
					
						
							| 
									
										
										
										
											2017-11-10 16:56:54 +02:00
										 |  |  | 			tr("Non-special character(s) in date format.\n") + qDateTimeWeb); | 
					
						
							| 
									
										
										
										
											2015-10-30 13:14:06 -07:00
										 |  |  | } |