digiKam
Loading...
Searching...
No Matches
tableview_model.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 : 2013-02-12
7 * Description : Wrapper model for table view
8 *
9 * SPDX-FileCopyrightText: 2017-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2013 by Michael G. Hansen <mike at mghansen dot de>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QAbstractItemModel>
21#include <QUrl>
22
23// Local includes
24
25#include "coredbchangesets.h"
26#include "tableview_shared.h"
27
28class QMimeData;
29
30namespace Digikam
31{
32
33class ImageChangeset;
34class ItemFilterModel;
35class ItemFilterSettings;
36class ItemInfo;
37class ItemInfoList;
38class TableViewColumn;
39class TableViewColumnConfiguration;
40class TableViewColumnDescription;
41class TableViewColumnFactory;
42class TableViewColumnProfile;
43
44class TableViewModel : public QAbstractItemModel
45{
46 Q_OBJECT
47
48public:
49
56
58
59public:
60
61 class Item
62 {
63 public:
64
65 Item() = default;
66 ~Item();
67
68 void addChild(Item* const newChild);
69 void insertChild(const int pos, Item* const newChild);
70 void takeChild(Item* const oldChild);
71 Item* findChildWithImageId(const qlonglong searchImageId);
72
73 public:
74
75 qlonglong imageId = 0;
76 Item* parent = nullptr;
77 QList<Item*> children;
78
79 private:
80
81 // Disable
82 Item(const Item&) = delete;
83 Item& operator=(const Item&) = delete;
84 };
85
86public:
87
88 explicit TableViewModel(TableViewShared* const sharedObject, QObject* const parent = nullptr);
89 ~TableViewModel() override;
90
91 void addColumnAt(const TableViewColumnDescription& description,
92 const int targetColumn = -1);
94 const int targetColumn = -1);
95 void removeColumnAt(const int columnIndex);
96 TableViewColumn* getColumnObject(const int columnIndex);
97 QList<TableViewColumn*> getColumnObjects();
98 QModelIndex fromItemFilterModelIndex(const QModelIndex& imageFilterModelIndex);
99 QModelIndex fromItemModelIndex(const QModelIndex& imageModelIndex);
100 QModelIndex toItemFilterModelIndex(const QModelIndex& i) const;
101 QModelIndex toItemModelIndex(const QModelIndex& i) const;
102 void loadColumnProfile(const TableViewColumnProfile& columnProfile);
104
105 QModelIndex deepRowIndex(const int rowNumber) const;
106 int indexToDeepRowNumber(const QModelIndex& index) const;
107 int deepRowCount() const;
108 int firstDeepRowNotInList(const QList<QModelIndex>& needleList);
109 QModelIndex toCol0(const QModelIndex& anIndex) const;
110
111 QModelIndex itemIndex(Item* const item) const;
112 QModelIndex indexFromImageId(const qlonglong imageId, const int columnIndex) const;
113 Item* itemFromImageId(const qlonglong imageId) const;
114 Item* itemFromIndex(const QModelIndex& i) const;
115 ItemInfo infoFromItem(Item* const item) const;
116 ItemInfoList infosFromItems(const QList<Item*>& items) const;
117
118 QVariant itemDatabaseFieldRaw(Item* const item, const DatabaseFields::Set& requestedField);
120
121 qlonglong imageId(const QModelIndex& anIndex) const;
122 QList<qlonglong> imageIds(const QModelIndexList& indexList) const;
123 QList<ItemInfo> imageInfos(const QModelIndexList& indexList) const;
124 ItemInfo imageInfo(const QModelIndex& index) const;
125 QList<ItemInfo> allItemInfo() const;
126
127 QList<Item*> sortItems(const QList<Item*>& itemList);
128 class LessThan;
129 bool lessThan(Item* const itemA, Item* const itemB);
130 int findChildSortedPosition(Item* const parentItem, Item* const childItem);
131
132 void scheduleResort();
134 void setGroupingMode(const GroupingMode newGroupingMode);
135
136public:
137
138 QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
139 QModelIndex parent(const QModelIndex& childIndex) const override;
140 int rowCount(const QModelIndex& parent) const override;
141 int columnCount(const QModelIndex& i) const override;
142 QVariant data(const QModelIndex& i, int role) const override;
143 QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
144 Qt::ItemFlags flags(const QModelIndex& index) const override;
145 bool hasChildren(const QModelIndex& parent = QModelIndex()) const override;
146
148 Qt::DropActions supportedDropActions() const override;
149 QStringList mimeTypes() const override;
150 bool dropMimeData(const QMimeData* data,
151 Qt::DropAction action,
152 int row,
153 int column,
154 const QModelIndex& parent) override;
155 QMimeData* mimeData(const QModelIndexList& indexes) const override;
156
157protected:
158
159 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
160
161private Q_SLOTS:
162
163 void slotPopulateModelWithNotifications();
164 void slotPopulateModel(const bool sendNotifications);
165
166 void slotColumnDataChanged(const qlonglong imageId);
167 void slotColumnAllDataChanged();
168
169 void slotSourceModelAboutToBeReset();
170 void slotSourceModelReset();
171 void slotSourceRowsAboutToBeInserted(const QModelIndex& parent, int start, int end);
172 void slotSourceRowsInserted(const QModelIndex& parent, int start, int end);
173 void slotSourceRowsAboutToBeRemoved(const QModelIndex& parent, int start, int end);
174 void slotSourceRowsRemoved(const QModelIndex& parent, int start, int end);
175 void slotSourceRowsAboutToBeMoved(const QModelIndex& sourceParent, int sourceStart, int sourceEnd,
176 const QModelIndex& destinationParent, int destinationRow);
177 void slotSourceRowsMoved(const QModelIndex& sourceParent, int sourceStart, int sourceEnd,
178 const QModelIndex& destinationParent, int destinationRow);
179 void slotSourceLayoutAboutToBeChanged();
180 void slotSourceLayoutChanged();
181
182 void slotDatabaseImageChanged(const ImageChangeset& imageChangeset);
183
184 void slotFilterSettingsChanged(const ItemFilterSettings& settings);
185 void slotResortModel();
186 void slotClearModel(const bool sendNotifications);
187
188public Q_SLOTS:
189
190 void slotSetActive(const bool isActive);
191
192Q_SIGNALS:
193
195
196private:
197
198 Item* createItemFromSourceIndex(const QModelIndex& imageFilterModelIndex);
199 void addSourceModelIndex(const QModelIndex& imageModelIndex, const bool sendNotifications);
200
201private:
202
203 TableViewShared* const s = nullptr;
204
205 class Private;
206 const QScopedPointer<Private> d;
207};
208
209} // namespace Digikam
210
Definition coredbfields.h:521
Definition coredbfields.h:376
Definition coredbchangesets.h:38
Definition itemfiltersettings.h:85
Definition iteminfolist.h:37
Definition iteminfo.h:68
Definition tableview_columnfactory.h:41
Definition tableview_columnfactory.h:72
Definition tableview_columnfactory.h:316
Definition tableview_columnfactory.h:187
Definition tableview_model.h:62
void addChild(Item *const newChild)
Definition tableview_model.cpp:55
Item * parent
Definition tableview_model.h:76
Item * findChildWithImageId(const qlonglong searchImageId)
Definition tableview_model.cpp:74
~Item()
Definition tableview_model.cpp:50
QList< Item * > children
Definition tableview_model.h:77
void takeChild(Item *const oldChild)
Definition tableview_model.cpp:69
void insertChild(const int pos, Item *const newChild)
Definition tableview_model.cpp:62
qlonglong imageId
Definition tableview_model.h:75
Definition tableview_model.h:45
QModelIndex fromItemFilterModelIndex(const QModelIndex &imageFilterModelIndex)
Definition tableview_model.cpp:976
Qt::DropActions supportedDropActions() const override
drag-and-drop related functions
Definition tableview_model.cpp:1282
QModelIndex toItemFilterModelIndex(const QModelIndex &i) const
Definition tableview_model.cpp:192
DatabaseFields::Hash< QVariant > DatabaseFieldsHashRaw
Definition tableview_model.h:57
QVariant data(const QModelIndex &i, int role) const override
Definition tableview_model.cpp:216
DatabaseFieldsHashRaw itemDatabaseFieldsRaw(Item *const item, const DatabaseFields::Set &requestedSet)
Definition tableview_model.cpp:1026
Item * itemFromImageId(const qlonglong imageId) const
Definition tableview_model.cpp:957
QList< ItemInfo > allItemInfo() const
Definition tableview_model.cpp:1384
QModelIndex toItemModelIndex(const QModelIndex &i) const
Definition tableview_model.cpp:204
QList< Item * > sortItems(const QList< Item * > &itemList)
Definition tableview_model.cpp:1176
Item * itemFromIndex(const QModelIndex &i) const
Definition tableview_model.cpp:962
~TableViewModel() override
Definition tableview_model.cpp:177
QVariant itemDatabaseFieldRaw(Item *const item, const DatabaseFields::Set &requestedField)
Definition tableview_model.cpp:1034
QList< TableViewColumn * > getColumnObjects()
Definition tableview_model.cpp:759
ItemInfo infoFromItem(Item *const item) const
Definition tableview_model.cpp:1004
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition tableview_model.cpp:745
int deepRowCount() const
Definition tableview_model.cpp:1492
int rowCount(const QModelIndex &parent) const override
Definition tableview_model.cpp:287
QModelIndex indexFromImageId(const qlonglong imageId, const int columnIndex) const
Definition tableview_model.cpp:1058
QList< ItemInfo > imageInfos(const QModelIndexList &indexList) const
Definition tableview_model.cpp:1103
QModelIndex parent(const QModelIndex &childIndex) const override
Definition tableview_model.cpp:264
TableViewColumn * getColumnObject(const int columnIndex)
Definition tableview_model.cpp:432
bool hasChildren(const QModelIndex &parent=QModelIndex()) const override
Definition tableview_model.cpp:1353
QModelIndex itemIndex(Item *const item) const
Definition tableview_model.cpp:1341
GroupingMode groupingMode() const
Definition tableview_model.cpp:1389
QModelIndex toCol0(const QModelIndex &anIndex) const
Definition tableview_model.cpp:1528
QModelIndex deepRowIndex(const int rowNumber) const
Definition tableview_model.cpp:1405
QStringList mimeTypes() const override
Definition tableview_model.cpp:1287
QMimeData * mimeData(const QModelIndexList &indexes) const override
Definition tableview_model.cpp:1254
ItemInfo imageInfo(const QModelIndex &index) const
Definition tableview_model.cpp:1129
GroupingMode
Definition tableview_model.h:51
@ GroupingShowSubItems
Definition tableview_model.h:54
@ GroupingHideGrouped
Definition tableview_model.h:52
@ GroupingIgnoreGrouping
Definition tableview_model.h:53
void slotSetActive(const bool isActive)
Definition tableview_model.cpp:1587
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Definition tableview_model.cpp:231
void removeColumnAt(const int columnIndex)
Definition tableview_model.cpp:417
int indexToDeepRowNumber(const QModelIndex &index) const
Definition tableview_model.cpp:1445
void loadColumnProfile(const TableViewColumnProfile &columnProfile)
Definition tableview_model.cpp:450
int columnCount(const QModelIndex &i) const override
Definition tableview_model.cpp:182
ItemInfoList infosFromItems(const QList< Item * > &items) const
Definition tableview_model.cpp:1014
QList< qlonglong > imageIds(const QModelIndexList &indexList) const
Definition tableview_model.cpp:1077
void addColumnAt(const TableViewColumnDescription &description, const int targetColumn=-1)
Definition tableview_model.cpp:323
int findChildSortedPosition(Item *const parentItem, Item *const childItem)
Definition tableview_model.cpp:1600
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
Definition tableview_model.cpp:1299
void sort(int column, Qt::SortOrder order=Qt::AscendingOrder) override
Definition tableview_model.cpp:1187
void setGroupingMode(const GroupingMode newGroupingMode)
Definition tableview_model.cpp:1394
int firstDeepRowNotInList(const QList< QModelIndex > &needleList)
Definition tableview_model.cpp:1533
QModelIndex fromItemModelIndex(const QModelIndex &imageModelIndex)
Definition tableview_model.cpp:990
TableViewColumnProfile getColumnProfile() const
Definition tableview_model.cpp:437
qlonglong imageId(const QModelIndex &anIndex) const
Definition tableview_model.cpp:1372
bool lessThan(Item *const itemA, Item *const itemB)
Definition tableview_model.cpp:1217
void scheduleResort()
Definition tableview_model.cpp:1329
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
Definition tableview_model.cpp:304
Definition tableview_shared.h:35
Definition datefolderview.cpp:34