digiKam
Loading...
Searching...
No Matches
setupcollectionview.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 : 2008-11-15
7 * Description : collections setup tab model/view
8 *
9 * SPDX-FileCopyrightText: 2008-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2005-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
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 <QAbstractItemDelegate>
22#include <QList>
23#include <QTreeView>
24#include <QStyledItemDelegate>
25#include <QPushButton>
26#include <QToolButton>
27
28// Local includes
29
30#include "collectionlocation.h"
31#include "dwitemdelegate.h"
32#include "digikam_export.h"
33
34namespace Digikam
35{
36
37class DIGIKAM_GUI_EXPORT SetupCollectionModel : public QAbstractItemModel
38{
39 Q_OBJECT
40
41public:
42
51 {
53 IsCategoryRole = Qt::UserRole,
54
56 CategoryButtonDisplayRole = Qt::UserRole + 1,
57 CategoryButtonMapId = Qt::UserRole + 2,
58
60 IsAppendRole = Qt::UserRole + 3,
61
63 AppendDecorationRole = Qt::UserRole + 4,
64 AppendMapId = Qt::UserRole + 5,
65
67 IsUpdateRole = Qt::UserRole + 6,
68
70 UpdateDecorationRole = Qt::UserRole + 7,
71 UpdateMapId = Qt::UserRole + 8,
72
74 IsDeleteRole = Qt::UserRole + 9,
75
77 DeleteDecorationRole = Qt::UserRole + 10,
78 DeleteMapId = Qt::UserRole + 11
79 };
80
82 {
83 ColumnStatus = 0,
84 ColumnName = 1,
85 ColumnPath = 2,
86 ColumnAppendButton = 3,
87 ColumnUpdateButton = 4,
88 ColumnDeleteButton = 5,
89 NumberOfColumns
90 };
91
93 {
94 CategoryLocal = 0,
95 CategoryRemovable = 1,
96 CategoryRemote = 2,
97 NumberOfCategories
98 };
99
100public:
101
102 explicit SetupCollectionModel(QObject* const parent = nullptr);
103 ~SetupCollectionModel() override;
104
106 void loadCollections();
107
109 void setParentWidgetForDialogs(QWidget* const widget);
110
112 void apply();
113
114 QModelIndex indexForCategory(Category category) const;
115 QList<QModelIndex> categoryIndexes() const;
116
118
119 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
120 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
121 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
122 int columnCount(const QModelIndex& parent = QModelIndex()) const override;
123 Qt::ItemFlags flags(const QModelIndex& index) const override;
124 bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
125 QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
126 QModelIndex parent(const QModelIndex& index) const override;
127
128/*
129 virtual Qt::DropActions supportedDropActions() const;
130 virtual QStringList mimeTypes() const;
131 virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex& parent);
132 virtual QMimeData * mimeData(const QModelIndexList& indexes) const;
133*/
134
135Q_SIGNALS:
136
138
140
141public Q_SLOTS:
142
148 void slotCategoryButtonPressed(int mappedId);
149
155 void slotAppendPressed(int mappedId);
156 void slotUpdatePressed(int mappedId);
157 void slotDeletePressed(int mappedId);
158
159public:
160
162
163protected Q_SLOTS:
164
165 void addCollection(int category);
166 void updateCollection(int internalId);
167 void deleteCollection(int internalId);
168
169protected:
170
171 QModelIndex indexForId(int id, int column) const;
172
173 bool askForNewCollectionPath(bool adding,
174 int category,
175 QString* const newPath,
176 QString* const newLabel);
177 bool askForNewCollectionCategory(int* const category);
178
179 int categoryButtonMapId(const QModelIndex& index) const;
180 int buttonMapId(const QModelIndex& index) const;
181
182 static Category typeToCategory(CollectionLocation::Type type);
183
184protected:
185
186 class Item
187 {
188 public:
189
190 Item();
191 explicit Item(const CollectionLocation& location);
192 Item(const QString& path, const QString& label, SetupCollectionModel::Category category);
193
194 public:
195
197 QStringList childs;
198 QString label;
199 QString path;
200 int parentId = 0;
201 int orgIndex = 0;
202 bool appended = false;
203 bool updated = false;
204 bool deleted = false;
205 };
206
207protected:
208
209 QList<Item> m_collections;
210 QWidget* m_dialogParentWidget = nullptr;
211
212private Q_SLOTS:
213
214 void slotHelp();
215};
216
217// -----------------------------------------------------------------------
218
219class SetupCollectionTreeView : public QTreeView
220{
221 Q_OBJECT
222
223public:
224
225 explicit SetupCollectionTreeView(QWidget* const parent = nullptr);
226
227 void setModel(SetupCollectionModel* model);
228
229protected Q_SLOTS:
230
232
233private:
234
235 void setModel(QAbstractItemModel* model) override
236 {
237 setModel(static_cast<SetupCollectionModel*>(model));
238 }
239};
240
241// -----------------------------------------------------------------------
242
244{
245 Q_OBJECT
246
247public:
248
249 explicit SetupCollectionDelegate(QAbstractItemView* const view,
250 QObject* const parent = nullptr);
251 ~SetupCollectionDelegate() override;
252
253 QWidget* createEditor(QWidget* parent,
254 const QStyleOptionViewItem& option,
255 const QModelIndex& index) const override;
256
257 bool editorEvent(QEvent* event,
258 QAbstractItemModel* model,
259 const QStyleOptionViewItem& option,
260 const QModelIndex& index) override;
261
262 void paint(QPainter* painter,
263 const QStyleOptionViewItem& option,
264 const QModelIndex& index) const override;
265
266 void setEditorData(QWidget* editor,
267 const QModelIndex& index) const override;
268
269 void setModelData(QWidget* editor,
270 QAbstractItemModel* model,
271 const QModelIndex& index) const override;
272
273 QSize sizeHint(const QStyleOptionViewItem& option,
274 const QModelIndex& index) const override;
275
276 void updateEditorGeometry(QWidget* editor,
277 const QStyleOptionViewItem& option,
278 const QModelIndex& index) const override;
279
280 QList<QWidget*> createItemWidgets(const QModelIndex& index) const override;
281 void updateItemWidgets(const QList<QWidget*>& widgets,
282 const QStyleOptionViewItem& option,
283 const QPersistentModelIndex& index) const override;
284
285Q_SIGNALS:
286
287 void categoryButtonPressed(int mappedId) const; // clazy:exclude=const-signal-or-slot
288 void appendPressed(int mappedId) const; // clazy:exclude=const-signal-or-slot
289 void updatePressed(int mappedId) const; // clazy:exclude=const-signal-or-slot
290 void deletePressed(int mappedId) const; // clazy:exclude=const-signal-or-slot
291
292protected:
293
294 QStyledItemDelegate* m_styledDelegate = nullptr;
295
296 QPushButton* m_samplePushButton = nullptr;
297 QToolButton* m_sampleAppendButton = nullptr;
298 QToolButton* m_sampleUpdateButton = nullptr;
299 QToolButton* m_sampleDeleteButton = nullptr;
301};
302
303} // namespace Digikam
Definition collectionlocation.h:31
Type
Definition collectionlocation.h:70
Definition dwitemdelegate.h:50
Definition setupcollectionview.h:244
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Definition setupcollectionview.cpp:305
void appendPressed(int mappedId) const
QList< QWidget * > createItemWidgets(const QModelIndex &index) const override
Definition setupcollectionview.cpp:92
void updatePressed(int mappedId) const
void categoryButtonPressed(int mappedId) const
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
Definition setupcollectionview.cpp:315
int m_categoryMaxStyledWidth
Definition setupcollectionview.h:300
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
Definition setupcollectionview.cpp:299
void updateItemWidgets(const QList< QWidget * > &widgets, const QStyleOptionViewItem &option, const QPersistentModelIndex &index) const override
Definition setupcollectionview.cpp:222
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Definition setupcollectionview.cpp:320
QStyledItemDelegate * m_styledDelegate
Definition setupcollectionview.h:294
void deletePressed(int mappedId) const
QPushButton * m_samplePushButton
Definition setupcollectionview.h:296
~SetupCollectionDelegate() override
Definition setupcollectionview.cpp:88
QToolButton * m_sampleUpdateButton
Definition setupcollectionview.h:298
void setEditorData(QWidget *editor, const QModelIndex &index) const override
Definition setupcollectionview.cpp:310
QToolButton * m_sampleDeleteButton
Definition setupcollectionview.h:299
QToolButton * m_sampleAppendButton
Definition setupcollectionview.h:297
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
Definition setupcollectionview.cpp:147
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Definition setupcollectionview.cpp:294
Definition setupcollectionview.h:187
QString path
Definition setupcollectionview.h:199
QStringList childs
Definition setupcollectionview.h:197
QString label
Definition setupcollectionview.h:198
CollectionLocation location
Definition setupcollectionview.h:196
Definition setupcollectionview.h:38
Category
Definition setupcollectionview.h:93
SetupCollectionDataRole
Definition setupcollectionview.h:51
void collectionsLoaded()
Emitted when all collections were loaded and the model reset in loadCollections.
QList< Item > m_collections
Definition setupcollectionview.h:209
Columns
Definition setupcollectionview.h:82
QString lastAddedCollectionPath
Definition setupcollectionview.h:161
Definition setupcollectionview.h:220
void modelLoadedCollections()
Definition setupcollectionview.cpp:373
void setModel(SetupCollectionModel *model)
Definition setupcollectionview.cpp:340
qulonglong value
Definition itemviewutilities.cpp:585
Definition datefolderview.cpp:34