42class DIGIKAM_DATABASE_EXPORT
ItemModel :
public QAbstractListModel,
54 ItemModelPointerRole = Qt::UserRole,
55 ItemModelInternalId = Qt::UserRole + 1,
61 ThumbnailRole = Qt::UserRole + 2,
66 CreationDateRole = Qt::UserRole + 3,
71 ExtraDataRole = Qt::UserRole + 5,
76 ExtraDataDuplicateCount = Qt::UserRole + 6,
82 LTLeftPanelRole = Qt::UserRole + 50,
87 LTRightPanelRole = Qt::UserRole + 51,
92 SubclassRoles = Qt::UserRole + 100,
97 FilterModelRoles = Qt::UserRole + 500
102 explicit ItemModel(QObject*
const parent =
nullptr);
109 void setKeepsFilePathCache(
bool keepCache);
110 bool keepsFilePathCache()
const;
125 ItemInfo imageInfo(
const QModelIndex& index)
const;
126 ItemInfo& imageInfoRef(
const QModelIndex& index)
const;
127 qlonglong imageId(
const QModelIndex& index)
const;
128 QList<ItemInfo> imageInfos(
const QList<QModelIndex>& indexes)
const;
129 QList<qlonglong> imageIds(
const QList<QModelIndex>& indexes)
const;
137 ItemInfo& imageInfoRef(
int row)
const;
138 qlonglong imageId(
int row)
const;
143 QModelIndex indexForItemInfo(
const ItemInfo& info)
const;
144 QModelIndex indexForItemInfo(
const ItemInfo& info,
const QVariant& extraValue)
const;
145 QModelIndex indexForImageId(qlonglong
id)
const;
146 QModelIndex indexForImageId(qlonglong
id,
const QVariant& extraValue)
const;
147 QList<QModelIndex> indexesForItemInfo(
const ItemInfo& info)
const;
148 QList<QModelIndex> indexesForImageId(qlonglong
id)
const;
150 int numberOfIndexesForItemInfo(
const ItemInfo& info)
const;
151 int numberOfIndexesForImageId(qlonglong
id)
const;
160 QModelIndex indexForPath(
const QString& filePath)
const;
161 ItemInfo imageInfo(
const QString& filePath)
const;
162 QList<QModelIndex> indexesForPath(
const QString& filePath)
const;
163 QList<ItemInfo> imageInfos(
const QString& filePath)
const;
171 void addItemInfo(
const ItemInfo& info);
172 void addItemInfos(
const QList<ItemInfo>& infos);
173 void addItemInfos(
const QList<ItemInfo>& infos,
const QList<QVariant>& extraValues);
178 void clearItemInfos();
183 void setItemInfos(
const QList<ItemInfo>& infos);
188 void removeIndex(
const QModelIndex& indexes);
189 void removeIndexes(
const QList<QModelIndex>& indexes);
190 void removeItemInfo(
const ItemInfo& info);
191 void removeItemInfos(
const QList<ItemInfo>& infos);
192 void removeItemInfos(
const QList<ItemInfo>& infos,
const QList<QVariant>& extraValues);
201 void addItemInfoSynchronously(
const ItemInfo& info);
202 void addItemInfosSynchronously(
const QList<ItemInfo>& infos);
203 void addItemInfosSynchronously(
const QList<ItemInfo>& infos,
const QList<QVariant>& extraValues);
210 void ensureHasItemInfo(
const ItemInfo& info);
211 void ensureHasItemInfos(
const QList<ItemInfo>& infos);
212 void ensureHasItemInfos(
const QList<ItemInfo>& infos,
const QList<QVariant>& extraValues);
217 void ensureHasGroupedImages(
const ItemInfo& groupLeader);
219 QList<ItemInfo> imageInfos()
const;
220 QList<qlonglong> imageIds()
const;
221 QList<ItemInfo> uniqueItemInfos()
const;
223 bool hasImage(qlonglong
id)
const;
224 bool hasImage(
const ItemInfo& info)
const;
225 bool hasImage(
const ItemInfo& info,
const QVariant& extraValue)
const;
226 bool hasImage(qlonglong
id,
const QVariant& extraValue)
const;
228 bool isEmpty()
const;
229 int itemCount()
const;
246 void setPreprocessor(QObject*
const processor);
247 void unsetPreprocessor(QObject*
const processor);
254 bool isRefreshing()
const;
260 void setSendRemovalSignals(
bool send);
262 QVariant data(
const QModelIndex& index,
int role = Qt::DisplayRole)
const override;
263 QVariant headerData(
int section, Qt::Orientation orientation,
int role = Qt::DisplayRole)
const override;
264 int rowCount(
const QModelIndex& parent = QModelIndex())
const override;
265 Qt::ItemFlags flags(
const QModelIndex& index)
const override;
266 QModelIndex index(
int row,
int column = 0,
const QModelIndex& parent = QModelIndex())
const override;
272 static ItemInfo retrieveItemInfo(
const QModelIndex& index);
273 static qlonglong retrieveImageId(
const QModelIndex& index);
308 void preprocess(
const QList<ItemInfo>& infos,
const QList<QVariant>&);
309 void processAdded(
const QList<ItemInfo>& infos,
const QList<QVariant>&);
338 void reAddItemInfos(
const QList<ItemInfo>& infos,
const QList<QVariant>& extraValues);
339 void reAddingFinished();
350 void finishRefresh();
357 void requestIncrementalRefresh();
358 bool hasIncrementalRefreshPending()
const;
365 void startIncrementalRefresh();
366 void finishIncrementalRefresh();
368 void emitDataChangedForAll();
369 void emitDataChangedForSelection(
const QItemSelection& selection);
389 void appendInfos(
const QList<ItemInfo>& infos,
const QList<QVariant>& extraValues);
390 void appendInfosChecked(
const QList<ItemInfo>& infos,
const QList<QVariant>& extraValues);
391 void publiciseInfos(
const QList<ItemInfo>& infos,
const QList<QVariant>& extraValues);
392 void cleanSituationChecks();
393 void removeRowPairsWithCheck(
const QList<QPair<int, int> >& toRemove);
394 void removeRowPairs(
const QList<QPair<int, int> >& toRemove);
407 Private*
const d =
nullptr;