4#include <QtCore/QFileInfo>
9 : QAbstractListModel(parent)
13GeoTagImageModel::~GeoTagImageModel()
17int GeoTagImageModel::rowCount(
const QModelIndex &parent)
const
20 return static_cast<int>(_images.count());
23QVariant GeoTagImageModel::data(
const QModelIndex &index,
int role)
const
25 if (!index.isValid() || index.row() < 0 || index.row() >= _images.count()) {
29 const ImageInfo &info = _images.at(index.row());
37 return static_cast<int>(info.status);
38 case StatusStringRole:
39 return statusToString(info.status);
40 case ErrorMessageRole:
41 return info.errorMessage;
43 return QVariant::fromValue(info.coordinate);
49QHash<int, QByteArray> GeoTagImageModel::roleNames()
const
52 {FileNameRole,
"fileName"},
53 {FilePathRole,
"filePath"},
54 {StatusRole,
"status"},
55 {StatusStringRole,
"statusString"},
56 {ErrorMessageRole,
"errorMessage"},
57 {CoordinateRole,
"coordinate"}
61void GeoTagImageModel::clear()
63 if (_images.isEmpty()) {
74void GeoTagImageModel::addImage(
const QString &filePath)
76 const int row = _images.count();
77 beginInsertRows(QModelIndex(), row, row);
80 info.filePath = filePath;
81 info.fileName = QFileInfo(filePath).fileName();
82 info.status = Pending;
89void GeoTagImageModel::setStatus(
int index, Status status,
const QString &errorMessage)
91 if (index < 0 || index >= _images.count()) {
95 ImageInfo &info = _images[index];
96 if (info.status != status || info.errorMessage != errorMessage) {
100 const QModelIndex modelIndex = createIndex(index, 0);
101 emit dataChanged(modelIndex, modelIndex, {StatusRole, StatusStringRole, ErrorMessageRole});
105void GeoTagImageModel::setCoordinate(
int index,
const QGeoCoordinate &coordinate)
107 if (index < 0 || index >= _images.count()) {
111 ImageInfo &info = _images[index];
112 if (info.coordinate != coordinate) {
113 info.coordinate = coordinate;
115 const QModelIndex modelIndex = createIndex(index, 0);
116 emit dataChanged(modelIndex, modelIndex, {CoordinateRole});
120void GeoTagImageModel::setStatusByPath(
const QString &filePath, Status status,
const QString &errorMessage)
122 for (
int i = 0; i < _images.count(); ++i) {
123 if (_images.at(i).filePath == filePath) {
124 setStatus(i, status, errorMessage);
130void GeoTagImageModel::setAllStatus(Status status)
132 if (_images.isEmpty()) {
136 for (
int i = 0; i < _images.count(); ++i) {
137 _images[i].status = status;
138 _images[i].errorMessage.clear();
141 emit dataChanged(createIndex(0, 0), createIndex(_images.count() - 1, 0),
142 {StatusRole, StatusStringRole, ErrorMessageRole});
145QString GeoTagImageModel::statusToString(Status status)
149 return tr(
"Pending");
151 return tr(
"Processing");
155 return tr(
"Skipped");
#define QGC_LOGGING_CATEGORY(name, categoryStr)
Model for displaying geotagging image status in QML.
QString errorMessage(const QNetworkReply *reply)