| 
									
										
										
										
											2017-04-27 20:25:32 +02:00
										 |  |  | // SPDX-License-Identifier: GPL-2.0
 | 
					
						
							| 
									
										
										
										
											2013-04-13 20:44:02 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * models.cpp | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * classes for the equipment models of Subsurface | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-04-04 22:02:03 -07:00
										 |  |  | #include "qt-models/models.h"
 | 
					
						
							| 
									
										
										
										
											2018-06-03 22:15:19 +02:00
										 |  |  | #include "core/qthelper.h"
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:44:39 +02:00
										 |  |  | #include "core/dive.h"
 | 
					
						
							| 
									
										
										
										
											2018-06-17 08:48:54 +02:00
										 |  |  | #include "core/gettextfromc.h"
 | 
					
						
							| 
									
										
										
										
											2015-05-28 18:33:51 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-29 14:19:56 -03:00
										 |  |  | #include <QLocale>
 | 
					
						
							| 
									
										
										
										
											2013-04-24 16:57:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 17:53:42 +02:00
										 |  |  | Qt::ItemFlags GasSelectionModel::flags(const QModelIndex&) const | 
					
						
							| 
									
										
										
										
											2013-11-14 17:39:35 -02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-11-19 18:17:50 -08:00
										 |  |  | 	return Qt::ItemIsEnabled | Qt::ItemIsSelectable; | 
					
						
							| 
									
										
										
										
											2013-11-14 17:39:35 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | GasSelectionModel *GasSelectionModel::instance() | 
					
						
							| 
									
										
										
										
											2013-11-14 17:39:35 -02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-12-20 20:00:26 +01:00
										 |  |  | 	static GasSelectionModel self; | 
					
						
							|  |  |  | 	return &self; | 
					
						
							| 
									
										
										
										
											2013-11-14 17:39:35 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-09 20:51:40 +01:00
										 |  |  | static QStringList getGasList() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QStringList list; | 
					
						
							| 
									
										
										
										
											2019-08-04 18:44:57 +02:00
										 |  |  | 	for (int i = 0; i < displayed_dive.cylinders.nr; i++) { | 
					
						
							| 
									
										
										
										
											2019-08-04 22:13:49 +02:00
										 |  |  | 		const cylinder_t *cyl = get_cylinder(&displayed_dive, i); | 
					
						
							| 
									
										
										
										
											2018-01-09 20:51:40 +01:00
										 |  |  | 		/* Check if we have the same gasmix two or more times
 | 
					
						
							|  |  |  | 		 * If yes return more verbose string */ | 
					
						
							|  |  |  | 		int same_gas = same_gasmix_cylinder(cyl, i, &displayed_dive, true); | 
					
						
							|  |  |  | 		if (same_gas == -1) | 
					
						
							|  |  |  | 			list.push_back(get_gas_string(cyl->gasmix)); | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			list.push_back(get_gas_string(cyl->gasmix) + QString(" (%1 %2 ").arg(GasSelectionModel::tr("cyl.")).arg(i + 1) + | 
					
						
							|  |  |  | 				cyl->type.description + ")"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return list; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-14 17:39:35 -02:00
										 |  |  | void GasSelectionModel::repopulate() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-01-09 20:51:40 +01:00
										 |  |  | 	setStringList(getGasList()); | 
					
						
							| 
									
										
										
										
											2013-11-14 17:39:35 -02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2013-11-14 17:43:28 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | QVariant GasSelectionModel::data(const QModelIndex &index, int role) const | 
					
						
							| 
									
										
										
										
											2013-11-14 17:43:28 -02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2014-01-16 11:50:56 +07:00
										 |  |  | 	if (role == Qt::FontRole) { | 
					
						
							| 
									
										
										
										
											2013-11-14 17:43:28 -02:00
										 |  |  | 		return defaultModelFont(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return QStringListModel::data(index, role); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-05-08 17:26:48 +02:00
										 |  |  | // Dive Type Model for the divetype combo box
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 17:53:42 +02:00
										 |  |  | Qt::ItemFlags DiveTypeSelectionModel::flags(const QModelIndex&) const | 
					
						
							| 
									
										
										
										
											2018-05-08 17:26:48 +02:00
										 |  |  | { | 
					
						
							|  |  |  | 	return Qt::ItemIsEnabled | Qt::ItemIsSelectable; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DiveTypeSelectionModel *DiveTypeSelectionModel::instance() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	static DiveTypeSelectionModel self; | 
					
						
							|  |  |  | 	return &self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void DiveTypeSelectionModel::repopulate() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QStringList modes = QStringList(); | 
					
						
							|  |  |  | 	for (int i = 0; i < FREEDIVE; i++) | 
					
						
							| 
									
										
										
										
											2018-06-17 17:55:47 +02:00
										 |  |  | 		modes.append(gettextFromC::tr(divemode_text_ui[i])); | 
					
						
							| 
									
										
										
										
											2018-05-08 17:26:48 +02:00
										 |  |  | 	setStringList(modes); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QVariant DiveTypeSelectionModel::data(const QModelIndex &index, int role) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (role == Qt::FontRole) { | 
					
						
							|  |  |  | 		return defaultModelFont(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return QStringListModel::data(index, role); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-06 14:29:38 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Language Model, The Model to populate the list of possible Languages.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | LanguageModel *LanguageModel::instance() | 
					
						
							| 
									
										
										
										
											2013-12-06 14:29:38 -02:00
										 |  |  | { | 
					
						
							|  |  |  | 	static LanguageModel *self = new LanguageModel(); | 
					
						
							|  |  |  | 	QLocale l; | 
					
						
							|  |  |  | 	return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | LanguageModel::LanguageModel(QObject *parent) : QAbstractListModel(parent) | 
					
						
							| 
									
										
										
										
											2013-12-06 14:29:38 -02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-12-06 18:30:05 -02:00
										 |  |  | 	QDir d(getSubsurfaceDataPath("translations")); | 
					
						
							| 
									
										
										
										
											2014-07-15 14:43:20 -03:00
										 |  |  | 	Q_FOREACH (const QString &s, d.entryList()) { | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 		if (s.startsWith("subsurface_") && s.endsWith(".qm")) { | 
					
						
							|  |  |  | 			languages.push_back((s == "subsurface_source.qm") ? "English" : s); | 
					
						
							| 
									
										
										
										
											2013-12-06 14:29:38 -02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | QVariant LanguageModel::data(const QModelIndex &index, int role) const | 
					
						
							| 
									
										
										
										
											2013-12-06 14:29:38 -02:00
										 |  |  | { | 
					
						
							|  |  |  | 	QLocale loc; | 
					
						
							| 
									
										
										
										
											2013-12-06 17:48:38 -02:00
										 |  |  | 	QString currentString = languages.at(index.row()); | 
					
						
							| 
									
										
										
										
											2014-01-16 11:50:56 +07:00
										 |  |  | 	if (!index.isValid()) | 
					
						
							| 
									
										
										
										
											2013-12-06 14:29:38 -02:00
										 |  |  | 		return QVariant(); | 
					
						
							| 
									
										
										
										
											2014-01-16 11:50:56 +07:00
										 |  |  | 	switch (role) { | 
					
						
							| 
									
										
										
										
											2014-02-12 06:18:15 -08:00
										 |  |  | 	case Qt::DisplayRole: { | 
					
						
							| 
									
										
										
										
											2016-09-20 12:47:31 -07:00
										 |  |  | 		QLocale l(currentString.remove("subsurface_").remove(".qm")); | 
					
						
							| 
									
										
										
										
											2014-02-12 06:18:15 -08:00
										 |  |  | 		return currentString == "English" ? currentString : QString("%1 (%2)").arg(l.languageToString(l.language())).arg(l.countryToString(l.country())); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	case Qt::UserRole: | 
					
						
							| 
									
										
										
										
											2016-09-20 12:47:31 -07:00
										 |  |  | 		return currentString == "English" ? "en_US" : currentString.remove("subsurface_").remove(".qm"); | 
					
						
							| 
									
										
										
										
											2013-12-06 14:29:38 -02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return QVariant(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 17:53:42 +02:00
										 |  |  | int LanguageModel::rowCount(const QModelIndex&) const | 
					
						
							| 
									
										
										
										
											2013-12-06 14:29:38 -02:00
										 |  |  | { | 
					
						
							|  |  |  | 	return languages.count(); | 
					
						
							|  |  |  | } |