diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-08-22 19:40:42 +0200 |
---|---|---|
committer | bstoeger <32835590+bstoeger@users.noreply.github.com> | 2019-09-14 13:20:59 +0200 |
commit | 718c07c1a864ae307306fc54d3a8ba38e30bf759 (patch) | |
tree | d4850c0243ff396be8232673473c48f610228f04 | |
parent | 6a9df3bba3021b95f354c0590c79a458dbeca45b (diff) | |
download | subsurface-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.cpp | 11 | ||||
-rw-r--r-- | core/subsurface-qt/DiveObjectHelper.h | 19 | ||||
-rw-r--r-- | desktop-widgets/templatelayout.cpp | 10 | ||||
-rw-r--r-- | desktop-widgets/templatelayout.h | 2 |
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") { |