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

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