From ed30059183f8a6d5d8e0692690f16f7f665fd369 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Thu, 6 Aug 2015 10:14:18 -0300 Subject: Add DiveSitePicturesModel This model should be used inside the Edit Dive Site mode. It should display all photos from all dives that are part of this dive site, ignoring trips. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-models/divepicturemodel.cpp | 9 ++------ qt-models/divepicturemodel.h | 15 +++++++++---- qt-models/divesitepicturesmodel.cpp | 45 +++++++++++++++++++++++++++++++++++++ qt-models/divesitepicturesmodel.h | 15 +++++++++++++ 4 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 qt-models/divesitepicturesmodel.cpp create mode 100644 qt-models/divesitepicturesmodel.h (limited to 'qt-models') diff --git a/qt-models/divepicturemodel.cpp b/qt-models/divepicturemodel.cpp index 9e60404ed..06051dd28 100644 --- a/qt-models/divepicturemodel.cpp +++ b/qt-models/divepicturemodel.cpp @@ -5,12 +5,7 @@ #include -typedef QList SPictureList; -typedef struct picture *picturepointer; -typedef QPair SPixmap; - - -static SPixmap scaleImages(picturepointer picture) +SPixmap scaleImages(picturepointer picture) { static QHash cache; SPixmap ret; @@ -126,4 +121,4 @@ void DivePictureModel::removePicture(const QString &fileUrl) int DivePictureModel::rowCount(const QModelIndex &parent) const { return numberOfPictures; -} \ No newline at end of file +} diff --git a/qt-models/divepicturemodel.h b/qt-models/divepicturemodel.h index edcddd7a2..2ca22a1d9 100644 --- a/qt-models/divepicturemodel.h +++ b/qt-models/divepicturemodel.h @@ -12,12 +12,19 @@ public: SHashedImage(struct picture *picture); }; - struct PhotoHelper { QImage image; int offsetSeconds; }; + +typedef QList SPictureList; +typedef struct picture *picturepointer; +typedef QPair SPixmap; + +// function that will scale the pixmap, used inside the QtConcurrent thread. +SPixmap scaleImages(picturepointer picture); + class DivePictureModel : public QAbstractTableModel { Q_OBJECT public: @@ -25,11 +32,11 @@ public: virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; - void updateDivePictures(); + virtual void updateDivePictures(); void updateDivePicturesWhenDone(QList >); void removePicture(const QString& fileUrl); -private: +protected: DivePictureModel(); int numberOfPictures; // Currently, load the images on the fly @@ -38,4 +45,4 @@ private: QHash stringPixmapCache; }; -#endif \ No newline at end of file +#endif diff --git a/qt-models/divesitepicturesmodel.cpp b/qt-models/divesitepicturesmodel.cpp new file mode 100644 index 000000000..3777f1d36 --- /dev/null +++ b/qt-models/divesitepicturesmodel.cpp @@ -0,0 +1,45 @@ +#include "divesitepicturesmodel.h" +#include "dive.h" +#include "stdint.h" + +#include +#include + +DiveSitePicturesModel* DiveSitePicturesModel::instance() { + static DiveSitePicturesModel *self = new DiveSitePicturesModel(); + return self; +} + +DiveSitePicturesModel::DiveSitePicturesModel() { + +} + +void DiveSitePicturesModel::updateDivePictures() { + beginResetModel(); + numberOfPictures = 0; + endResetModel(); + + const uint32_t ds_uuid = displayed_dive_site.uuid; + struct dive *d; + int i; + + stringPixmapCache.clear(); + SPictureList pictures; + + for_each_dive (i, d) { + if (d->dive_site_uuid == ds_uuid && dive_get_picture_count(d)) { + FOR_EACH_PICTURE(d) { + stringPixmapCache[QString(picture->filename)].offsetSeconds = picture->offset.seconds; + pictures.push_back(picture); + } + } + } + + QList list = QtConcurrent::blockingMapped(pictures, scaleImages); + Q_FOREACH (const SPixmap &pixmap, list) + stringPixmapCache[pixmap.first->filename].image = pixmap.second; + + numberOfPictures = list.count(); + beginInsertRows(QModelIndex(), 0, numberOfPictures - 1); + endInsertRows(); +} diff --git a/qt-models/divesitepicturesmodel.h b/qt-models/divesitepicturesmodel.h new file mode 100644 index 000000000..f19f57cc2 --- /dev/null +++ b/qt-models/divesitepicturesmodel.h @@ -0,0 +1,15 @@ +#ifndef DIVESITEPICTURESMODEL_H +#define DIVESITEPICTURESMODEL_H + +#include "divepicturemodel.h" + +class DiveSitePicturesModel : public DivePictureModel { + Q_OBJECT +public: + static DiveSitePicturesModel *instance(); + void updateDivePictures(); +private: + DiveSitePicturesModel(); +}; + +#endif -- cgit v1.2.3-70-g09d2