digiKam
Loading...
Searching...
No Matches
importimagemodel.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2012-05-22
7 * Description : Qt model for camera entries
8 *
9 * SPDX-FileCopyrightText: 2012 by Islam Wazery <wazery at ubuntu dot com>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 * ============================================================ */
14
15#pragma once
16
17// Qt includes
18
19#include <QAbstractListModel>
20#include <QUrl>
21
22// Local includes
23
25#include "camerathumbsctrl.h"
26#include "camiteminfo.h"
27
28namespace Digikam
29{
30class AbstractItemDragDropHandler;
31
32class ImportItemModel : public QAbstractListModel, public DragDropModelImplementation
33{
34 Q_OBJECT
35
36public:
37
39 {
44 ImportItemModelInternalId = Qt::UserRole + 1,
45
50 ThumbnailRole = Qt::UserRole + 2,
54 ExtraDataRole = Qt::UserRole + 3,
55
59 ExtraDataDuplicateCount = Qt::UserRole + 6,
60
61 FilterModelRoles = Qt::UserRole + 100
62 };
63
64public:
65
66 explicit ImportItemModel(QObject* const parent = nullptr);
67 ~ImportItemModel() override;
68
72 virtual void setCameraThumbsController(CameraThumbsCtrl* const controller);
73
78 void setKeepsFileUrlCache(bool keepCache);
79 bool keepsFileUrlCache() const;
80
86 CamItemInfo camItemInfo(const QModelIndex& index) const;
87 CamItemInfo& camItemInfoRef(const QModelIndex& index) const;
88 qlonglong camItemId(const QModelIndex& index) const;
89 CamItemInfoList camItemInfos(const QList<QModelIndex>& indexes) const;
90 QList<qlonglong> camItemIds(const QList<QModelIndex>& indexes) const;
91
97 CamItemInfo camItemInfo(int row) const;
98 CamItemInfo& camItemInfoRef(int row) const;
99 qlonglong camItemId(int row) const;
100
104 QModelIndex indexForCamItemInfo(const CamItemInfo& info) const;
105 QList<QModelIndex> indexesForCamItemInfo(const CamItemInfo& info) const;
106 QModelIndex indexForCamItemId(qlonglong id) const;
107 QList<QModelIndex> indexesForCamItemId(qlonglong id) const;
108
114 QModelIndex indexForUrl(const QUrl& fileUrl) const;
115 QList<QModelIndex> indexesForUrl(const QUrl& fileUrl) const;
116 CamItemInfo camItemInfo(const QUrl& fileUrl) const;
117 QList<CamItemInfo> camItemInfos(const QUrl& fileUrl) const;
118
122 void clearCamItemInfos();
123
132
136 void setCamItemInfos(const CamItemInfoList& infos);
137
138 QList<CamItemInfo> camItemInfos() const;
139 QList<qlonglong> camItemIds() const;
140 QList<CamItemInfo> uniqueCamItemInfos() const;
141
142 bool hasImage(qlonglong id) const;
143 bool hasImage(const CamItemInfo& info) const;
144
145 bool isEmpty() const;
146
150 void removeIndex(const QModelIndex& index);
151 void removeIndexs(const QList<QModelIndex>& indexes);
152 void removeCamItemInfo(const CamItemInfo& info);
153 void removeCamItemInfos(const QList<CamItemInfo>& infos);
154
155 int numberOfIndexesForCamItemInfo(const CamItemInfo& info) const;
156 int numberOfIndexesForCamItemId(qlonglong id) const;
157
162 static CamItemInfo retrieveCamItemInfo(const QModelIndex& index);
163 static qlonglong retrieveCamItemId(const QModelIndex& index);
164
166 int rowCount(const QModelIndex& parent) const override;
167 QVariant data(const QModelIndex& index, int role) const override;
168 QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
169 Qt::ItemFlags flags(const QModelIndex& index) const override;
170 QModelIndex index(int row, int column, const QModelIndex& parent) const override;
171
174
179 void setSendRemovalSignals(bool send);
180
186 bool isRefreshing() const;
187
188Q_SIGNALS:
189
194 void itemInfosAboutToBeAdded(const QList<CamItemInfo>& infos);
195
200 void itemInfosAdded(const QList<CamItemInfo>& infos);
201
208 void itemInfosAboutToBeRemoved(const QList<CamItemInfo>& infos);
209
216 void itemInfosRemoved(const QList<CamItemInfo>& infos);
217
221 void preprocess(const QList<CamItemInfo>& infos);
222 void processAdded(const QList<CamItemInfo>& infos);
223
229
236
237public Q_SLOTS:
238
239 void reAddCamItemInfos(const CamItemInfoList& infos);
240 void reAddingFinished();
241 void slotFileDeleted(const QString& folder, const QString& file, bool status);
242 void slotFileUploaded(const CamItemInfo& info);
243 void addCamItemInfo(const CamItemInfo& info);
244 void addCamItemInfos(const CamItemInfoList& infos);
245
246protected:
247
254 void startRefresh();
255 void finishRefresh();
256
263 bool hasIncrementalRefreshPending() const;
264
272
274 void emitDataChangedForSelections(const QItemSelection& selection);
275
279 virtual void camItemInfosCleared() {};
280
284 virtual void itemInfosAboutToBeRemoved(int /*begin*/, int /*end*/) {};
285
286private:
287
288 void appendInfos(const CamItemInfoList& infos);
289 void publiciseInfos(const CamItemInfoList& infos);
290 void cleanSituationChecks();
291 void removeRowPairs(const QList<QPair<int, int> >& toRemove);
292 void removeRowPairsWithCheck(const QList<QPair<int, int> >& toRemove);
293
294public:
295
296 // NOTE: Declared public because it's used in ItemModelIncrementalUpdater class
297 class Private;
298
299private:
300
301 // Disable
302 ImportItemModel(const ImportItemModel&) = delete;
303 ImportItemModel& operator=(const ImportItemModel&) = delete;
304
305private:
306
307 Private* const d = nullptr;
308};
309
310} // namespace Digikam
311
312Q_DECLARE_METATYPE(Digikam::ImportItemModel*)
Definition camiteminfo.h:39
Definition camerathumbsctrl.h:38
Definition dragdropimplementations.h:30
Definition importimagemodel.h:33
QList< CamItemInfo > uniqueCamItemInfos() const
Definition importimagemodel.cpp:491
bool keepsFileUrlCache() const
Definition importimagemodel.cpp:121
DECLARE_MODEL_DRAG_DROP_METHODS void setSendRemovalSignals(bool send)
DragDrop methods.
Definition importimagemodel.cpp:783
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
Definition importimagemodel.cpp:1054
void addCamItemInfoSynchronously(const CamItemInfo &info)
Definition importimagemodel.cpp:438
bool isEmpty() const
Definition importimagemodel.cpp:126
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition importimagemodel.cpp:1073
bool hasIncrementalRefreshPending() const
Definition importimagemodel.cpp:673
void processAdded(const QList< CamItemInfo > &infos)
void startIncrementalRefresh()
Definition importimagemodel.cpp:678
QModelIndex index(int row, int column, const QModelIndex &parent) const override
Definition importimagemodel.cpp:1087
QModelIndex indexForCamItemInfo(const CamItemInfo &info) const
Definition importimagemodel.cpp:215
int rowCount(const QModelIndex &parent) const override
QAbstractListModel implementation.
Definition importimagemodel.cpp:1063
void finishRefresh()
Definition importimagemodel.cpp:585
void setCamItemInfos(const CamItemInfoList &infos)
Definition importimagemodel.cpp:475
void slotFileDeleted(const QString &folder, const QString &file, bool status)
Definition importimagemodel.cpp:564
virtual void itemInfosAboutToBeRemoved(int, int)
Definition importimagemodel.h:284
QVariant data(const QModelIndex &index, int role) const override
Definition importimagemodel.cpp:1025
QModelIndex indexForCamItemId(qlonglong id) const
Definition importimagemodel.cpp:225
void emitDataChangedForSelections(const QItemSelection &selection)
Definition importimagemodel.cpp:532
void preprocess(const QList< CamItemInfo > &infos)
int numberOfIndexesForCamItemId(qlonglong id) const
Definition importimagemodel.cpp:256
void reAddingFinished()
Definition importimagemodel.cpp:558
int numberOfIndexesForCamItemInfo(const CamItemInfo &info) const
Definition importimagemodel.cpp:251
static CamItemInfo retrieveCamItemInfo(const QModelIndex &index)
Definition importimagemodel.cpp:271
virtual void camItemInfosCleared()
Definition importimagemodel.h:279
void reAddCamItemInfos(const CamItemInfoList &infos)
Definition importimagemodel.cpp:553
QList< CamItemInfo > camItemInfos() const
Definition importimagemodel.cpp:481
void itemInfosAboutToBeAdded(const QList< CamItemInfo > &infos)
qlonglong camItemId(const QModelIndex &index) const
Definition importimagemodel.cpp:151
static qlonglong retrieveCamItemId(const QModelIndex &index)
Definition importimagemodel.cpp:291
virtual void setCameraThumbsController(CameraThumbsCtrl *const controller)
Definition importimagemodel.cpp:102
QList< qlonglong > camItemIds() const
Definition importimagemodel.cpp:486
void clearCamItemInfos()
Definition importimagemodel.cpp:455
void slotFileUploaded(const CamItemInfo &info)
Definition importimagemodel.cpp:575
QModelIndex indexForUrl(const QUrl &fileUrl) const
Definition importimagemodel.cpp:309
void itemInfosAdded(const QList< CamItemInfo > &infos)
void removeIndexs(const QList< QModelIndex > &indexes)
Definition importimagemodel.cpp:741
ImportItemModelRoles
Definition importimagemodel.h:39
@ ExtraDataRole
Definition importimagemodel.h:54
@ FilterModelRoles
Definition importimagemodel.h:61
@ ImportItemModelPointerRole
Definition importimagemodel.h:43
@ ExtraDataDuplicateCount
Definition importimagemodel.h:59
@ ImportItemModelInternalId
Definition importimagemodel.h:44
@ ThumbnailRole
Definition importimagemodel.h:50
QList< QModelIndex > indexesForUrl(const QUrl &fileUrl) const
Definition importimagemodel.cpp:331
void removeCamItemInfos(const QList< CamItemInfo > &infos)
Definition importimagemodel.cpp:766
void requestIncrementalRefresh()
Definition importimagemodel.cpp:661
void addCamItemInfo(const CamItemInfo &info)
Definition importimagemodel.cpp:416
QList< QModelIndex > indexesForCamItemId(qlonglong id) const
Definition importimagemodel.cpp:237
void finishIncrementalRefresh()
Definition importimagemodel.cpp:685
void itemInfosRemoved(const QList< CamItemInfo > &infos)
void itemInfosAboutToBeRemoved(const QList< CamItemInfo > &infos)
void removeIndex(const QModelIndex &index)
Definition importimagemodel.cpp:736
~ImportItemModel() override
Definition importimagemodel.cpp:97
void emitDataChangedForAll()
Definition importimagemodel.cpp:519
bool hasImage(qlonglong id) const
Definition importimagemodel.cpp:509
CamItemInfo camItemInfo(const QModelIndex &index) const
Definition importimagemodel.cpp:131
bool isRefreshing() const
Definition importimagemodel.cpp:591
void addCamItemInfos(const CamItemInfoList &infos)
Definition importimagemodel.cpp:421
void setKeepsFileUrlCache(bool keepCache)
Definition importimagemodel.cpp:116
void addCamItemInfosSynchronously(const Digikam::CamItemInfoList &infos)
Definition importimagemodel.cpp:443
void removeCamItemInfo(const CamItemInfo &info)
Definition importimagemodel.cpp:761
CamItemInfo & camItemInfoRef(const QModelIndex &index) const
Definition importimagemodel.cpp:141
void startRefresh()
Definition importimagemodel.cpp:580
QList< QModelIndex > indexesForCamItemInfo(const CamItemInfo &info) const
Definition importimagemodel.cpp:220
#define DECLARE_MODEL_DRAG_DROP_METHODS
Definition dragdropimplementations.h:80
Definition datefolderview.cpp:34
QList< CamItemInfo > CamItemInfoList
Definition camiteminfo.h:116