digiKam
Loading...
Searching...
No Matches
ditemslist.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-05-21
7 * Description : widget to display a list of items
8 *
9 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2008-2010 by Andi Clemens <andi dot clemens at googlemail dot com>
11 * SPDX-FileCopyrightText: 2009-2010 by Luka Renko <lure at kubuntu dot org>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// Qt includes
20
21#include <QBoxLayout>
22#include <QPushButton>
23#include <QStringList>
24#include <QTreeWidget>
25#include <QWidget>
26#include <QXmlStreamWriter>
27#include <QXmlStreamReader>
28#include <QIcon>
29#include <QUrl>
30
31// Local includes
32
33#include "loadingdescription.h"
34#include "digikam_export.h"
35#include "dinfointerface.h"
36
37namespace Digikam
38{
39
40class DItemsList;
41class DItemsListView;
42
48typedef bool (*DItemsListIsLessThanHandler)(const QTreeWidgetItem* current, const QTreeWidgetItem& other);
49
50class DIGIKAM_EXPORT DItemsListViewItem : public QTreeWidgetItem
51{
52
53public:
54
55 enum State
56 {
59 Failed
60 };
61
62public:
63
64 explicit DItemsListViewItem(DItemsListView* const view, const QUrl& url);
65 ~DItemsListViewItem() override;
66
67 bool hasValidThumbnail() const;
68
69 void setUrl(const QUrl& url);
70 QUrl url() const;
71
72 void setComments(const QString& comments);
73 QString comments() const;
74
75 void setTags(const QStringList& tags);
76 QStringList tags() const;
77
78 void setRating(int rating);
79 int rating() const;
80
81 void setThumb(const QPixmap& pix, bool hasThumb=true);
82 void setProgressAnimation(const QPixmap& pix);
83
84 void setProcessedIcon(const QIcon& icon);
85 void setState(State state);
86 State state() const;
87
88 void updateInformation();
89
90 void setIsLessThanHandler(DItemsListIsLessThanHandler fncptr);
91
96 virtual void updateItemWidgets() {};
97
98protected:
99
100 DItemsListView* view() const;
101
102private:
103
104 void setPixmap(const QPixmap& pix);
105 bool operator<(const QTreeWidgetItem& other) const override;
106
107private:
108
109 class Private;
110 Private* const d = nullptr;
111
112private:
113
114 Q_DISABLE_COPY(DItemsListViewItem)
115};
116
117// -------------------------------------------------------------------------
118
119class DIGIKAM_EXPORT DItemsListView : public QTreeWidget
120{
121 Q_OBJECT
122
123public:
124
126 {
127 Thumbnail = 0,
134 User6
135 };
136
137public:
138
139 explicit DItemsListView(DItemsList* const parent);
140 ~DItemsListView() override = default;
141
142 void setColumnLabel(ColumnType column, const QString& label);
143 void setColumnEnabled(ColumnType column, bool enable);
144 void setColumn(ColumnType column, const QString& label, bool enable);
145
146 DItemsListViewItem* findItem(const QUrl& url);
147 QModelIndex indexFromItem(DItemsListViewItem* item,
148 int column = 0) const;
149
150 DItemsListViewItem* getCurrentItem() const;
151
152 DInfoInterface* iface() const;
153 DItemsListIsLessThanHandler isLessThanHandler() const;
154
155Q_SIGNALS:
156
157 void signalAddedDropedItems(const QList<QUrl>&);
158 void signalItemClicked(QTreeWidgetItem*);
160
161private Q_SLOTS:
162
163 void slotItemClicked(QTreeWidgetItem* item, int column);
164
165public:
166
167 void enableDragAndDrop(const bool enable = true);
168
169private:
170
171 void dragEnterEvent(QDragEnterEvent* e) override;
172 void dragMoveEvent(QDragMoveEvent* e) override;
173 void dropEvent(QDropEvent* e) override;
174 void contextMenuEvent(QContextMenuEvent* e) override;
175
176 void drawRow(QPainter* p,
177 const QStyleOptionViewItem& opt,
178 const QModelIndex& index) const override;
179
180private:
181
182 QTreeWidgetItem* m_itemDraged = nullptr;
183};
184
185// -------------------------------------------------------------------------
186
187class DIGIKAM_EXPORT DItemsList : public QWidget
188{
189 Q_OBJECT
190
191public:
192
194 {
195 NoControlButtons = 0,
199 ControlButtonsBelow
200 };
201
203 {
204 Add = 0x1,
205 Remove = 0x2,
206 MoveUp = 0x4,
207 MoveDown = 0x8,
208 Clear = 0x10,
209 Load = 0x20,
210 Save = 0x40
211 };
212 Q_DECLARE_FLAGS(ControlButtons, ControlButton)
213
214public:
215
216 explicit DItemsList(QWidget* const parent);
217 ~DItemsList() override;
218
219 void setAllowRAW(bool allow);
220 void setAllowDuplicate(bool allow);
221
222 void loadImagesFromCurrentSelection();
223
227 void loadImagesFromCurrentAlbum();
228
232 bool checkSelection();
233
234 void setIconSize(int size);
235 int iconSize() const;
236
237 DItemsListView* listView() const;
238
239 void processing(const QUrl& url);
240 void processed(const QUrl& url, bool success);
241 void cancelProcess();
242 void clearProcessedStatus();
243
244 void setControlButtons(ControlButtons buttonMask);
245
251 QBoxLayout* setControlButtonsPlacement(ControlButtonPlacement placement);
252
258 void appendControlButtonsWidget(QWidget* const widget);
259
260 void enableControlButtons(bool enable = true);
261 void enableDragAndDrop(const bool enable = true);
262
263 void updateThumbnail(const QUrl& url);
264
265 virtual QList<QUrl> imageUrls(bool onlyUnprocessed = false) const;
266 virtual void removeItemByUrl(const QUrl& url);
267
268 void setCurrentUrl(const QUrl& url);
269 QUrl getCurrentUrl() const;
270
271 void setIface(DInfoInterface* const iface);
272 DInfoInterface* iface() const;
273
275
279 void setIsLessThanHandler(DItemsListIsLessThanHandler fncptr);
280 DItemsListIsLessThanHandler isLessThanHandler() const;
282
283Q_SIGNALS:
284
285 void signalAddItems(const QList<QUrl>&);
288 void signalRemovedItems(const QList<int>&);
291 void signalItemClicked(QTreeWidgetItem*);
293 void signalXMLSaveItem(QXmlStreamWriter&, int); // clazy:exclude=signal-with-return-value
294 void signalXMLLoadImageElement(QXmlStreamReader&); // clazy:exclude=signal-with-return-value
295 void signalXMLCustomElements(QXmlStreamWriter&); // clazy:exclude=signal-with-return-value
296 void signalXMLCustomElements(QXmlStreamReader&); // clazy:exclude=signal-with-return-value
297
298public Q_SLOTS:
299
300 virtual void slotAddImages(const QList<QUrl>& list);
301 virtual void slotRemoveItems();
302
303protected Q_SLOTS:
304
305 void slotProgressTimerDone();
306
307 virtual void slotAddItems();
308 virtual void slotMoveUpItems();
309 virtual void slotMoveDownItems();
310 virtual void slotClearItems();
311 virtual void slotLoadItems();
312 virtual void slotSaveItems();
313 virtual void slotThumbnail(const LoadingDescription&, const QPixmap&);
314 virtual void slotImageListChanged();
315
316private:
317
318 // Disable
319 DItemsList() = delete;
320
321 class Private;
322 Private* const d = nullptr;
323};
324
325} // namespace Digikam
326
327Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DItemsList::ControlButtons)
Definition dinfointerface.h:48
Definition ditemslist.h:51
State
Definition ditemslist.h:56
@ Success
Definition ditemslist.h:58
@ Waiting
Definition ditemslist.h:57
void setIsLessThanHandler(DItemsListIsLessThanHandler fncptr)
virtual void updateItemWidgets()
Definition ditemslist.h:96
Definition ditemslist.h:120
void signalAddedDropedItems(const QList< QUrl > &)
~DItemsListView() override=default
ColumnType
Definition ditemslist.h:126
@ Filename
Definition ditemslist.h:128
@ User3
Definition ditemslist.h:131
@ User5
Definition ditemslist.h:133
@ User1
Definition ditemslist.h:129
@ User4
Definition ditemslist.h:132
@ User2
Definition ditemslist.h:130
void signalItemClicked(QTreeWidgetItem *)
Definition ditemslist.h:188
void signalItemClicked(QTreeWidgetItem *)
void signalRemovedItems(const QList< int > &)
ControlButtonPlacement
Definition ditemslist.h:194
@ ControlButtonsLeft
Definition ditemslist.h:196
@ ControlButtonsAbove
Definition ditemslist.h:198
@ ControlButtonsRight
Definition ditemslist.h:197
void signalAddItems(const QList< QUrl > &)
ControlButton
Definition ditemslist.h:203
void signalXMLSaveItem(QXmlStreamWriter &, int)
void signalFoundRAWImages(bool)
void signalXMLCustomElements(QXmlStreamReader &)
void signalXMLLoadImageElement(QXmlStreamReader &)
void signalXMLCustomElements(QXmlStreamWriter &)
void signalImageListChanged()
void signalContextMenuRequested()
Definition loadingdescription.h:35
Definition datefolderview.cpp:34
bool operator<(const ThumbnailIdentifier &a, const ThumbnailIdentifier &b)
Definition albumthumbnailloader.cpp:88
bool(* DItemsListIsLessThanHandler)(const QTreeWidgetItem *current, const QTreeWidgetItem &other)
Definition ditemslist.h:48
Definition abstractalbumtreeview_p.h:75