What's missing for 4.2?

Anton Lundin glance at acc.umu.se
Tue Jun 10 15:30:22 PDT 2014


On 10 June, 2014 - Anton Lundin wrote:

> On 10 June, 2014 - Dirk Hohndel wrote:
> 
> > 
> > As discussed, part of this was implemented.
> > The part that's missing seems a tiny bit too user specific.
> > Breaking this down as "volume of air" + "volume of O₂" + "volume of He" is
> > of course possible, but I'm not sure a lot of people would have any use
> > for that data.
> > I could see maybe adding this as a tooltip... still not sure.
> >
> 
> I would actually like such a feature. We usually by 50L bottles of He
> and O2 and mix our gases ourself and when its time to split the bill its
> kinda good to verify that what got written into the gas fill log is
> somewhat close to what i actually logged i used.
> 
> I'm currently trying to produce a poc of how this could look.
> 

Quite ugly thing but it kinda works. You hopefully get the idea.

//Anton

-- 
Anton Lundin	+46702-161604
-------------- next part --------------
diff --git i/helpers.h w/helpers.h
index 392dcb5..36ceb1e 100644
--- i/helpers.h
+++ w/helpers.h
@@ -33,7 +33,7 @@ QString get_dive_date_string(timestamp_t when);
 QString get_short_dive_date_string(timestamp_t when);
 QString get_trip_date_string(timestamp_t when, int nr);
 QString uiLanguage(QLocale *callerLoc);
-void selectedDivesGasUsed(QVector<QPair<QString, int> > &gasUsed);
+void selectedDivesGasUsed(QVector<QPair<struct gasmix*, int> > &gasUsed);
 
 #define M_OR_FT(_m, _f) ((prefs.units.length == units::METERS) ? ((_m) * 1000) : (feet_to_mm(_f)))
 
diff --git i/qt-ui/maintab.cpp w/qt-ui/maintab.cpp
index ae2876b..770fcb4 100644
--- i/qt-ui/maintab.cpp
+++ w/qt-ui/maintab.cpp
@@ -531,18 +531,37 @@ void MainTab::updateDiveInfo(int dive)
 		ui.timeLimits->setMaximum(get_time_string(stats_selection.longest_time.seconds, 0));
 		ui.timeLimits->setMinimum(get_time_string(stats_selection.shortest_time.seconds, 0));
 		// now let's get some gas use statistics
-		QVector<QPair<QString, int> > gasUsed;
+		QVector<QPair<struct gasmix*, int> > gasUsed;
 		QString gasUsedString;
-		QPair<QString, int> topGases[20] = { };
-		volume_t vol;
+		QPair<struct gasmix*, int> topGases[20] = { };
 		selectedDivesGasUsed(gasUsed);
+		volume_t vol;
+		volume_t he = {}, o2 = {};
+		struct gasmix *mix;
+		QPair<struct gasmix*, int> gasPair;
+		foreach (gasPair, gasUsed) {
+			mix = gasPair.first;
+			vol.mliter = gasPair.second;
+			//Really naive gas computations here, but it gives the picture
+			if (gasmix_is_air(mix))
+				continue;
+			if (get_he(mix) != 0) {
+				o2.mliter += (get_he(mix) * get_o2(mix) * vol.mliter) / 1000000;
+				he.mliter += (get_he(mix) * vol.mliter) / 1000;
+			} else if (get_o2(mix) == 1000) {
+				o2.mliter += vol.mliter;
+			} else
+				o2.mliter += ((get_o2(mix) - O2_IN_AIR) * vol.mliter) / 1000;
+		}
+		gasUsedString.append(QString("He: %1, O2: %2\n").arg(get_volume_string(he, true)).arg(get_volume_string(o2, true)));
 		for (int j = 0; j < 20; j++) {
 			if (gasUsed.isEmpty())
 				break;
-			QPair<QString, int> gasPair = gasUsed.last();
+			gasPair = gasUsed.last();
 			gasUsed.pop_back();
+			mix = gasPair.first;
 			vol.mliter = gasPair.second;
-			gasUsedString.append(gasPair.first).append(": ").append(get_volume_string(vol, true)).append("\n");
+			gasUsedString.append(gasname(mix)).append(": ").append(get_volume_string(vol, true)).append("\n");
 		}
 		if (!gasUsed.isEmpty())
 			gasUsedString.append("...");
diff --git i/qthelper.cpp w/qthelper.cpp
index 8b7b396..0150df2 100644
--- i/qthelper.cpp
+++ w/qthelper.cpp
@@ -282,17 +282,18 @@ extern "C" void picture_load_exif_data(struct picture *p, timestamp_t *timestamp
 		return;
 }
 
-static bool lessThan(const QPair<QString, int> &a, const QPair<QString, int> &b)
+static bool lessThan(const QPair<struct gasmix*, int> &a, const QPair<struct gasmix*, int> &b)
 {
 	return a.second < b.second;
 }
 
-void selectedDivesGasUsed(QVector<QPair<QString, int> > &gasUsedOrdered)
+void selectedDivesGasUsed(QVector<QPair<struct gasmix*, int> > &gasUsedOrdered)
 {
 	int i, j;
 	struct dive *d;
-	QString gas;
-	QMap<QString, int> gasUsed;
+	struct gasmix *gas;
+	QMap<struct gasmix*, int> gasUsed;
+	QMap<QString, struct gasmix*> gasFolder;
 	for_each_dive (i, d) {
 		if (!d->selected)
 			continue;
@@ -301,11 +302,14 @@ void selectedDivesGasUsed(QVector<QPair<QString, int> > &gasUsedOrdered)
 		for (j = 0; j < MAX_CYLINDERS; j++)
 			if (diveGases[j].mliter) {
 				QString gasName = gasname(&d->cylinder[j].gasmix);
-				gasUsed[gasName] += diveGases[j].mliter;
+				if (!gasFolder.contains(gasName))
+					gasFolder[gasName] = &d->cylinder[j].gasmix;
+				gas = gasFolder[gasName];
+				gasUsed[gas] += diveGases[j].mliter;
 			}
 	}
 	Q_FOREACH(gas, gasUsed.keys()) {
-		gasUsedOrdered.append(QPair<QString, int>(gas, gasUsed[gas]));
+		gasUsedOrdered.append(QPair<struct gasmix*, int>(gas, gasUsed[gas]));
 	}
 	qSort(gasUsedOrdered.begin(), gasUsedOrdered.end(), lessThan);
 }


More information about the subsurface mailing list