digiKam
Loading...
Searching...
No Matches
contextmenuhelper_p.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-02-15
7 * Description : contextmenu helper class - Private container.
8 *
9 * SPDX-FileCopyrightText: 2009-2011 by Andi Clemens <andi dot clemens at gmail dot com>
10 * SPDX-FileCopyrightText: 2010-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#include "contextmenuhelper.h"
19
20// Qt includes
21
22#include <QAction>
23#include <QApplication>
24#include <QClipboard>
25#include <QDir>
26#include <QIcon>
27#include <QMap>
28#include <QMenu>
29#include <QMimeData>
30#include <QPointer>
31#include <QString>
32#include <QTimer>
33
34// KDE includes
35
36// Pragma directives to reduce warnings from KDE header files.
37#if defined(Q_CC_GNU)
38# pragma GCC diagnostic push
39# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
40#endif
41
42#if defined(Q_CC_CLANG)
43# pragma clang diagnostic push
44# pragma clang diagnostic ignored "-Wmismatched-tags"
45# pragma clang diagnostic ignored "-Wdeprecated-declarations"
46#endif
47
48#include <kactioncollection.h>
49#include <klocalizedstring.h>
50
51#ifdef HAVE_KIO
52# include <kopenwithdialog.h>
53#endif
54
55// Restore warnings
56#if defined(Q_CC_GNU)
57# pragma GCC diagnostic pop
58#endif
59
60#if defined(Q_CC_CLANG)
61# pragma clang diagnostic pop
62#endif
63
64// Local includes
65
66#include "digikam_debug.h"
67#include "album.h"
68#include "coredb.h"
69#include "albummanager.h"
70#include "albumpointer.h"
72#include "abstractalbummodel.h"
73#include "coredbaccess.h"
74#include "digikamapp.h"
75#include "dservicemenu.h"
76#include "dfileoperations.h"
77#include "iteminfo.h"
78#include "itemfiltermodel.h"
79#include "itemviewutilities.h"
80#include "lighttablewindow.h"
81#include "queuemgrwindow.h"
82#include "metadataremover.h"
83#include "picklabelwidget.h"
84#include "colorlabelwidget.h"
85#include "ratingwidget.h"
87#include "tagspopupmenu.h"
88#include "fileactionmngr.h"
89#include "tagscache.h"
90#include "dimg.h"
91#include "dxmlguiwindow.h"
92
93#ifdef HAVE_AKONADICONTACT
94# include "akonadiiface.h"
95#endif
96
97#ifdef Q_OS_WIN
98# include <windows.h>
99# include <shellapi.h>
100#endif
101
102namespace Digikam
103{
104
105class Q_DECL_HIDDEN ContextMenuHelper::Private
106{
107public:
108
109 explicit Private(ContextMenuHelper* const qq)
110 : q(qq)
111 {
112 }
113
114 QAction* gotoAlbumAction = nullptr;
115 QAction* gotoDateAction = nullptr;
116 QAction* setThumbnailAction = nullptr;
117
118 QList<qlonglong> selectedIds;
119 QList<QUrl> selectedItems;
120
121 QMap<int, QAction*> queueActions;
122 QMap<QString, KService::Ptr> servicesMap;
123 QMap<QString, DServiceInfo> newServicesMap;
124
125 ItemFilterModel* imageFilterModel = nullptr;
126 AbstractCheckableAlbumModel* albumModel = nullptr;
127
128 QMenu* parent = nullptr;
129
130 KActionCollection* stdActionCollection = nullptr;
131
132 ContextMenuHelper* q = nullptr;
133
134public:
135
136 QModelIndex indexForAlbumFromAction(QObject* const sender) const
137 {
138 QAction* action = nullptr;
139
140 if ((action = qobject_cast<QAction*>(sender)))
141 {
142 Album* const album = action->data().value<AlbumPointer<> >();
143
144 return albumModel->indexForAlbum(album);
145 }
146
147 return QModelIndex();
148 }
149
150 QAction* copyFromMainCollection(const QString& name) const
151 {
152 QAction* const mainAction = stdActionCollection->action(name);
153
154 if (!mainAction)
155 {
156 return nullptr;
157 }
158
159 QAction* const action = new QAction(mainAction->icon(), mainAction->text(), q);
160 action->setShortcut(mainAction->shortcut());
161 action->setToolTip(mainAction->toolTip());
162
163 return action;
164 }
165
166 QList<DPluginAction*> exportPluginActions() const
167 {
168 KXMLGUIClient* const client = const_cast<KXMLGUIClient*>(stdActionCollection->parentGUIClient());
169 QList<DPluginAction*> actions = DPluginLoader::instance()->pluginsActions(DPluginAction::GenericExport,
170 dynamic_cast<KXmlGuiWindow*>(client));
171
172 return actions;
173 }
174};
175
176} // namespace Digikam
QModelIndex indexForAlbum(Album *album) const
Definition abstractalbummodel.cpp:391
Definition abstractalbummodel.h:357
Definition albumpointer.h:38
Abstract base class for all album types.
Definition album.h:57
Definition contextmenuhelper_p.h:106
QList< qlonglong > selectedIds
Definition contextmenuhelper_p.h:118
QList< DPluginAction * > exportPluginActions() const
Definition contextmenuhelper_p.h:166
QList< QUrl > selectedItems
Definition contextmenuhelper_p.h:119
QMap< int, QAction * > queueActions
Definition contextmenuhelper_p.h:121
QAction * copyFromMainCollection(const QString &name) const
Definition contextmenuhelper_p.h:150
QModelIndex indexForAlbumFromAction(QObject *const sender) const
Definition contextmenuhelper_p.h:136
QMap< QString, DServiceInfo > newServicesMap
Definition contextmenuhelper_p.h:123
Private(ContextMenuHelper *const qq)
Definition contextmenuhelper_p.h:109
QMap< QString, KService::Ptr > servicesMap
Definition contextmenuhelper_p.h:122
A helper class to add actions and special menus to the context menu.
Definition contextmenuhelper.h:70
Definition itemfiltermodel.h:115
Definition datefolderview.cpp:34