aboutsummaryrefslogtreecommitdiffstats
path: root/qt-models
diff options
context:
space:
mode:
Diffstat (limited to 'qt-models')
-rw-r--r--qt-models/divetripmodel.cpp38
1 files changed, 29 insertions, 9 deletions
diff --git a/qt-models/divetripmodel.cpp b/qt-models/divetripmodel.cpp
index 358d032a6..71430a7d3 100644
--- a/qt-models/divetripmodel.cpp
+++ b/qt-models/divetripmodel.cpp
@@ -188,6 +188,28 @@ static QString displayWeight(const struct dive *d, bool units)
return s + gettextFromC::tr("lbs");
}
+static QPixmap &getGlobeIcon()
+{
+ static std::unique_ptr<QPixmap> icon;
+ if (!icon) {
+ const IconMetrics &im = defaultIconMetrics();
+ icon = std::make_unique<QPixmap>(QIcon(":globe-icon").pixmap(im.sz_small, im.sz_small));
+ }
+ return *icon;
+}
+
+static QPixmap &getPhotoIcon(int idx)
+{
+ static std::unique_ptr<QPixmap[]> icons;
+ if (!icons) {
+ const IconMetrics &im = defaultIconMetrics();
+ icons = std::make_unique<QPixmap[]>(std::size(icon_names));
+ for (size_t i = 0; i < std::size(icon_names); ++i)
+ icons[i] = QIcon(icon_names[i]).pixmap(im.sz_small, im.sz_small);
+ }
+ return icons[idx];
+}
+
QVariant DiveTripModelBase::diveData(const struct dive *d, int column, int role) const
{
#ifdef SUBSURFACE_MOBILE
@@ -289,17 +311,15 @@ QVariant DiveTripModelBase::diveData(const struct dive *d, int column, int role)
case COUNTRY:
return QVariant();
case LOCATION:
- if (dive_has_gps_location(d)) {
- IconMetrics im = defaultIconMetrics();
- return QIcon(":globe-icon").pixmap(im.sz_small, im.sz_small);
- }
+ if (dive_has_gps_location(d))
+ return getGlobeIcon();
break;
case PHOTOS:
- if (d->pictures.nr > 0) {
- IconMetrics im = defaultIconMetrics();
- return QIcon(icon_names[countPhotos(d)]).pixmap(im.sz_small, im.sz_small);
- } // If there are photos, show one of the three photo icons: fish= photos during dive;
- break; // sun=photos before/after dive; sun+fish=photos during dive as well as before/after
+ // If there are photos, show one of the three photo icons: fish= photos during dive;
+ // sun=photos before/after dive; sun+fish=photos during dive as well as before/after
+ if (d->pictures.nr > 0)
+ return getPhotoIcon(countPhotos(d));
+ break;
}
break;
case Qt::ToolTipRole: