| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | #include "DiveObjectHelper.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QDateTime>
 | 
					
						
							|  |  |  | #include <QTextDocument>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "../qthelper.h"
 | 
					
						
							|  |  |  | #include "../helpers.h"
 | 
					
						
							| 
									
										
										
										
											2016-08-30 16:24:19 +02:00
										 |  |  | #include "../../qt-models/tankinfomodel.h"
 | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-15 04:44:12 -07:00
										 |  |  | static QString EMPTY_DIVE_STRING = QStringLiteral(""); | 
					
						
							| 
									
										
										
										
											2016-02-09 17:19:06 +01:00
										 |  |  | enum returnPressureSelector {START_PRESSURE, END_PRESSURE}; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  | static QString getFormattedWeight(struct dive *dive, unsigned int idx) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 06:14:45 -08:00
										 |  |  | 	weightsystem_t *weight = &dive->weightsystem[idx]; | 
					
						
							|  |  |  | 	if (!weight->description) | 
					
						
							|  |  |  | 		return QString(EMPTY_DIVE_STRING); | 
					
						
							|  |  |  | 	QString fmt = QString(weight->description); | 
					
						
							|  |  |  | 	fmt += ", " + get_weight_string(weight->weight, true); | 
					
						
							|  |  |  | 	return fmt; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static QString getFormattedCylinder(struct dive *dive, unsigned int idx) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 06:14:45 -08:00
										 |  |  | 	cylinder_t *cyl = &dive->cylinder[idx]; | 
					
						
							|  |  |  | 	const char *desc = cyl->type.description; | 
					
						
							|  |  |  | 	if (!desc && idx > 0) | 
					
						
							|  |  |  | 		return QString(EMPTY_DIVE_STRING); | 
					
						
							|  |  |  | 	QString fmt = desc ? QString(desc) : QObject::tr("unknown"); | 
					
						
							| 
									
										
											  
											
												Don't use "get_volume_string()" for cylinder size string
We had two totally different usage cases for "get_volume_string()": one
that did the obvious "show this volume as a string", and one that tried
to show a cylinder size.
The function used a magic third argument (the working pressure of the
cylinder) to distinguish between the two cases, but it still got it
wrong.
A metric cylinder doesn't necessarily have a working pressure at all,
and the size is a wet size in liters.  We'd pass in zero as the working
pressure, and if the volume units were set to cubic feet, the logic in
"get_volume_string()" would happily convert the metric wet size into the
wet size in cubic feet.
But that's completely wrong.  An imperial cylinder size simply isn't a
wet size.  If you don't have a working pressure, you cannot convert the
cylinder size to cubic feet.  End of story.
So instead of having "get_volume_string()" have magical behavior
depending on working pressure, and getting it wrong anyway, just make
get_volume_string do a pure volume conversion, and create a whole new
function for showing the size of a cylinder.
Now, if the cylinder doesn't have a working pressure, we just show the
metric size, even if the user had asked for cubic feet.
[Dirk Hohndel: added call to translation functions for the units]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
											
										 
											2016-02-24 14:42:56 -08:00
										 |  |  | 	fmt += ", " + get_volume_string(cyl->type.size, true); | 
					
						
							| 
									
										
										
										
											2016-01-11 06:14:45 -08:00
										 |  |  | 	fmt += ", " + get_pressure_string(cyl->type.workingpressure, true); | 
					
						
							|  |  |  | 	fmt += ", " + get_pressure_string(cyl->start, false) + " - " + get_pressure_string(cyl->end, true); | 
					
						
							|  |  |  | 	fmt += ", " + get_gas_string(cyl->gasmix); | 
					
						
							|  |  |  | 	return fmt; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-09 17:19:06 +01:00
										 |  |  | static QString getPressures(struct dive *dive, enum returnPressureSelector ret) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	cylinder_t *cyl = &dive->cylinder[0]; | 
					
						
							|  |  |  | 	QString fmt; | 
					
						
							| 
									
										
										
										
											2016-03-03 13:16:12 -08:00
										 |  |  | 	if (ret == START_PRESSURE) { | 
					
						
							| 
									
										
										
										
											2016-02-14 17:33:18 +02:00
										 |  |  | 		if (cyl->start.mbar) | 
					
						
							|  |  |  | 			fmt = get_pressure_string(cyl->start, true); | 
					
						
							|  |  |  | 		else if (cyl->sample_start.mbar) | 
					
						
							|  |  |  | 			fmt = get_pressure_string(cyl->sample_start, true); | 
					
						
							| 
									
										
										
										
											2016-03-03 13:16:12 -08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if (ret == END_PRESSURE) { | 
					
						
							| 
									
										
										
										
											2016-02-14 17:33:18 +02:00
										 |  |  | 		if (cyl->end.mbar) | 
					
						
							|  |  |  | 			fmt = get_pressure_string(cyl->end, true); | 
					
						
							|  |  |  | 		else if(cyl->sample_end.mbar) | 
					
						
							|  |  |  | 			fmt = get_pressure_string(cyl->sample_end, true); | 
					
						
							| 
									
										
										
										
											2016-03-03 13:16:12 -08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-09 17:19:06 +01:00
										 |  |  | 	return fmt; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-11 15:02:13 -02:00
										 |  |  | DiveObjectHelper::DiveObjectHelper(struct dive *d) : | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | 	m_dive(d) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-07-31 22:27:07 +01:00
										 |  |  | 	m_cyls.clear(); | 
					
						
							|  |  |  | 	for (int i = 0; i < MAX_CYLINDERS; i++) { | 
					
						
							|  |  |  | 		//Don't add blank cylinders, only those that have been defined.
 | 
					
						
							|  |  |  | 		if (m_dive->cylinder[i].type.description) | 
					
						
							|  |  |  | 			m_cyls.append(new CylinderObjectHelper(&m_dive->cylinder[i])); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DiveObjectHelper::~DiveObjectHelper() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-07-31 22:27:07 +01:00
										 |  |  | while (!m_cyls.isEmpty()) | 
					
						
							| 
									
										
										
										
											2016-09-04 10:27:56 -07:00
										 |  |  | 	delete m_cyls.takeFirst(); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int DiveObjectHelper::number() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:02:13 -02:00
										 |  |  | 	return m_dive->number; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int DiveObjectHelper::id() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:04:21 -02:00
										 |  |  | 	return m_dive->id; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::date() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-04-28 16:31:37 -07:00
										 |  |  | 	QDateTime localTime = QDateTime::fromMSecsSinceEpoch(1000*m_dive->when, Qt::UTC); | 
					
						
							| 
									
										
										
										
											2016-01-11 16:40:10 -02:00
										 |  |  | 	localTime.setTimeSpec(Qt::UTC); | 
					
						
							|  |  |  | 	return localTime.date().toString(prefs.date_format); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | timestamp_t DiveObjectHelper::timestamp() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:34:53 -02:00
										 |  |  | 	return m_dive->when; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::time() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-04-28 16:31:37 -07:00
										 |  |  | 	QDateTime localTime = QDateTime::fromMSecsSinceEpoch(1000*m_dive->when, Qt::UTC); | 
					
						
							| 
									
										
										
										
											2016-01-11 16:40:10 -02:00
										 |  |  | 	localTime.setTimeSpec(Qt::UTC); | 
					
						
							|  |  |  | 	return localTime.time().toString(prefs.time_format); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::location() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:35:21 -02:00
										 |  |  | 	return get_dive_location(m_dive) ? QString::fromUtf8(get_dive_location(m_dive)) : EMPTY_DIVE_STRING; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::gps() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:13:23 -02:00
										 |  |  | 	struct dive_site *ds = get_dive_site_by_uuid(m_dive->dive_site_uuid); | 
					
						
							|  |  |  | 	return ds ? QString(printGPSCoords(ds->latitude.udeg, ds->longitude.udeg)) : QString(); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | QString DiveObjectHelper::duration() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:36:12 -02:00
										 |  |  | 	return get_dive_duration_string(m_dive->duration.seconds, QObject::tr("h:"), QObject::tr("min")); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-14 16:26:37 -08:00
										 |  |  | bool DiveObjectHelper::noDive() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return m_dive->duration.seconds == 0 && m_dive->dc.duration.seconds == 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | QString DiveObjectHelper::depth() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:36:12 -02:00
										 |  |  | 	return get_depth_string(m_dive->dc.maxdepth.mm, true, true); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::divemaster() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:39:04 -02:00
										 |  |  | 	return m_dive->divemaster ? m_dive->divemaster : EMPTY_DIVE_STRING; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::buddy() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:40:10 -02:00
										 |  |  | 	return m_dive->buddy ? m_dive->buddy : EMPTY_DIVE_STRING; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::airTemp() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:40:10 -02:00
										 |  |  | 	QString temp = get_temperature_string(m_dive->airtemp, true); | 
					
						
							|  |  |  | 	if (temp.isEmpty()) { | 
					
						
							|  |  |  | 		temp = EMPTY_DIVE_STRING; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return temp; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::waterTemp() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:46:30 -02:00
										 |  |  | 	QString temp = get_temperature_string(m_dive->watertemp, true); | 
					
						
							|  |  |  | 	if (temp.isEmpty()) { | 
					
						
							|  |  |  | 		temp = EMPTY_DIVE_STRING; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return temp; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::notes() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:04:46 -02:00
										 |  |  | 	QString tmp = m_dive->notes ? QString::fromUtf8(m_dive->notes) : EMPTY_DIVE_STRING; | 
					
						
							|  |  |  | 	if (same_string(m_dive->dc.model, "planned dive")) { | 
					
						
							|  |  |  | 		QTextDocument notes; | 
					
						
							|  |  |  | 	#define _NOTES_BR "\n"
 | 
					
						
							|  |  |  | 		tmp.replace("<thead>", "<thead>" _NOTES_BR) | 
					
						
							|  |  |  | 			.replace("<br>", "<br>" _NOTES_BR) | 
					
						
							|  |  |  | 			.replace("<tr>", "<tr>" _NOTES_BR) | 
					
						
							|  |  |  | 			.replace("</tr>", "</tr>" _NOTES_BR); | 
					
						
							|  |  |  | 		notes.setHtml(tmp); | 
					
						
							|  |  |  | 		tmp = notes.toPlainText(); | 
					
						
							|  |  |  | 		tmp.replace(_NOTES_BR, "<br>"); | 
					
						
							|  |  |  | 	#undef _NOTES_BR
 | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		tmp.replace("\n", "<br>"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return tmp; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::tags() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:29:49 -02:00
										 |  |  | 	static char buffer[256]; | 
					
						
							|  |  |  | 	taglist_get_tagstring(m_dive->tag_list, buffer, 256); | 
					
						
							|  |  |  | 	return QString(buffer); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::gas() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:37:10 -02:00
										 |  |  | 	/*WARNING: here should be the gastlist, returned
 | 
					
						
							|  |  |  | 	 * from the get_gas_string function or this is correct? | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	QString gas, gases; | 
					
						
							|  |  |  | 	for (int i = 0; i < MAX_CYLINDERS; i++) { | 
					
						
							|  |  |  | 		if (!is_cylinder_used(m_dive, i)) | 
					
						
							|  |  |  | 			continue; | 
					
						
							|  |  |  | 		gas = m_dive->cylinder[i].type.description; | 
					
						
							|  |  |  | 		if (!gas.isEmpty()) | 
					
						
							|  |  |  | 			gas += QChar(' '); | 
					
						
							|  |  |  | 		gas += gasname(&m_dive->cylinder[i].gasmix); | 
					
						
							|  |  |  | 		// if has a description and if such gas is not already present
 | 
					
						
							|  |  |  | 		if (!gas.isEmpty() && gases.indexOf(gas) == -1) { | 
					
						
							|  |  |  | 			if (!gases.isEmpty()) | 
					
						
							|  |  |  | 				gases += QString(" / "); | 
					
						
							|  |  |  | 			gases += gas; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return gases; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::sac() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:16:48 -02:00
										 |  |  | 	if (!m_dive->sac) | 
					
						
							|  |  |  | 		return QString(); | 
					
						
							|  |  |  | 	const char *unit; | 
					
						
							|  |  |  | 	int decimal; | 
					
						
							|  |  |  | 	double value = get_volume_units(m_dive->sac, &decimal, &unit); | 
					
						
							| 
									
										
										
										
											2016-01-21 12:41:40 -08:00
										 |  |  | 	return QString::number(value, 'f', decimal).append(unit); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-29 16:42:07 +02:00
										 |  |  | QString DiveObjectHelper::weightList() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QString weights; | 
					
						
							|  |  |  | 	for (int i = 0; i < MAX_WEIGHTSYSTEMS; i++) { | 
					
						
							|  |  |  | 		QString w = getFormattedWeight(m_dive, i); | 
					
						
							|  |  |  | 		if (w == EMPTY_DIVE_STRING) | 
					
						
							|  |  |  | 			continue; | 
					
						
							|  |  |  | 		weights += w + "; "; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return weights; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | QStringList DiveObjectHelper::weights() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:48:46 -02:00
										 |  |  | 	QStringList weights; | 
					
						
							| 
									
										
										
										
											2016-07-19 06:55:21 +01:00
										 |  |  | 	for (int i = 0; i < MAX_WEIGHTSYSTEMS; i++) { | 
					
						
							|  |  |  | 		QString w = getFormattedWeight(m_dive, i); | 
					
						
							|  |  |  | 		if (w == EMPTY_DIVE_STRING) | 
					
						
							|  |  |  | 			continue; | 
					
						
							|  |  |  | 		weights << w; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-11 16:48:46 -02:00
										 |  |  | 	return weights; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-05 22:53:12 -08:00
										 |  |  | bool DiveObjectHelper::singleWeight() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return weightsystem_none(&m_dive->weightsystem[1]); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | QString DiveObjectHelper::weight(int idx) const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:48:46 -02:00
										 |  |  | 	if ( (idx < 0) || idx > MAX_WEIGHTSYSTEMS ) | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | 		return QString(EMPTY_DIVE_STRING); | 
					
						
							| 
									
										
										
										
											2016-01-11 16:48:46 -02:00
										 |  |  | 	return getFormattedWeight(m_dive, idx); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::suit() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:49:06 -02:00
										 |  |  | 	return m_dive->suit ? m_dive->suit : EMPTY_DIVE_STRING; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-30 16:24:19 +02:00
										 |  |  | QStringList DiveObjectHelper::cylinderList() const | 
					
						
							| 
									
										
										
										
											2016-02-29 16:42:07 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-08-30 16:24:19 +02:00
										 |  |  | 	QStringList cylinders; | 
					
						
							|  |  |  | 	struct dive *d; | 
					
						
							|  |  |  | 	int i = 0; | 
					
						
							|  |  |  | 	for_each_dive (i, d) { | 
					
						
							|  |  |  | 		for (int j = 0; j < MAX_CYLINDERS; j++) { | 
					
						
							|  |  |  | 			QString cyl = d->cylinder[j].type.description; | 
					
						
							|  |  |  | 			if (cyl == EMPTY_DIVE_STRING) | 
					
						
							|  |  |  | 				continue; | 
					
						
							|  |  |  | 			cylinders << cyl; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-04 10:27:56 -07:00
										 |  |  | 	for (unsigned long ti = 0; ti < sizeof(tank_info) && tank_info[ti].name != NULL; ti++) { | 
					
						
							|  |  |  | 		QString cyl = tank_info[ti].name; | 
					
						
							| 
									
										
										
										
											2016-02-29 16:42:07 +02:00
										 |  |  | 		if (cyl == EMPTY_DIVE_STRING) | 
					
						
							|  |  |  | 			continue; | 
					
						
							| 
									
										
										
										
											2016-08-30 16:24:19 +02:00
										 |  |  | 		cylinders << cyl; | 
					
						
							| 
									
										
										
										
											2016-02-29 16:42:07 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-08-30 16:24:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	cylinders.removeDuplicates(); | 
					
						
							|  |  |  | 	cylinders.sort(); | 
					
						
							| 
									
										
										
										
											2016-02-29 16:42:07 +02:00
										 |  |  | 	return cylinders; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | QStringList DiveObjectHelper::cylinders() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:48:46 -02:00
										 |  |  | 	QStringList cylinders; | 
					
						
							| 
									
										
										
										
											2016-07-19 00:06:10 +01:00
										 |  |  | 	for (int i = 0; i < MAX_CYLINDERS; i++) { | 
					
						
							|  |  |  | 		QString cyl = getFormattedCylinder(m_dive, i); | 
					
						
							|  |  |  | 		if (cyl == EMPTY_DIVE_STRING) | 
					
						
							|  |  |  | 			continue; | 
					
						
							|  |  |  | 		cylinders << cyl; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-11 16:48:46 -02:00
										 |  |  | 	return cylinders; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::cylinder(int idx) const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 16:48:46 -02:00
										 |  |  | 	if ( (idx < 0) || idx > MAX_CYLINDERS) | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | 		return QString(EMPTY_DIVE_STRING); | 
					
						
							| 
									
										
										
										
											2016-01-11 16:48:46 -02:00
										 |  |  | 	return getFormattedCylinder(m_dive, idx); | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-31 22:27:07 +01:00
										 |  |  | QList<CylinderObjectHelper*> DiveObjectHelper::cylinderObjects() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return m_cyls; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | QString DiveObjectHelper::trip() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:49:06 -02:00
										 |  |  | 	return m_dive->divetrip ? m_dive->divetrip->location : EMPTY_DIVE_STRING; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-05 12:27:51 -07:00
										 |  |  | // combine the pointer address with the trip title so that
 | 
					
						
							|  |  |  | // we detect multiple, destinct trips with the same title
 | 
					
						
							|  |  |  | // the trip title is designed to be
 | 
					
						
							|  |  |  | // location (# dives)
 | 
					
						
							|  |  |  | // or, if there is no location name
 | 
					
						
							|  |  |  | // date range (# dives)
 | 
					
						
							|  |  |  | // where the date range is given as "month year" or "month-month year" or "month year - month year"
 | 
					
						
							| 
									
										
										
										
											2016-01-26 20:06:30 -08:00
										 |  |  | QString DiveObjectHelper::tripMeta() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QString ret = EMPTY_DIVE_STRING; | 
					
						
							| 
									
										
										
										
											2016-04-05 12:27:51 -07:00
										 |  |  | 	struct dive_trip *dt = m_dive->divetrip; | 
					
						
							|  |  |  | 	if (dt) { | 
					
						
							|  |  |  | 		QString numDives = tr("%1 dive(s)").arg(dt->nrdives); | 
					
						
							|  |  |  | 		QString title(dt->location); | 
					
						
							|  |  |  | 		if (title.isEmpty()) { | 
					
						
							|  |  |  | 			// so use the date range
 | 
					
						
							| 
									
										
										
										
											2016-04-28 16:31:37 -07:00
										 |  |  | 			QDateTime firstTime = QDateTime::fromMSecsSinceEpoch(1000*dt->when, Qt::UTC); | 
					
						
							|  |  |  | 			QString firstMonth = firstTime.toString("MMM"); | 
					
						
							|  |  |  | 			QString firstYear = firstTime.toString("yyyy"); | 
					
						
							|  |  |  | 			QDateTime lastTime = QDateTime::fromMSecsSinceEpoch(1000*dt->dives->when, Qt::UTC); | 
					
						
							|  |  |  | 			QString lastMonth = lastTime.toString("MMM"); | 
					
						
							|  |  |  | 			QString lastYear = lastTime.toString("yyyy"); | 
					
						
							| 
									
										
										
										
											2016-04-05 12:27:51 -07:00
										 |  |  | 			if (lastMonth == firstMonth && lastYear == firstYear) | 
					
						
							|  |  |  | 				title = firstMonth + " " + firstYear; | 
					
						
							|  |  |  | 			else if (lastMonth != firstMonth && lastYear == firstYear) | 
					
						
							|  |  |  | 				title = firstMonth + "-" + lastMonth + " " + firstYear; | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				title = firstMonth + " " + firstYear + " - " + lastMonth + " " + lastYear; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		ret = QString::number((quint64)m_dive->divetrip, 16) + QLatin1Literal("::") + QStringLiteral("%1 (%2)").arg(title, numDives); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-26 20:06:30 -08:00
										 |  |  | 	return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-18 23:08:27 +01:00
										 |  |  | int DiveObjectHelper::maxcns() const | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-07-18 23:08:27 +01:00
										 |  |  | 	return m_dive->maxcns; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-18 23:08:27 +01:00
										 |  |  | int DiveObjectHelper::otu() const | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-07-18 23:08:27 +01:00
										 |  |  | 	return m_dive->otu; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int DiveObjectHelper::rating() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-01-11 15:05:07 -02:00
										 |  |  | 	return m_dive->rating; | 
					
						
							| 
									
										
										
										
											2016-01-07 16:01:24 -02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-01-27 18:34:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-16 09:59:05 +01:00
										 |  |  | int DiveObjectHelper::visibility() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return m_dive->visibility; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-27 18:34:34 +01:00
										 |  |  | QString DiveObjectHelper::sumWeight() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-02-05 22:52:30 -08:00
										 |  |  | 	weight_t sum = { 0 }; | 
					
						
							| 
									
										
										
										
											2016-01-27 18:34:34 +01:00
										 |  |  | 	for (int i = 0; i < MAX_WEIGHTSYSTEMS; i++){ | 
					
						
							| 
									
										
										
										
											2016-02-05 22:52:30 -08:00
										 |  |  | 		sum.grams += m_dive->weightsystem[i].weight.grams; | 
					
						
							| 
									
										
										
										
											2016-01-27 18:34:34 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-05 22:52:30 -08:00
										 |  |  | 	return get_weight_string(sum, true); | 
					
						
							| 
									
										
										
										
											2016-01-27 18:34:34 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::getCylinder() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-08-29 21:35:06 +02:00
										 |  |  | 	QString getCylinder = m_dive->cylinder[0].type.description; | 
					
						
							| 
									
										
										
										
											2016-01-27 18:34:34 +01:00
										 |  |  | 	return getCylinder; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-02-09 17:19:06 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::startPressure() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QString startPressure = getPressures(m_dive, START_PRESSURE); | 
					
						
							|  |  |  | 	return startPressure; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::endPressure() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QString endPressure = getPressures(m_dive, END_PRESSURE); | 
					
						
							|  |  |  | 	return endPressure; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-02-13 18:34:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | QString DiveObjectHelper::firstGas() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QString gas; | 
					
						
							|  |  |  | 	gas = get_gas_string(m_dive->cylinder[0].gasmix); | 
					
						
							|  |  |  | 	return gas; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-05-16 19:59:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | QStringList DiveObjectHelper::suitList() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QStringList suits; | 
					
						
							|  |  |  | 	struct dive *d; | 
					
						
							|  |  |  | 	int i = 0; | 
					
						
							|  |  |  | 	for_each_dive (i, d) { | 
					
						
							|  |  |  | 		QString temp = d->suit; | 
					
						
							|  |  |  | 		if (!temp.isEmpty()) | 
					
						
							|  |  |  | 			suits << d->suit; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-05-16 19:59:05 +02:00
										 |  |  | 	suits.removeDuplicates(); | 
					
						
							|  |  |  | 	suits.sort(); | 
					
						
							|  |  |  | 	return suits; | 
					
						
							| 
									
										
										
										
											2016-05-16 19:59:04 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QStringList DiveObjectHelper::buddyList() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QStringList buddies; | 
					
						
							|  |  |  | 	struct dive *d; | 
					
						
							|  |  |  | 	int i = 0; | 
					
						
							|  |  |  | 	for_each_dive (i, d) { | 
					
						
							|  |  |  | 		QString temp = d->buddy; | 
					
						
							|  |  |  | 		if (!temp.isEmpty() && !temp.contains(",")){ | 
					
						
							|  |  |  | 			buddies << d->buddy; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else if (!temp.isEmpty()){ | 
					
						
							|  |  |  | 			QRegExp sep("(,\\s)"); | 
					
						
							|  |  |  | 			QStringList tempList = temp.split(sep); | 
					
						
							|  |  |  | 			buddies << tempList; | 
					
						
							| 
									
										
										
										
											2016-09-12 20:30:07 +02:00
										 |  |  | 			buddies << "Multiple Buddies"; | 
					
						
							| 
									
										
										
										
											2016-05-16 19:59:04 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-05-16 19:59:05 +02:00
										 |  |  | 	buddies.removeDuplicates(); | 
					
						
							|  |  |  | 	buddies.sort(); | 
					
						
							|  |  |  | 	return buddies; | 
					
						
							| 
									
										
										
										
											2016-05-16 19:59:04 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QStringList DiveObjectHelper::divemasterList() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	QStringList divemasters; | 
					
						
							|  |  |  | 	struct dive *d; | 
					
						
							|  |  |  | 	int i = 0; | 
					
						
							|  |  |  | 	for_each_dive (i, d) { | 
					
						
							|  |  |  | 		QString temp = d->divemaster; | 
					
						
							|  |  |  | 		if (!temp.isEmpty()) | 
					
						
							|  |  |  | 			divemasters << d->divemaster; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-05-16 19:59:05 +02:00
										 |  |  | 	divemasters.removeDuplicates(); | 
					
						
							|  |  |  | 	divemasters.sort(); | 
					
						
							|  |  |  | 	return divemasters; | 
					
						
							| 
									
										
										
										
											2016-05-16 19:59:04 +02:00
										 |  |  | } |