mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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 <tomaz.canabrava@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
342479586d
commit
ed30059183
6 changed files with 75 additions and 12 deletions
|
@ -364,6 +364,7 @@ set(SUBSURFACE_MODELS_LIB_SRCS
|
||||||
qt-models/divepicturemodel.cpp
|
qt-models/divepicturemodel.cpp
|
||||||
qt-models/diveplotdatamodel.cpp
|
qt-models/diveplotdatamodel.cpp
|
||||||
qt-models/divelocationmodel.cpp
|
qt-models/divelocationmodel.cpp
|
||||||
|
qt-models/divesitepicturesmodel.cpp
|
||||||
)
|
)
|
||||||
source_group("Subsurface Models" FILES ${SUBSURFACE_MODELS})
|
source_group("Subsurface Models" FILES ${SUBSURFACE_MODELS})
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,7 @@
|
||||||
|
|
||||||
#include <QtConcurrent>
|
#include <QtConcurrent>
|
||||||
|
|
||||||
typedef QList<struct picture *> SPictureList;
|
SPixmap scaleImages(picturepointer picture)
|
||||||
typedef struct picture *picturepointer;
|
|
||||||
typedef QPair<picturepointer, QImage> SPixmap;
|
|
||||||
|
|
||||||
|
|
||||||
static SPixmap scaleImages(picturepointer picture)
|
|
||||||
{
|
{
|
||||||
static QHash <QString, QImage > cache;
|
static QHash <QString, QImage > cache;
|
||||||
SPixmap ret;
|
SPixmap ret;
|
||||||
|
@ -126,4 +121,4 @@ void DivePictureModel::removePicture(const QString &fileUrl)
|
||||||
int DivePictureModel::rowCount(const QModelIndex &parent) const
|
int DivePictureModel::rowCount(const QModelIndex &parent) const
|
||||||
{
|
{
|
||||||
return numberOfPictures;
|
return numberOfPictures;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,12 +12,19 @@ public:
|
||||||
SHashedImage(struct picture *picture);
|
SHashedImage(struct picture *picture);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct PhotoHelper {
|
struct PhotoHelper {
|
||||||
QImage image;
|
QImage image;
|
||||||
int offsetSeconds;
|
int offsetSeconds;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef QList<struct picture *> SPictureList;
|
||||||
|
typedef struct picture *picturepointer;
|
||||||
|
typedef QPair<picturepointer, QImage> SPixmap;
|
||||||
|
|
||||||
|
// function that will scale the pixmap, used inside the QtConcurrent thread.
|
||||||
|
SPixmap scaleImages(picturepointer picture);
|
||||||
|
|
||||||
class DivePictureModel : public QAbstractTableModel {
|
class DivePictureModel : public QAbstractTableModel {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
@ -25,11 +32,11 @@ public:
|
||||||
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||||
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
void updateDivePictures();
|
virtual void updateDivePictures();
|
||||||
void updateDivePicturesWhenDone(QList<QFuture<void> >);
|
void updateDivePicturesWhenDone(QList<QFuture<void> >);
|
||||||
void removePicture(const QString& fileUrl);
|
void removePicture(const QString& fileUrl);
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
DivePictureModel();
|
DivePictureModel();
|
||||||
int numberOfPictures;
|
int numberOfPictures;
|
||||||
// Currently, load the images on the fly
|
// Currently, load the images on the fly
|
||||||
|
@ -38,4 +45,4 @@ private:
|
||||||
QHash<QString, PhotoHelper> stringPixmapCache;
|
QHash<QString, PhotoHelper> stringPixmapCache;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
45
qt-models/divesitepicturesmodel.cpp
Normal file
45
qt-models/divesitepicturesmodel.cpp
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#include "divesitepicturesmodel.h"
|
||||||
|
#include "dive.h"
|
||||||
|
#include "stdint.h"
|
||||||
|
|
||||||
|
#include <QtConcurrent>
|
||||||
|
#include <QPixmap>
|
||||||
|
|
||||||
|
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<SPixmap> 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();
|
||||||
|
}
|
15
qt-models/divesitepicturesmodel.h
Normal file
15
qt-models/divesitepicturesmodel.h
Normal file
|
@ -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
|
|
@ -51,6 +51,6 @@ signals:
|
||||||
void setLineEditText(const QString& text);
|
void setLineEditText(const QString& text);
|
||||||
private:
|
private:
|
||||||
uint32_t last_uuid;
|
uint32_t last_uuid;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue