summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/divepicturewidget.cpp9
-rw-r--r--qt-ui/divepicturewidget.h2
-rw-r--r--qt-ui/mainwindow.cpp5
-rw-r--r--qthelper.cpp2
4 files changed, 14 insertions, 4 deletions
diff --git a/qt-ui/divepicturewidget.cpp b/qt-ui/divepicturewidget.cpp
index a0d209b6d..1baceeb7e 100644
--- a/qt-ui/divepicturewidget.cpp
+++ b/qt-ui/divepicturewidget.cpp
@@ -4,6 +4,7 @@
#include "divelist.h"
#include <QtConcurrentMap>
#include <QtConcurrentRun>
+#include <QFuture>
#include <QDir>
#include <QCryptographicHash>
#include <mainwindow.h>
@@ -53,6 +54,14 @@ SPixmap scaleImages(picturepointer picture)
return ret;
}
+void DivePictureModel::updateDivePicturesWhenDone(QList<QFuture<void> > futures)
+{
+ Q_FOREACH (QFuture<void> f, futures) {
+ f.waitForFinished();
+ }
+ updateDivePictures();
+}
+
void DivePictureModel::updateDivePictures()
{
if (numberOfPictures != 0) {
diff --git a/qt-ui/divepicturewidget.h b/qt-ui/divepicturewidget.h
index e8104a1db..506f85bf8 100644
--- a/qt-ui/divepicturewidget.h
+++ b/qt-ui/divepicturewidget.h
@@ -4,6 +4,7 @@
#include <QAbstractTableModel>
#include <QListView>
#include <QThread>
+#include <QFuture>
typedef QPair<QString, QByteArray> SHashedFilename;
@@ -25,6 +26,7 @@ public:
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
void updateDivePictures();
+ void updateDivePicturesWhenDone(QList<QFuture<void> >);
void removePicture(const QString& fileUrl);
private:
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index e7235f9f8..f8335affb 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -327,14 +327,15 @@ void MainWindow::on_actionHash_images_triggered()
dialog.setLabelText(QFileDialog::Accept, tr("Scan"));
dialog.setLabelText(QFileDialog::Reject, tr("Cancel"));
QStringList dirnames;
+ QList<QFuture<void> > futures;
if (dialog.exec())
dirnames = dialog.selectedFiles();
if (dirnames.isEmpty())
return;
foreach (QString dir, dirnames) {
- QtConcurrent::run(learnImages, QDir(dir), 10, false);
+ futures << QtConcurrent::run(learnImages, QDir(dir), 10, false);
}
-
+ DivePictureModel::instance()->updateDivePicturesWhenDone(futures);
}
ProfileWidget2 *MainWindow::graphics() const
diff --git a/qthelper.cpp b/qthelper.cpp
index 14e67e089..189d47ed3 100644
--- a/qthelper.cpp
+++ b/qthelper.cpp
@@ -870,6 +870,4 @@ void learnImages(const QDir dir, int max_recursions, bool recursed)
}
QtConcurrent::blockingMap(files, hashFile);
- if (!recursed)
- DivePictureModel::instance()->updateDivePictures();
}