File indexing completed on 2024-04-28 15:39:06

0001 // SPDX-FileCopyrightText: 2020-2021 Tobias Leupold <tl at stonemx dot de>
0002 //
0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 #ifndef IMAGESMODEL_H
0006 #define IMAGESMODEL_H
0007 
0008 // Local includes
0009 #include "KGeoTag.h"
0010 
0011 // KDE includes
0012 #include <KColorScheme>
0013 
0014 // Qt includes
0015 #include <QAbstractListModel>
0016 #include <QDateTime>
0017 #include <QImage>
0018 #include <QSize>
0019 #include <QTimeZone>
0020 
0021 class ImagesModel : public QAbstractListModel
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     enum LoadResult {
0027         LoadingImageFailed,
0028         LoadingMetadataFailed,
0029         AlreadyLoaded,
0030         LoadingSucceeded
0031     };
0032 
0033     explicit ImagesModel(QObject *parent, bool splitImagesList, int thumbnailSize, int previewSize);
0034 
0035     int rowCount(const QModelIndex & = QModelIndex()) const override;
0036     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0037 
0038     void setSplitImagesList(bool state);
0039     QModelIndex indexFor(const QString &path) const;
0040     bool contains(const QString &path) const;
0041     LoadResult addImage(const QString &path);
0042     const QVector<QString> &allImages() const;
0043     QVector<QString> imagesWithPendingChanges() const;
0044     QVector<QString> processedSavedImages() const;
0045     QVector<QString> imagesLoadedTagged() const;
0046     QDateTime date(const QString &path) const;
0047     KGeoTag::MatchType matchType(const QString &path) const;
0048     void setCoordinates(const QString &path, const Coordinates &coordinates,
0049                         KGeoTag::MatchType matchType);
0050     void setElevation(const QString &path, double elevation);
0051     Coordinates coordinates(const QString &path) const;
0052     void resetChanges(const QString &path);
0053     void setSaved(const QString &path);
0054     void setImagesTimeZone(const QByteArray &id);
0055     bool hasPendingChanges(const QString &path) const;
0056     void removeImages(const QVector<QString> &paths);
0057     void removeAllImages();
0058 
0059 private: // Functions
0060     void emitDataChanged(const QString &path);
0061 
0062 private: // Variables
0063     struct ImageData {
0064         QString fileName;
0065         QDateTime date;
0066         Coordinates originalCoordinates;
0067         Coordinates lastSavedCoordinates;
0068         Coordinates coordinates;
0069         QPixmap thumbnail;
0070         QImage preview;
0071         KGeoTag::MatchType matchType = KGeoTag::NotMatched;
0072         bool changed = false;
0073     };
0074 
0075     bool m_splitImagesList;
0076     QSize m_thumbnailSize;
0077     QSize m_previewSize;
0078 
0079     KColorScheme m_colorScheme;
0080     QVector<QString> m_paths;
0081     QHash<QString, ImageData> m_imageData;
0082     QTimeZone m_timeZone;
0083 
0084 };
0085 
0086 #endif // IMAGESMODEL_H