summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/divepicturewidget.cpp28
-rw-r--r--qt-ui/divepicturewidget.h4
2 files changed, 30 insertions, 2 deletions
diff --git a/qt-ui/divepicturewidget.cpp b/qt-ui/divepicturewidget.cpp
index 11849af5f..eda4ff68c 100644
--- a/qt-ui/divepicturewidget.cpp
+++ b/qt-ui/divepicturewidget.cpp
@@ -1,5 +1,6 @@
#include "divepicturewidget.h"
#include <dive.h>
+#include <qtconcurrentmap.h>
void DivePictureDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
@@ -11,29 +12,52 @@ DivePictureModel::DivePictureModel(QObject *parent): QAbstractTableModel(parent)
}
+typedef QPair<QString, QPixmap> SPixmap;
+typedef QList<SPixmap> SPixmapList;
+
+SPixmap scaleImages(const QString& s){
+ QPixmap p = QPixmap(s).scaled(128,128, Qt::KeepAspectRatio);
+ SPixmap ret;
+ ret.first = s;
+ ret.second = p;
+ return ret;
+}
+
void DivePictureModel::updateDivePictures(int divenr)
{
+ qDebug() << "Updating dive pictures.";
beginRemoveRows(QModelIndex(), 0, numberOfPictures-1);
numberOfPictures = 0;
endRemoveRows();
+ QStringList pictures;
struct dive *d = get_dive(divenr);
- if (!d)
+ if (!d){
+ qDebug() << "Got no dive, exiting.";
return;
+ }
// All pictures are set in *all* divecomputers. ( waste of memory if > 100 pictures? )
// so just get from the first one.
struct event *ev = d->dc.events;
while(ev){
if(ev->type == 123){ // 123 means PICTURE.
numberOfPictures++;
+ pictures.push_back(QString(ev->name));
}
ev = ev->next;
}
- if (numberOfPictures == 0)
+ SPixmapList retList = QtConcurrent::blockingMapped<SPixmapList>( pictures, scaleImages);
+ Q_FOREACH(const SPixmap & pixmap, retList)
+ stringPixmapCache[pixmap.first] = pixmap.second;
+
+ if (numberOfPictures == 0){
+ qDebug() << "Got no pictures, exiting.";
return;
+ }
beginInsertRows(QModelIndex(), 0, numberOfPictures-1);
endInsertRows();
+ qDebug() << "Everything Ok.";
}
int DivePictureModel::columnCount(const QModelIndex &parent) const
diff --git a/qt-ui/divepicturewidget.h b/qt-ui/divepicturewidget.h
index 062e225d7..ff8d1aa8f 100644
--- a/qt-ui/divepicturewidget.h
+++ b/qt-ui/divepicturewidget.h
@@ -16,6 +16,10 @@ public:
void updateDivePictures(int divenr);
private:
int numberOfPictures;
+ // Currently, load the images on the fly
+ // Later, use a thread to load the images
+ // Later, save the thumbnails so we don't need to reopen every time.
+ QHash<QString, QPixmap> stringPixmapCache;
};
class DivePictureDelegate : QStyledItemDelegate {