1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "event.h"
6
7#include "private/event_p.h"
8
9#include <QDebug>
10#include <QMutex>
11
12DPF_BEGIN_NAMESPACE
13
14namespace PrivateGlobal
15{
16 static QString EVENT_TOPIC_KEY{"EVENT_TOPIC_KEY"};
17 static QString EVENT_DATA_KEY{"EVENT_DATA_KEY"};
18}
19
20Event::Event()
21 : d(new EventPrivate(this))
22{
23
24}
25
26Event::Event(const QString &topic)
27 : d(new EventPrivate(this))
28{
29 setTopic(topic);
30}
31
32Event::Event(const Event &event):
33 d(new EventPrivate(this))
34{
35 d->sourceHash = event.d->sourceHash;
36}
37
38Event::~Event()
39{
40 delete d;
41}
42
43Event &Event::operator =(const Event &event)
44{
45 if (&event != this) {
46 d = new EventPrivate(this);
47 d->sourceHash = event.d->sourceHash;
48 }
49 return *this;
50}
51
52/**
53 * @brief Event::setTopic
54 * 设置事件的主题
55 * @param topic 主题字符串
56 */
57void Event::setTopic(const QString &topic)
58{
59 static QMutex mutex;
60 mutex.lock();
61 d->sourceHash[PrivateGlobal::EVENT_TOPIC_KEY] = topic;
62 mutex.unlock();
63}
64
65/**
66 * @brief Event::setTopic
67 * 获取设置事件的主题
68 * @return 主题字符串
69 */
70QString Event::topic() const
71{
72 return d->sourceHash[PrivateGlobal::EVENT_TOPIC_KEY].toString();
73}
74
75/**
76 * @brief Event::setData 设置关联数据
77 * @param data 任意泛型,需要Qt基本类型的QVariant构造要求,
78 * 可以通过QVariant::fromValue接口进行复合类型的构造。
79 */
80void Event::setData(const QVariant &data)
81{
82 d->sourceHash[PrivateGlobal::EVENT_DATA_KEY] = data;
83}
84
85/**
86 * @brief Event::data 获取设置的关联数据
87 * @return QVariant任意泛型,
88 * 可使用canConvert进行类型匹配后进行类型匹配后转换
89 * 未知类型下直接调用qvariant_cast将导致未定义的行为,引发程序崩溃
90 */
91QVariant Event::data() const
92{
93 return d->sourceHash[PrivateGlobal::EVENT_DATA_KEY];
94}
95
96/**
97 * @brief Event::setProperty 设置其他映射关联数据属性
98 * @param key 索引键值
99 * @param value 关联数据值
100 */
101void Event::setProperty(const QString &key, const QVariant value)
102{
103 d->sourceHash[key] = value;
104}
105
106/**
107 * @brief Event::value 获取元素列表中标定的value
108 * @param key 标识元素的键值
109 * @return 返回QVariant 复合类型需要自己转换
110 */
111QVariant Event::property(const QString &key) const
112{
113 return d->sourceHash[key];
114}
115
116QT_BEGIN_NAMESPACE
117Q_CORE_EXPORT QDebug operator <<(QDebug out, const DPF_NAMESPACE::Event &event)
118{
119 out << event.d->sourceHash;
120 return out;
121}
122QT_END_NAMESPACE
123
124DPF_END_NAMESPACE
125
126
127
128
129