digiKam
Loading...
Searching...
No Matches
categorizeditemmodel.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 : 2010-12-02
7 * Description : Generic, standard item based model for DCategorizedView
8 *
9 * SPDX-FileCopyrightText: 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 * ============================================================ */
14
15#pragma once
16
17// Qt includes
18
19#include <QFlags>
20#include <QStandardItemModel>
21
22// Local includes
23
24#include "digikam_export.h"
26
27class QAction;
28
29namespace Digikam
30{
31
32class DIGIKAM_EXPORT CategorizedItemModel : public QStandardItemModel
33{
34 Q_OBJECT
35
36public:
37
39 {
41 ItemOrderRole = Qt::UserRole + 1
42 };
43
44public:
45
46 explicit CategorizedItemModel(QObject* const parent = nullptr);
47
48 QStandardItem* addItem(const QString& text, const QVariant& category, const QVariant& categorySorting = QVariant());
49 QStandardItem* addItem(const QString& text, const QIcon& decoration, const QVariant& category,
50 const QVariant& categorySorting = QVariant());
51
52 virtual DCategorizedSortFilterProxyModel* createFilterModel();
53};
54
55// -----------------------------------------------------------------------------------------------------------------------
56
57class DIGIKAM_EXPORT ActionItemModel : public CategorizedItemModel
58{
59 Q_OBJECT
60
61public:
62
64 {
65 ItemActionRole = Qt::UserRole + 10
66 };
67
69 {
71 ToplevelMenuCategory = 1 << 0,
72
74 ParentMenuCategory = 1 << 1,
75
77 SortCategoriesAlphabetically = 1 << 10,
78
80 SortCategoriesByInsertionOrder = 1 << 11
81 };
82 Q_DECLARE_FLAGS(MenuCategoryMode, MenuCategoryFlag)
83
84public:
85
92 explicit ActionItemModel(QObject* const parent = nullptr);
93
94 QStandardItem* addAction(QAction* action, const QString& category, const QVariant& categorySorting = QVariant());
95
96 void setMode(MenuCategoryMode mode);
97 MenuCategoryMode mode() const;
98
99 void addActions(QWidget* widget);
100 void addActions(QWidget* widget, const QList<QAction*>& actionWhiteList);
101
102 DCategorizedSortFilterProxyModel* createFilterModel() override;
103
108 QStandardItem* itemForAction(QAction* action) const;
109 QModelIndex indexForAction(QAction* action) const;
110
115 static QAction* actionForIndex(const QModelIndex& index);
116
117public Q_SLOTS:
118
124 void hover(const QModelIndex& index);
125 void toggle(const QModelIndex& index);
126 void trigger(const QModelIndex& index);
127
128protected Q_SLOTS:
129
130 void slotActionChanged();
131
132protected:
133
134 void setPropertiesFromAction(QStandardItem* item, QAction* action);
135
136protected:
137
138 MenuCategoryMode m_mode = MenuCategoryMode(ToplevelMenuCategory | SortCategoriesAlphabetically);
139 DCategorizedSortFilterProxyModel* m_filterModel = nullptr;
140};
141
142} // namespace Digikam
143
144Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::ActionItemModel::MenuCategoryMode)
Definition categorizeditemmodel.h:58
ExtraRoles
Definition categorizeditemmodel.h:64
MenuCategoryFlag
Definition categorizeditemmodel.h:69
Definition categorizeditemmodel.h:33
ExtraRoles
Definition categorizeditemmodel.h:39
Definition dcategorizedsortfilterproxymodel.h:43
Definition datefolderview.cpp:34