summaryrefslogtreecommitdiffstats
path: root/subsurface-core/subsurface-qt/DiveObjectHelper.cpp
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@intel.com>2016-01-07 16:01:24 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-01-08 08:04:44 -0800
commit25aa80846b84c0b3cd3e0b0256a046e1e92fb1db (patch)
treec9934f39f2e039e5877af7ee0d3b0d96c5a1debf /subsurface-core/subsurface-qt/DiveObjectHelper.cpp
parentc022f5c4f71f3e7670ed458d714d96fd6e88c55b (diff)
downloadsubsurface-25aa80846b84c0b3cd3e0b0256a046e1e92fb1db.tar.gz
Move Dive class from qthelper.h/cpp to it's own file
and rename it to DiveObjectHelper, since it should be an QObject based class to make it easier on the QML, grantlee and widgets side to display the dive's internal data. each Q_PROPERTY defined in the DiveObjectHelper.h file can be acessed directly via it's name. So, if you are on a model that returns a dive, acess it's name by dive.name Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'subsurface-core/subsurface-qt/DiveObjectHelper.cpp')
-rw-r--r--subsurface-core/subsurface-qt/DiveObjectHelper.cpp263
1 files changed, 263 insertions, 0 deletions
diff --git a/subsurface-core/subsurface-qt/DiveObjectHelper.cpp b/subsurface-core/subsurface-qt/DiveObjectHelper.cpp
new file mode 100644
index 000000000..03e63786a
--- /dev/null
+++ b/subsurface-core/subsurface-qt/DiveObjectHelper.cpp
@@ -0,0 +1,263 @@
+#include "DiveObjectHelper.h"
+
+#include <QDateTime>
+#include <QTextDocument>
+
+#include "../qthelper.h"
+#include "../helpers.h"
+
+static QString EMPTY_DIVE_STRING = QStringLiteral("--");
+
+
+static QString getFormattedWeight(struct dive *dive, unsigned int idx)
+{
+ 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;
+}
+
+static QString getFormattedCylinder(struct dive *dive, unsigned int idx)
+{
+ 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");
+ fmt += ", " + get_volume_string(cyl->type.size, true, 0);
+ 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;
+}
+
+DiveObjectHelper::DiveObjectHelper(struct dive *d) :
+ m_number(d->number),
+ m_id(d->id),
+ m_rating(d->rating),
+ m_timestamp(d->when),
+ m_location(get_dive_location(d) ? QString::fromUtf8(get_dive_location(d)) : EMPTY_DIVE_STRING),
+ m_duration(get_dive_duration_string(d->duration.seconds, QObject::tr("h:"), QObject::tr("min"))),
+ m_depth(get_depth_string(d->dc.maxdepth.mm, true, true)),
+ m_divemaster(d->divemaster ? d->divemaster : EMPTY_DIVE_STRING),
+ m_buddy(d->buddy ? d->buddy : EMPTY_DIVE_STRING),
+ m_airTemp(get_temperature_string(d->airtemp, true)),
+ m_waterTemp(get_temperature_string(d->watertemp, true)),
+ m_suit(d->suit ? d->suit : EMPTY_DIVE_STRING),
+ m_trip(d->divetrip ? d->divetrip->location : EMPTY_DIVE_STRING),
+ m_maxcns(d->maxcns),
+ m_otu(d->otu),
+ m_dive(d)
+{
+ struct dive_site *ds = get_dive_site_by_uuid(d->dive_site_uuid);
+ if (ds)
+ m_gps = QString("%1,%2").arg(ds->latitude.udeg / 1000000.0).arg(ds->longitude.udeg / 1000000.0);
+
+ if (m_airTemp.isEmpty()) {
+ m_airTemp = EMPTY_DIVE_STRING;
+ }
+ if (m_waterTemp.isEmpty()) {
+ m_waterTemp = EMPTY_DIVE_STRING;
+ }
+
+ m_notes = QString::fromUtf8(d->notes);
+ if (m_notes.isEmpty()) {
+ m_notes = EMPTY_DIVE_STRING;
+ return;
+ }
+ if (same_string(d->dc.model, "planned dive")) {
+ QTextDocument notes;
+ QString notesFormatted = m_notes;
+ #define _NOTES_BR "&#92n"
+ notesFormatted = notesFormatted.replace("<thead>", "<thead>" _NOTES_BR);
+ notesFormatted = notesFormatted.replace("<br>", "<br>" _NOTES_BR);
+ notesFormatted = notesFormatted.replace("<tr>", "<tr>" _NOTES_BR);
+ notesFormatted = notesFormatted.replace("</tr>", "</tr>" _NOTES_BR);
+ notes.setHtml(notesFormatted);
+ m_notes = notes.toPlainText();
+ m_notes.replace(_NOTES_BR, "<br>");
+ #undef _NOTES_BR
+ } else {
+ m_notes.replace("\n", "<br>");
+ }
+
+
+ char buffer[256];
+ taglist_get_tagstring(d->tag_list, buffer, 256);
+ m_tags = QString(buffer);
+
+
+ int added = 0;
+ QString gas, gases;
+ for (int i = 0; i < MAX_CYLINDERS; i++) {
+ if (!is_cylinder_used(d, i))
+ continue;
+ gas = d->cylinder[i].type.description;
+ gas += QString(!gas.isEmpty() ? " " : "") + gasname(&d->cylinder[i].gasmix);
+ // if has a description and if such gas is not already present
+ if (!gas.isEmpty() && gases.indexOf(gas) == -1) {
+ if (added > 0)
+ gases += QString(" / ");
+ gases += gas;
+ added++;
+ }
+ }
+ m_gas = gases;
+
+ if (d->sac) {
+ const char *unit;
+ int decimal;
+ double value = get_volume_units(d->sac, &decimal, &unit);
+ m_sac = QString::number(value, 'f', decimal).append(unit);
+ }
+
+ for (int i = 0; i < MAX_CYLINDERS; i++)
+ m_cylinders << getFormattedCylinder(d, i);
+
+ for (int i = 0; i < MAX_WEIGHTSYSTEMS; i++)
+ m_weights << getFormattedWeight(d, i);
+
+ QDateTime localTime = QDateTime::fromTime_t(d->when - gettimezoneoffset(d->when));
+ localTime.setTimeSpec(Qt::UTC);
+ m_date = localTime.date().toString(prefs.date_format);
+ m_time = localTime.time().toString(prefs.time_format);
+}
+
+DiveObjectHelper::~DiveObjectHelper()
+{
+}
+
+int DiveObjectHelper::number() const
+{
+ return m_number;
+}
+
+int DiveObjectHelper::id() const
+{
+ return m_id;
+}
+
+QString DiveObjectHelper::date() const
+{
+ return m_date;
+}
+
+timestamp_t DiveObjectHelper::timestamp() const
+{
+ return m_timestamp;
+}
+
+QString DiveObjectHelper::time() const
+{
+ return m_time;
+}
+
+QString DiveObjectHelper::location() const
+{
+ return m_location;
+}
+
+QString DiveObjectHelper::gps() const
+{
+ return m_gps;
+}
+QString DiveObjectHelper::duration() const
+{
+ return m_duration;
+}
+
+QString DiveObjectHelper::depth() const
+{
+ return m_depth;
+}
+
+QString DiveObjectHelper::divemaster() const
+{
+ return m_divemaster;
+}
+
+QString DiveObjectHelper::buddy() const
+{
+ return m_buddy;
+}
+
+QString DiveObjectHelper::airTemp() const
+{
+ return m_airTemp;
+}
+
+QString DiveObjectHelper::waterTemp() const
+{
+ return m_waterTemp;
+}
+
+QString DiveObjectHelper::notes() const
+{
+ return m_notes;
+}
+
+QString DiveObjectHelper::tags() const
+{
+ return m_tags;
+}
+
+QString DiveObjectHelper::gas() const
+{
+ return m_gas;
+}
+
+QString DiveObjectHelper::sac() const
+{
+ return m_sac;
+}
+
+QStringList DiveObjectHelper::weights() const
+{
+return m_weights;
+}
+
+QString DiveObjectHelper::weight(int idx) const
+{
+ if (idx < 0 || idx > m_weights.size() - 1)
+ return QString(EMPTY_DIVE_STRING);
+ return m_weights.at(idx);
+}
+
+QString DiveObjectHelper::suit() const
+{
+ return m_suit;
+}
+
+QStringList DiveObjectHelper::cylinders() const
+{
+ return m_cylinders;
+}
+
+QString DiveObjectHelper::cylinder(int idx) const
+{
+ if (idx < 0 || idx > m_cylinders.size() - 1)
+ return QString(EMPTY_DIVE_STRING);
+ return m_cylinders.at(idx);
+}
+
+QString DiveObjectHelper::trip() const
+{
+ return m_trip;
+}
+
+QString DiveObjectHelper::maxcns() const
+{
+ return m_maxcns;
+}
+
+QString DiveObjectHelper::otu() const
+{
+ return m_otu;
+}
+
+int DiveObjectHelper::rating() const
+{
+ return m_rating;
+}