cc_tools_qt
Common Environment for Protocol Analysis.
Loading...
Searching...
No Matches
message.h
1//
2// Copyright 2016 - 2025 (C). Alex Robenko. All rights reserved.
3//
4
5// This file is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18
19#pragma once
20
21#include "cc_tools_qt/ToolsApi.h"
22#include "cc_tools_qt/ToolsMessage.h"
23
24#include <QtCore/QObject>
25#include <QtCore/QString>
26#include <QtCore/QVariantMap>
27
28
29namespace cc_tools_qt
30{
31
32namespace property
33{
34
35namespace message
36{
37
38template <typename TValue>
39class ToolsMsgPropBase
40{
41public:
42 using ValueType = TValue;
43
44 ToolsMsgPropBase(const char* propName)
45 : m_propName(propName)
46 {
47 }
48
49 template <typename U>
50 void setTo(U&& val, QObject& obj) const
51 {
52 obj.setProperty(m_propName, QVariant::fromValue(std::forward<U>(val)));
53 assert(obj.property(m_propName).template canConvert<ValueType>());
54 }
55
56 template <typename U>
57 void setTo(U&& val, QVariantMap& map) const
58 {
59 QString name(m_propName);
60 map.insert(name, QVariant::fromValue(std::forward<U>(val)));
61 assert(map.value(name).template canConvert<ValueType>());
62 }
63
64 ValueType getFrom(const QObject& obj, const ValueType& defaultVal = ValueType()) const
65 {
66 auto var = obj.property(m_propName);
67 if ((!var.isValid()) || (!var.template canConvert<ValueType>())) {
68 return defaultVal;
69 }
70
71 return var.template value<ValueType>();
72 }
73
74 ValueType getFrom(const QVariantMap& map, const ValueType& defaultVal = ValueType()) const
75 {
76 QString name(m_propName);
77 auto var = map.value(name);
78 if ((!var.isValid()) || (!var.template canConvert<ValueType>())) {
79 return defaultVal;
80 }
81
82 return var.template value<ValueType>();
83 }
84
85 void copyFromTo(const QObject& from, QObject& to) const
86 {
87 auto var = from.property(m_propName);
88 if (var.isValid()) {
89 to.setProperty(m_propName, std::move(var));
90 }
91 }
92
93private:
94 const char* m_propName = nullptr;
95};
96
97class CC_TOOLS_API ToolsMsgType : public ToolsMsgPropBase<unsigned>
98{
99 using Base = ToolsMsgPropBase<unsigned>;
100public:
101 using ValueType = ToolsMessage::Type;
102
103 ToolsMsgType();
104
105 template <typename TTo>
106 void setTo(ValueType val, TTo&& to)
107 {
108 Base::setTo(static_cast<Base::ValueType>(val), std::forward<TTo>(to));
109 }
110
111 template <typename TFrom>
112 ValueType getFrom(TFrom&& from)
113 {
114 return static_cast<ValueType>(Base::getFrom(std::forward<TFrom>(from)));
115 }
116};
117
118class CC_TOOLS_API ToolsMsgIdx : public ToolsMsgPropBase<unsigned>
119{
120 using Base = ToolsMsgPropBase<unsigned>;
121public:
122 ToolsMsgIdx();
123};
124
125class CC_TOOLS_API ToolsMsgTimestamp : public ToolsMsgPropBase<unsigned long long>
126{
127 using Base = ToolsMsgPropBase<unsigned long long>;
128public:
129 ToolsMsgTimestamp();
130};
131
132class CC_TOOLS_API ToolsMsgProtocolName : public ToolsMsgPropBase<QString>
133{
134 using Base = ToolsMsgPropBase<QString>;
135public:
136 ToolsMsgProtocolName();
137};
138
139class CC_TOOLS_API ToolsMsgTransportMsg : public ToolsMsgPropBase<ToolsMessagePtr>
140{
141 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
142public:
143 ToolsMsgTransportMsg();
144};
145
146class CC_TOOLS_API ToolsMsgRawDataMsg : public ToolsMsgPropBase<ToolsMessagePtr>
147{
148 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
149public:
150 ToolsMsgRawDataMsg();
151};
152
153class CC_TOOLS_API ToolsMsgExtraInfoMsg : public ToolsMsgPropBase<ToolsMessagePtr>
154{
155 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
156public:
157 ToolsMsgExtraInfoMsg();
158};
159
160class CC_TOOLS_API ToolsMsgExtraInfo : public ToolsMsgPropBase<QVariantMap>
161{
162 using Base = ToolsMsgPropBase<QVariantMap>;
163public:
164 ToolsMsgExtraInfo();
165};
166
167class CC_TOOLS_API ToolsMsgForceExtraInfoExistence : public ToolsMsgPropBase<bool>
168{
169 using Base = ToolsMsgPropBase<bool>;
170public:
171 ToolsMsgForceExtraInfoExistence();
172};
173
174class CC_TOOLS_API ToolsMsgDelay : public ToolsMsgPropBase<unsigned long long>
175{
176 using Base = ToolsMsgPropBase<unsigned long long>;
177public:
178 ToolsMsgDelay();
179};
180
181class CC_TOOLS_API ToolsMsgDelayUnits : public ToolsMsgPropBase<QString>
182{
183 using Base = ToolsMsgPropBase<QString>;
184public:
185 ToolsMsgDelayUnits();
186};
187
188class CC_TOOLS_API ToolsMsgRepeatDuration : public ToolsMsgPropBase<unsigned long long>
189{
190 using Base = ToolsMsgPropBase<unsigned long long>;
191public:
192 ToolsMsgRepeatDuration();
193};
194
195class CC_TOOLS_API ToolsMsgRepeatDurationUnits : public ToolsMsgPropBase<QString>
196{
197 using Base = ToolsMsgPropBase<QString>;
198public:
199 ToolsMsgRepeatDurationUnits();
200};
201
202class CC_TOOLS_API ToolsMsgRepeatCount : public ToolsMsgPropBase<unsigned>
203{
204 using Base = ToolsMsgPropBase<unsigned>;
205public:
206 ToolsMsgRepeatCount();
207};
208
209class CC_TOOLS_API ToolsMsgScrollPos : public ToolsMsgPropBase<int>
210{
211 using Base = ToolsMsgPropBase<int>;
212public:
213 ToolsMsgScrollPos();
214};
215
216class CC_TOOLS_API ToolsMsgComment : public ToolsMsgPropBase<QString>
217{
218 using Base = ToolsMsgPropBase<QString>;
219public:
220 ToolsMsgComment();
221};
222
223} // namespace message
224
225} // namespace property
226
227} // namespace cc_tools_qt
228
229
Main namespace for all classes / functions of the shared library.