diff options
-rw-r--r-- | qt-ui/divepicturewidget.cpp | 9 | ||||
-rw-r--r-- | qt-ui/divepicturewidget.h | 2 | ||||
-rw-r--r-- | qt-ui/mainwindow.cpp | 5 | ||||
-rw-r--r-- | qthelper.cpp | 2 |
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(); } |