summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-08-22 19:40:42 +0200
committerGravatar bstoeger <32835590+bstoeger@users.noreply.github.com>2019-09-14 13:20:59 +0200
commit718c07c1a864ae307306fc54d3a8ba38e30bf759 (patch)
treed4850c0243ff396be8232673473c48f610228f04
parent6a9df3bba3021b95f354c0590c79a458dbeca45b (diff)
downloadsubsurface-718c07c1a864ae307306fc54d3a8ba38e30bf759.tar.gz
Grantlee: split out grantlee-only property from DiveObjectHelper
The cylindersObject list was only used by grantlee but not by the mobile code. Since it is quite heavy, split it out and thus don't generate it for every dive on mobile. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r--core/subsurface-qt/DiveObjectHelper.cpp11
-rw-r--r--core/subsurface-qt/DiveObjectHelper.h19
-rw-r--r--desktop-widgets/templatelayout.cpp10
-rw-r--r--desktop-widgets/templatelayout.h2
4 files changed, 32 insertions, 10 deletions
diff --git a/core/subsurface-qt/DiveObjectHelper.cpp b/core/subsurface-qt/DiveObjectHelper.cpp
index ec62a9fec..9e4ff47bb 100644
--- a/core/subsurface-qt/DiveObjectHelper.cpp
+++ b/core/subsurface-qt/DiveObjectHelper.cpp
@@ -238,7 +238,6 @@ DiveObjectHelper::DiveObjectHelper(const struct dive *d) :
singleWeight(d->weightsystems.nr <= 1),
suit(d->suit ? d->suit : QString()),
cylinders(formatCylinders(d)),
- cylinderObjects(makeCylinderObjects(d)),
maxcns(d->maxcns),
otu(d->otu),
sumWeight(get_weight_string(weight_t { total_weight(d) }, true)),
@@ -249,6 +248,16 @@ DiveObjectHelper::DiveObjectHelper(const struct dive *d) :
{
}
+DiveObjectHelperGrantlee::DiveObjectHelperGrantlee()
+{
+}
+
+DiveObjectHelperGrantlee::DiveObjectHelperGrantlee(const struct dive *d) :
+ DiveObjectHelper(d),
+ cylinderObjects(makeCylinderObjects(d))
+{
+}
+
QString DiveObjectHelper::date() const
{
QDateTime localTime = QDateTime::fromMSecsSinceEpoch(1000 * timestamp, Qt::UTC);
diff --git a/core/subsurface-qt/DiveObjectHelper.h b/core/subsurface-qt/DiveObjectHelper.h
index 5e6b0c7e1..639dae696 100644
--- a/core/subsurface-qt/DiveObjectHelper.h
+++ b/core/subsurface-qt/DiveObjectHelper.h
@@ -39,7 +39,6 @@ class DiveObjectHelper {
Q_PROPERTY(QString suit MEMBER suit CONSTANT)
Q_PROPERTY(QStringList cylinderList READ cylinderList CONSTANT)
Q_PROPERTY(QStringList cylinders MEMBER cylinders CONSTANT)
- Q_PROPERTY(QVector<CylinderObjectHelper> cylinderObjects MEMBER cylinderObjects CONSTANT)
Q_PROPERTY(int maxcns MEMBER maxcns CONSTANT)
Q_PROPERTY(int otu MEMBER otu CONSTANT)
Q_PROPERTY(QString sumWeight MEMBER sumWeight CONSTANT)
@@ -78,7 +77,6 @@ public:
QString suit;
QStringList cylinderList() const;
QStringList cylinders;
- QVector<CylinderObjectHelper> cylinderObjects;
int maxcns;
int otu;
QString sumWeight;
@@ -87,6 +85,21 @@ public:
QStringList endPressure;
QStringList firstGas;
};
- Q_DECLARE_METATYPE(DiveObjectHelper)
+
+// This is an extended version of DiveObjectHelper that also keeps track of cylinder data.
+// It is used by grantlee to display structured cylinder data.
+// Note: this grantlee feature is undocumented. If there turns out to be no users, we might
+// want to remove this class.
+class DiveObjectHelperGrantlee : public DiveObjectHelper {
+ Q_GADGET
+ Q_PROPERTY(QVector<CylinderObjectHelper> cylinderObjects MEMBER cylinderObjects CONSTANT)
+public:
+ DiveObjectHelperGrantlee();
+ DiveObjectHelperGrantlee(const struct dive *dive);
+ QVector<CylinderObjectHelper> cylinderObjects;
+};
+
+Q_DECLARE_METATYPE(DiveObjectHelper)
+Q_DECLARE_METATYPE(DiveObjectHelperGrantlee)
#endif
diff --git a/desktop-widgets/templatelayout.cpp b/desktop-widgets/templatelayout.cpp
index bdcdfbbe9..de540f266 100644
--- a/desktop-widgets/templatelayout.cpp
+++ b/desktop-widgets/templatelayout.cpp
@@ -100,7 +100,7 @@ TemplateLayout::TemplateLayout(print_options *printOptions, template_options *te
}
/* a HTML pre-processor stage. acts like a compatibility layer
- * between some Grantlee variables and DiveObjectHelper Q_PROPERTIES:
+ * between some Grantlee variables and DiveObjectHelperGrantlee Q_PROPERTIES:
* dive.weights -> dive.weightList
* dive.weight# -> dive.weights.#
* dive.cylinders -> dive.cylinderList
@@ -134,13 +134,13 @@ QString TemplateLayout::generate()
Grantlee::registerMetaType<template_options>();
Grantlee::registerMetaType<print_options>();
Grantlee::registerMetaType<CylinderObjectHelper>(); // TODO: Remove when grantlee supports Q_GADGET
- Grantlee::registerMetaType<DiveObjectHelper>(); // TODO: Remove when grantlee supports Q_GADGET
+ Grantlee::registerMetaType<DiveObjectHelperGrantlee>(); // TODO: Remove when grantlee supports Q_GADGET
QVariantList diveList;
struct dive *dive;
if (in_planner()) {
- diveList.append(QVariant::fromValue(DiveObjectHelper(&displayed_dive)));
+ diveList.append(QVariant::fromValue(DiveObjectHelperGrantlee(&displayed_dive)));
emit progressUpdated(100.0);
} else {
int i;
@@ -148,7 +148,7 @@ QString TemplateLayout::generate()
//TODO check for exporting selected dives only
if (!dive->selected && printOptions->print_selected)
continue;
- diveList.append(QVariant::fromValue(DiveObjectHelper(dive)));
+ diveList.append(QVariant::fromValue(DiveObjectHelperGrantlee(dive)));
progress++;
emit progressUpdated(lrint(progress * 100.0 / totalWork));
}
@@ -191,7 +191,7 @@ QString TemplateLayout::generateStatistics()
Grantlee::registerMetaType<template_options>();
Grantlee::registerMetaType<print_options>();
Grantlee::registerMetaType<CylinderObjectHelper>(); // TODO: Remove when grantlee supports Q_GADGET
- Grantlee::registerMetaType<DiveObjectHelper>(); // TODO: Remove when grantlee supports Q_GADGET
+ Grantlee::registerMetaType<DiveObjectHelperGrantlee>(); // TODO: Remove when grantlee supports Q_GADGET
QVariantList years;
diff --git a/desktop-widgets/templatelayout.h b/desktop-widgets/templatelayout.h
index 870cd702a..04f7af9a5 100644
--- a/desktop-widgets/templatelayout.h
+++ b/desktop-widgets/templatelayout.h
@@ -143,7 +143,7 @@ GRANTLEE_END_LOOKUP
// TODO: This is currently needed because our grantlee version
// doesn't support Q_GADGET based classes. A patch to fix this
// exists. Remove in due course.
-GRANTLEE_BEGIN_LOOKUP(DiveObjectHelper)
+GRANTLEE_BEGIN_LOOKUP(DiveObjectHelperGrantlee)
if (property == "number") {
return object.number;
} else if (property == "id") {