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