diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2015-05-29 14:42:57 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-05-29 14:14:27 -0700 |
commit | ffc0c8ee993ce6301b8f6c0992b6e1652d2b08d7 (patch) | |
tree | 46b2584896a04437ec8d61d4ecc8dc41b3d6259a /qt-ui | |
parent | 37bd82f623ae2fc89a53d8193e7a308b7a2910c3 (diff) | |
download | subsurface-ffc0c8ee993ce6301b8f6c0992b6e1652d2b08d7.tar.gz |
Move DivePictureModel to qt-models
This class will surely be used on the mobile version, and it was very
tangled inside divepicturewidget.
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/divelistview.cpp | 3 | ||||
-rw-r--r-- | qt-ui/divepicturewidget.cpp | 125 | ||||
-rw-r--r-- | qt-ui/divepicturewidget.h | 32 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 1 | ||||
-rw-r--r-- | qt-ui/maintab.h | 1 | ||||
-rw-r--r-- | qt-ui/mainwindow.cpp | 1 | ||||
-rw-r--r-- | qt-ui/profile/divepixmapitem.cpp | 2 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.cpp | 1 |
8 files changed, 10 insertions, 156 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 7f755fc16..c25bb17cb 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -20,7 +20,8 @@ #include "qthelper.h" #include "undocommands.h" #include "divelistview.h" -#include "models.h" +#include "divepicturemodel.h" +#include "metrics.h" // # Date Rtg Dpth Dur Tmp Wght Suit Cyl Gas SAC OTU CNS Loc static int defaultWidth[] = { 70, 140, 90, 50, 50, 50, 50, 70, 50, 50, 70, 50, 50, 500}; diff --git a/qt-ui/divepicturewidget.cpp b/qt-ui/divepicturewidget.cpp index 8c1cb3571..bed3d3bd1 100644 --- a/qt-ui/divepicturewidget.cpp +++ b/qt-ui/divepicturewidget.cpp @@ -1,4 +1,5 @@ #include "divepicturewidget.h" +#include "divepicturemodel.h" #include "metrics.h" #include "dive.h" #include "divelist.h" @@ -14,7 +15,7 @@ #include <qthelper.h> #include <QStandardPaths> -void loadPicuture(struct picture *picture) +void loadPicture(struct picture *picture) { ImageDownloader download(picture); download.load(); @@ -31,7 +32,7 @@ SHashedImage::SHashedImage(struct picture *picture) : QImage() if (!isNull()) { QtConcurrent::run(updateHash, picture); } else { - QtConcurrent::run(loadPicuture, picture); + QtConcurrent::run(loadPicture, picture); } } else { QByteArray hash = hashFile(url.toLocalFile()); @@ -87,126 +88,6 @@ void ImageDownloader::saveImage(QNetworkReply *reply) reply->deleteLater(); } -DivePictureModel *DivePictureModel::instance() -{ - static DivePictureModel *self = new DivePictureModel(); - return self; -} - -DivePictureModel::DivePictureModel() : numberOfPictures(0) -{ -} - -typedef struct picture *picturepointer; -typedef QPair<picturepointer, QImage> SPixmap; -typedef QList<struct picture *> SPictureList; - -SPixmap scaleImages(picturepointer picture) -{ - static QHash <QString, QImage > cache; - SPixmap ret; - ret.first = picture; - if (cache.contains(picture->filename) && !cache.value(picture->filename).isNull()) { - ret.second = cache.value(picture->filename); - } else { - int dim = defaultIconMetrics().sz_pic; - QImage p = SHashedImage(picture); - if(!p.isNull()) - p = p.scaled(dim, dim, Qt::KeepAspectRatio); - cache.insert(picture->filename, p); - ret.second = p; - } - return ret; -} - -void DivePictureModel::updateDivePicturesWhenDone(QList<QFuture<void> > futures) -{ - Q_FOREACH (QFuture<void> f, futures) { - f.waitForFinished(); - } - updateDivePictures(); -} - -void DivePictureModel::updateDivePictures() -{ - if (numberOfPictures != 0) { - beginRemoveRows(QModelIndex(), 0, numberOfPictures - 1); - numberOfPictures = 0; - endRemoveRows(); - } - - // if the dive_table is empty, ignore the displayed_dive - numberOfPictures = dive_table.nr == 0 ? 0 : dive_get_picture_count(&displayed_dive); - if (numberOfPictures == 0) { - return; - } - - stringPixmapCache.clear(); - SPictureList pictures; - FOR_EACH_PICTURE_NON_PTR(displayed_dive) { - 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; - - beginInsertRows(QModelIndex(), 0, numberOfPictures - 1); - endInsertRows(); -} - -int DivePictureModel::columnCount(const QModelIndex &parent) const -{ - return 2; -} - -QVariant DivePictureModel::data(const QModelIndex &index, int role) const -{ - QVariant ret; - if (!index.isValid()) - return ret; - - QString key = stringPixmapCache.keys().at(index.row()); - if (index.column() == 0) { - switch (role) { - case Qt::ToolTipRole: - ret = key; - break; - case Qt::DecorationRole: - ret = stringPixmapCache[key].image; - break; - case Qt::DisplayRole: - ret = QFileInfo(key).fileName(); - break; - case Qt::DisplayPropertyRole: - ret = QFileInfo(key).filePath(); - } - } else if (index.column() == 1) { - switch (role) { - case Qt::UserRole: - ret = QVariant::fromValue((int)stringPixmapCache[key].offsetSeconds); - break; - case Qt::DisplayRole: - ret = key; - } - } - return ret; -} - -void DivePictureModel::removePicture(const QString &fileUrl) -{ - dive_remove_picture(fileUrl.toUtf8().data()); - copy_dive(current_dive, &displayed_dive); - updateDivePictures(); - mark_divelist_changed(true); -} - -int DivePictureModel::rowCount(const QModelIndex &parent) const -{ - return numberOfPictures; -} - DivePictureWidget::DivePictureWidget(QWidget *parent) : QListView(parent) { connect(this, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(doubleClicked(const QModelIndex &))); diff --git a/qt-ui/divepicturewidget.h b/qt-ui/divepicturewidget.h index 2ce228daf..54f5bb826 100644 --- a/qt-ui/divepicturewidget.h +++ b/qt-ui/divepicturewidget.h @@ -7,18 +7,6 @@ #include <QFuture> #include <QNetworkReply> -typedef QPair<QString, QByteArray> SHashedFilename; - -struct PhotoHelper { - QImage image; - int offsetSeconds; -}; - -class SHashedImage : public QImage { -public: - SHashedImage(struct picture *picture); -}; - class ImageDownloader : public QObject { Q_OBJECT; public: @@ -31,26 +19,6 @@ private slots: void saveImage(QNetworkReply *reply); }; -class DivePictureModel : public QAbstractTableModel { - Q_OBJECT -public: - static DivePictureModel *instance(); - 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(); - void updateDivePicturesWhenDone(QList<QFuture<void> >); - void removePicture(const QString& fileUrl); - -private: - DivePictureModel(); - 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, PhotoHelper> stringPixmapCache; -}; - class DivePictureWidget : public QListView { Q_OBJECT public: diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 02d6d66f0..5dc0f434b 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -18,6 +18,7 @@ #include "divesitehelpers.h" #include "cylindermodel.h" #include "weightmodel.h" +#include "divepicturemodel.h" #include "divecomputerextradatamodel.h" #if defined(FBSUPPORT) diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index d8880f584..23be96efa 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -19,6 +19,7 @@ class WeightModel; class CylindersModel; class ExtraDataModel; +class DivePictureModel; class QCompleter; struct Completers { diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index 60f6941d8..2848e26b7 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -42,6 +42,7 @@ #ifndef NO_USERMANUAL #include "usermanual.h" #endif +#include "divepicturemodel.h" #include <QNetworkProxy> #include <QUndoStack> #include <qthelper.h> diff --git a/qt-ui/profile/divepixmapitem.cpp b/qt-ui/profile/divepixmapitem.cpp index c9129761e..581f6f9b4 100644 --- a/qt-ui/profile/divepixmapitem.cpp +++ b/qt-ui/profile/divepixmapitem.cpp @@ -1,6 +1,6 @@ #include "divepixmapitem.h" #include "animationfunctions.h" -#include <divepicturewidget.h> +#include "divepicturemodel.h" #include <preferences.h> #include <QDesktopServices> diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index d70d88763..fb75b08cf 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -13,6 +13,7 @@ #include "divepicturewidget.h" #include "diveplannermodel.h" #include "models.h" +#include "divepicturemodel.h" #include "maintab.h" #include "diveplanner.h" |