digiKam
Loading...
Searching...
No Matches
abstractalbumtreeview.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 : 2009-03-25
7 * Description : Tree View for album models
8 *
9 * SPDX-FileCopyrightText: 2009-2010 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2010-2011 by Andi Clemens <andi dot clemens at gmail dot com>
11 * SPDX-FileCopyrightText: 2009-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// Qt includes
20
21#include <QTreeView>
22
23// Local includes
24
25#include "albummanager.h"
26#include "albummodel.h"
27#include "albumfiltermodel.h"
28#include "albumpointer.h"
29#include "statesavingobject.h"
30
31namespace Digikam
32{
33
34class ContextMenuHelper;
35class TagModificationHelper;
36
37// NOTE: This structure name can be in conflict with QAbstractItemView::State. FIXME later.
38struct State;
39
51class AbstractAlbumTreeView : public QTreeView,
53{
54 Q_OBJECT
55
56public:
57
91 Q_DECLARE_FLAGS(Flags, Flag)
92
93public:
94
100 AbstractAlbumTreeView(QWidget* const parent, Flags flags);
101 ~AbstractAlbumTreeView() override;
102
105
109 void setExpandOnSingleClick(const bool doThat);
110
114 void setExpandNewCurrentItem(const bool doThat);
115
122 void setSelectAlbumOnClick(const bool selectOnClick);
123
131 void setEnableContextMenu(const bool enable);
132
141 void setSelectOnContextMenu(const bool select);
142
148 void setContextMenuIcon(const QPixmap& pixmap);
149 void setContextMenuTitle(const QString& title);
150
156 QModelIndex indexVisuallyAt(const QPoint& p);
157
167 bool expandMatches(const QModelIndex& index);
168
170
184 void doLoadState() override;
185 void doSaveState() override;
186
188
194 void setAlbumManagerCurrentAlbum(const bool setCurrentAlbum);
195
203 {
204 public:
205
207 virtual ~ContextMenuElement() = default;
208
219 Album* album) = 0;
220
221 private:
222
223 Q_DISABLE_COPY(ContextMenuElement)
224 };
225
226 void addContextMenuElement(ContextMenuElement* const element);
227 void removeContextMenuElement(ContextMenuElement* const element);
228 QList<ContextMenuElement*> contextMenuElements() const;
229
230 template<class A>
231 QList<A*> currentAlbums();
232
236 bool viewportEvent(QEvent* event) override;
237
241 QList<Album*> selectedItems();
242
243public Q_SLOTS:
244
245 void setSearchTextSettings(const SearchTextSettings& settings);
246
254 void setCurrentAlbums(const QList<Album*>& albums, bool selectInAlbumManager = true);
255
260
265
271 void expandEverything(const QModelIndex& index);
272
276 void slotExpandNode();
277
281 void slotCollapseNode();
282
287
288Q_SIGNALS:
289
293 void currentAlbumChanged(Album* currentAlbum);
294
298 void selectedAlbumsChanged(const QList<Album*>& selectedAlbums);
299
300protected Q_SLOTS:
301
305 virtual void slotRootAlbumAvailable();
306
307 void slotSearchTextSettingsChanged(bool wasSearching, bool searching);
308 void slotSearchTextSettingsAboutToChange(bool searched, bool willSearch);
309 void slotCurrentChanged();
311
313
314protected:
315
317
318 // Context menu handling
319
330 virtual bool showContextMenuAt(QContextMenuEvent* event, Album* albumForEvent);
331
338 virtual QPixmap contextMenuIcon() const;
339
345 virtual QString contextMenuTitle() const;
346
354 virtual void addCustomContextMenuActions(ContextMenuHelper& cmh, Album* album);
355
365 virtual void handleCustomContextMenuAction(QAction* action,
366 const AlbumPointer<Album>& album);
367
369
371
373
374 void mousePressEvent(QMouseEvent* e) override;
375
376 void rowsInserted(const QModelIndex& index, int start, int end) override;
377 void rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end) override;
378 void startDrag(Qt::DropActions supportedActions) override;
379 void dragEnterEvent(QDragEnterEvent* e) override;
380 void dragMoveEvent(QDragMoveEvent* e) override;
381 void dragLeaveEvent(QDragLeaveEvent* e) override;
382 void dropEvent(QDropEvent* e) override;
383
384 virtual void middleButtonPressed(Album* a);
385 virtual QPixmap pixmapForDrag(const QStyleOptionViewItem& option, QList<QModelIndex> indexes);
386
387 void setAlbumFilterModel(AlbumFilterModel* const filterModel);
388 void setAlbumModel(AbstractSpecificAlbumModel* const model);
389
391
392protected:
393
397
402
403private:
404
405 void saveStateRecursive(const QModelIndex& index,
406 QList<int>& selection, QList<int>& expansion);
407
416 void restoreStateForHierarchy(const QModelIndex& index,
417 const QMap<int, Digikam::State>& stateStore);
418
422 void restoreState(const QModelIndex& index,
423 const QMap<int, Digikam::State>& stateStore);
424
430 void contextMenuEvent(QContextMenuEvent* event) override;
431
432private Q_SLOTS:
433
441 void adaptColumnsOnDataChange(const QModelIndex& topLeft, const QModelIndex& bottomRight);
442
451 void adaptColumnsOnRowChange(const QModelIndex& parent, int start, int end);
452
456 void adaptColumnsOnLayoutChange();
457
462 void currentAlbumChangedForBackupSelection(Album* currentAlbum);
463
467 void slotScrollBarValueChanged(int value);
468 void slotScrollBarActionTriggered(int action);
469
470private:
471
472 class Private;
473 Private* const d = nullptr;
474};
475
476} // namespace Digikam
477
478Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::AbstractAlbumTreeView::Flags)
Definition abstractalbumtreeview.h:203
virtual void addActions(AbstractAlbumTreeView *view, ContextMenuHelper &cmh, Album *album)=0
Definition abstractalbumtreeview_p.h:141
Definition abstractalbumtreeview.h:53
QList< ContextMenuElement * > contextMenuElements() const
Definition abstractalbumtreeview.cpp:1078
virtual QString contextMenuTitle() const
Definition abstractalbumtreeview.cpp:1063
void setAlbumFilterModel(AlbumFilterModel *const filterModel)
Definition abstractalbumtreeview.cpp:102
void scrollToSelectedAlbum()
Definition abstractalbumtreeview.cpp:860
void slotCurrentChanged()
Definition abstractalbumtreeview.cpp:412
virtual QPixmap pixmapForDrag(const QStyleOptionViewItem &option, QList< QModelIndex > indexes)
Definition abstractalbumtreeview.cpp:539
void mousePressEvent(QMouseEvent *e) override
Other helper methods.
Definition abstractalbumtreeview.cpp:452
bool viewportEvent(QEvent *event) override
Definition abstractalbumtreeview.cpp:635
void adaptColumnsToContent()
Definition abstractalbumtreeview.cpp:855
void startDrag(Qt::DropActions supportedActions) override
Definition abstractalbumtreeview.cpp:501
virtual void addCustomContextMenuActions(ContextMenuHelper &cmh, Album *album)
Definition abstractalbumtreeview.cpp:1152
void setCurrentAlbums(const QList< Album * > &albums, bool selectInAlbumManager=true)
Definition abstractalbumtreeview.cpp:388
AbstractSpecificAlbumModel * albumModel() const
Definition abstractalbumtreeview.cpp:175
void expandEverything(const QModelIndex &index)
Definition abstractalbumtreeview.cpp:871
void setContextMenuTitle(const QString &title)
Definition abstractalbumtreeview.cpp:1053
void doSaveState() override
Definition abstractalbumtreeview.cpp:983
virtual QPixmap contextMenuIcon() const
Definition abstractalbumtreeview.cpp:1058
void dropEvent(QDropEvent *e) override
Definition abstractalbumtreeview.cpp:608
virtual void slotRootAlbumAvailable()
Definition abstractalbumtreeview.cpp:303
void albumSettingsChanged()
Definition abstractalbumtreeview.cpp:1164
QList< A * > currentAlbums()
Definition abstractalbumtreeview.cpp:216
void setSelectAlbumOnClick(const bool selectOnClick)
Definition abstractalbumtreeview.cpp:195
bool m_checkOnMiddleClick
Definition abstractalbumtreeview.h:399
void setSearchTextSettings(const SearchTextSettings &settings)
Definition abstractalbumtreeview.cpp:378
void setExpandOnSingleClick(const bool doThat)
Definition abstractalbumtreeview.cpp:185
AlbumModelDragDropHandler * m_dragDropHandler
Definition abstractalbumtreeview.h:396
void slotCollapseNode()
slotCollapseNode - collapse recursively selected nodes
Definition abstractalbumtreeview.cpp:892
void currentAlbumChanged(Album *currentAlbum)
Flag
Definition abstractalbumtreeview.h:59
@ CreateDefaultDelegate
Definition abstractalbumtreeview.h:75
@ AlwaysShowInclusiveCounts
Definition abstractalbumtreeview.h:87
@ CreateDefaultFilterModel
Definition abstractalbumtreeview.h:69
@ DefaultFlags
Definition abstractalbumtreeview.h:89
@ ShowCountAccordingToSettings
Definition abstractalbumtreeview.h:81
@ CreateDefaultModel
Definition abstractalbumtreeview.h:64
void slotSearchTextSettingsChanged(bool wasSearching, bool searching)
Definition abstractalbumtreeview.cpp:264
bool m_restoreCheckState
Definition abstractalbumtreeview.h:400
AbstractSpecificAlbumModel * m_albumModel
Definition abstractalbumtreeview.h:394
void slotSelectionChanged()
Definition abstractalbumtreeview.cpp:439
void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override
Definition abstractalbumtreeview.cpp:834
~AbstractAlbumTreeView() override
Definition abstractalbumtreeview.cpp:62
virtual bool showContextMenuAt(QContextMenuEvent *event, Album *albumForEvent)
Definition abstractalbumtreeview.cpp:1041
void doLoadState() override
Definition abstractalbumtreeview.cpp:645
void dragEnterEvent(QDragEnterEvent *e) override
Definition abstractalbumtreeview.cpp:551
void dragMoveEvent(QDragMoveEvent *e) override
Definition abstractalbumtreeview.cpp:566
AlbumFilterModel * albumFilterModel() const
Definition abstractalbumtreeview.cpp:180
int m_lastScrollBarValue
Definition abstractalbumtreeview.h:398
AlbumFilterModel * m_albumFilterModel
Definition abstractalbumtreeview.h:395
virtual void middleButtonPressed(Album *a)
Definition abstractalbumtreeview.cpp:496
void selectedAlbumsChanged(const QList< Album * > &selectedAlbums)
void setExpandNewCurrentItem(const bool doThat)
Definition abstractalbumtreeview.cpp:190
void removeContextMenuElement(ContextMenuElement *const element)
Definition abstractalbumtreeview.cpp:1073
void setAlbumModel(AbstractSpecificAlbumModel *const model)
Definition abstractalbumtreeview.cpp:67
void slotSearchTextSettingsAboutToChange(bool searched, bool willSearch)
Definition abstractalbumtreeview.cpp:234
void setAlbumManagerCurrentAlbum(const bool setCurrentAlbum)
Definition abstractalbumtreeview.cpp:383
Flags m_flags
Definition abstractalbumtreeview.h:401
void dragLeaveEvent(QDragLeaveEvent *e) override
Definition abstractalbumtreeview.cpp:601
void slotExpandNode()
slotExpandNode - expands recursively selected nodes
Definition abstractalbumtreeview.cpp:881
QModelIndex indexVisuallyAt(const QPoint &p)
Definition abstractalbumtreeview.cpp:200
void setSelectOnContextMenu(const bool select)
Definition abstractalbumtreeview.cpp:1147
void setContextMenuIcon(const QPixmap &pixmap)
Definition abstractalbumtreeview.cpp:1048
void setEnableContextMenu(const bool enable)
Definition abstractalbumtreeview.cpp:1036
void slotCollapseAllNodes()
slotCollapseAllNodes - collapse all nodes without root node
Definition abstractalbumtreeview.cpp:926
void addContextMenuElement(ContextMenuElement *const element)
Definition abstractalbumtreeview.cpp:1068
virtual void handleCustomContextMenuAction(QAction *action, const AlbumPointer< Album > &album)
Definition abstractalbumtreeview.cpp:1158
QList< Album * > selectedItems()
selectedItems() -
Definition abstractalbumtreeview.cpp:640
bool expandMatches(const QModelIndex &index)
Definition abstractalbumtreeview.cpp:308
void rowsInserted(const QModelIndex &index, int start, int end) override
Definition abstractalbumtreeview.cpp:811
Definition abstractalbummodel.h:232
Definition albumfiltermodel.h:35
Definition albummodeldragdrophandler.h:29
Definition albumpointer.h:38
Abstract base class for all album types.
Definition album.h:57
A helper class to add actions and special menus to the context menu.
Definition contextmenuhelper.h:70
Definition searchtextbar.h:33
Definition statesavingobject.h:66
qulonglong value
Definition itemviewutilities.cpp:585
Definition datefolderview.cpp:34