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#include "kserviceaction.h"
9#include "kservice.h"
10#include "ksycoca.h"
11#include "ksycoca_p.h"
12
13#include <QDataStream>
14
15#include <KConfigGroup>
16
17class KServiceActionPrivate : public QSharedData
18{
19public:
20 KServiceActionPrivate(const QString &name, const QString &text, const QString &icon, const QString &exec, bool noDisplay)
21 : m_name(name)
22 , m_text(text)
23 , m_icon(icon)
24 , m_exec(exec)
25 , m_noDisplay(noDisplay)
26 {
27 }
28 QString m_name;
29 QString m_text;
30 QString m_icon;
31 QString m_exec;
32 QVariant m_data;
33 bool m_noDisplay;
34 KServicePtr m_service;
35 // warning keep QDataStream operators in sync if adding data here
36};
37
38KServiceAction::KServiceAction()
39 : d(new KServiceActionPrivate(QString(), QString(), QString(), QString(), false))
40{
41}
42
43KServiceAction::KServiceAction(const QString &name, const QString &text, const QString &icon, const QString &exec, bool noDisplay, const KServicePtr &service)
44 : d(new KServiceActionPrivate(name, text, icon, exec, noDisplay))
45{
46 d->m_service = service;
47}
48
49KServiceAction::~KServiceAction()
50{
51}
52
53KServiceAction::KServiceAction(const KServiceAction &other)
54 : d(other.d)
55{
56}
57
58KServiceAction &KServiceAction::operator=(const KServiceAction &other)
59{
60 d = other.d;
61 return *this;
62}
63
64QVariant KServiceAction::data() const
65{
66 return d->m_data;
67}
68
69void KServiceAction::setData(const QVariant &data)
70{
71 d->m_data = data;
72}
73
74QString KServiceAction::name() const
75{
76 return d->m_name;
77}
78
79QString KServiceAction::text() const
80{
81 return d->m_text;
82}
83
84QString KServiceAction::icon() const
85{
86 return d->m_icon;
87}
88
89QString KServiceAction::exec() const
90{
91 return d->m_exec;
92}
93
94bool KServiceAction::noDisplay() const
95{
96 return d->m_noDisplay;
97}
98
99bool KServiceAction::isSeparator() const
100{
101 return d->m_name == QLatin1String("_SEPARATOR_");
102}
103
104KServicePtr KServiceAction::service() const
105{
106 return d->m_service;
107}
108
109void KServiceAction::setService(const KServicePtr &service)
110{
111 d->m_service = service;
112}
113
114QDataStream &operator>>(QDataStream &str, KServiceAction &act)
115{
116 KServiceActionPrivate *d = act.d;
117 str >> d->m_name;
118 str >> d->m_text;
119 str >> d->m_icon;
120 str >> d->m_exec;
121 str >> d->m_data;
122 str >> d->m_noDisplay;
123 return str;
124}
125
126QDataStream &operator<<(QDataStream &str, const KServiceAction &act)
127{
128 const KServiceActionPrivate *d = act.d;
129 str << d->m_name;
130 str << d->m_text;
131 str << d->m_icon;
132 str << d->m_exec;
133 str << d->m_data;
134 str << d->m_noDisplay;
135 return str;
136}
137
138QVariant KServiceAction::property(const QString &_name, QMetaType::Type type) const
139{
140 const auto dataMap = d->m_data.toMap();
141 auto it = dataMap.constFind(key: _name);
142 if (it == dataMap.cend() || !it.value().isValid()) {
143 return QVariant(); // No property set.
144 }
145
146 if (type == QMetaType::QString) {
147 return it.value(); // no conversion necessary
148 } else {
149 // All others
150 // For instance properties defined as StringList, like MimeTypes.
151 // XXX This API is accessible only through a friend declaration.
152 return KConfigGroup::convertToQVariant(pKey: _name.toUtf8().constData(), value: it.value().toString().toUtf8(), aDefault: QVariant(QMetaType(type)));
153 }
154}
155

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