1/*
2 This file is part of the KDE project
3 SPDX-FileCopyrightText: 2007 David Faure <faure@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#ifndef KSERVICEACTION_H
9#define KSERVICEACTION_H
10
11#include <QSharedDataPointer>
12#include <QVariant>
13#include <kservice_export.h>
14#include <kserviceconversioncheck_p.h>
15class QVariant;
16class KServiceActionPrivate;
17class KService;
18
19// we can't include kservice.h, it includes this header...
20typedef QExplicitlySharedDataPointer<KService> KServicePtr;
21
22/*!
23 * \class KServiceAction
24 * \inmodule KService
25 *
26 * \brief Represents an action in a .desktop file.
27 *
28 * Actions are defined with the config key Actions in the [Desktop Entry]
29 * group, followed by one group per action, as per the desktop entry standard.
30 * \sa KService::actions
31 */
32class KSERVICE_EXPORT KServiceAction
33{
34public:
35 /*!
36 * Creates a KServiceAction.
37 *
38 * Normally you don't have to do this, KService creates the actions
39 * when parsing the .desktop file.
40 *
41 * \since 5.69
42 */
43 KServiceAction(const QString &name, const QString &text, const QString &icon, const QString &exec, bool noDisplay, const KServicePtr &service);
44 /*!
45 * \internal
46 * Needed for operator>>
47 */
48 KServiceAction();
49
50 ~KServiceAction();
51
52 KServiceAction(const KServiceAction &other);
53
54 KServiceAction &operator=(const KServiceAction &other);
55
56 /*!
57 * Sets the action's internal data to the given \a userData.
58 */
59 void setData(const QVariant &userData);
60
61 /*!
62 * Returns the action's internal data.
63 */
64 QVariant data() const;
65
66 /*!
67 * Returns the action's internal name
68 *
69 * For instance Actions=Setup;... and the group [Desktop Action Setup]
70 * define an action with the name "Setup".
71 */
72 QString name() const;
73
74 /*!
75 * Returns the action's text, as defined by the Name key in the desktop action group
76 */
77 QString text() const;
78
79 /*!
80 * Returns the action's icon, as defined by the Icon key in the desktop action group
81 */
82 QString icon() const;
83
84 /*!
85 * Returns the action's exec command, as defined by the Exec key in the desktop action group
86 */
87 QString exec() const;
88
89 /*!
90 * Returns whether the action should be suppressed in menus.
91 *
92 * This is useful for having actions with a known name that the code
93 * looks for explicitly, like Setup and Root for kscreensaver actions,
94 * and which should not appear in popup menus.
95 */
96 bool noDisplay() const;
97
98 /*!
99 * Returns whether the action is a separator.
100 *
101 * This is true when the Actions key contains "_SEPARATOR_".
102 */
103 bool isSeparator() const;
104
105 /*!
106 * Returns the service that this action comes from
107 * \since 5.69
108 */
109 KServicePtr service() const;
110
111 /*!
112 * Returns the requested property.
113 *
114 * T the type of the requested property
115 *
116 * \a name the name of the requested property
117 *
118 * \since 6.0
119 */
120 template<typename T>
121 T property(const QString &name) const
122 {
123 KServiceConversionCheck::to_QVariant<T>();
124 return property(name: name, type: static_cast<QMetaType::Type>(qMetaTypeId<T>())).value<T>();
125 }
126
127private:
128 QSharedDataPointer<KServiceActionPrivate> d;
129 friend KSERVICE_EXPORT QDataStream &operator>>(QDataStream &str, KServiceAction &act);
130 friend KSERVICE_EXPORT QDataStream &operator<<(QDataStream &str, const KServiceAction &act);
131 friend class KService;
132 KSERVICE_NO_EXPORT void setService(const KServicePtr &service);
133
134 QVariant property(const QString &_name, QMetaType::Type type) const;
135};
136
137KSERVICE_EXPORT QDataStream &operator>>(QDataStream &str, KServiceAction &act);
138KSERVICE_EXPORT QDataStream &operator<<(QDataStream &str, const KServiceAction &act);
139
140#endif /* KSERVICEACTION_H */
141

source code of kservice/src/services/kserviceaction.h