21#include "cc_tools_qt/ToolsApi.h"
22#include "cc_tools_qt/ToolsMessage.h"
24#include <QtCore/QObject>
25#include <QtCore/QString>
26#include <QtCore/QVariantMap>
38template <
typename TValue>
42 using ValueType = TValue;
44 ToolsMsgPropBase(
const char* propName)
45 : m_propName(propName)
50 void setTo(U&& val, QObject& obj)
const
52 obj.setProperty(m_propName, QVariant::fromValue(std::forward<U>(val)));
53 assert(obj.property(m_propName).template canConvert<ValueType>());
57 void setTo(U&& val, QVariantMap& map)
const
59 QString name(m_propName);
60 map.insert(name, QVariant::fromValue(std::forward<U>(val)));
61 assert(map.value(name).template canConvert<ValueType>());
64 ValueType getFrom(
const QObject& obj,
const ValueType& defaultVal = ValueType())
const
66 auto var = obj.property(m_propName);
67 if ((!var.isValid()) || (!var.template canConvert<ValueType>())) {
71 return var.template value<ValueType>();
74 ValueType getFrom(
const QVariantMap& map,
const ValueType& defaultVal = ValueType())
const
76 QString name(m_propName);
77 auto var = map.value(name);
78 if ((!var.isValid()) || (!var.template canConvert<ValueType>())) {
82 return var.template value<ValueType>();
85 void copyFromTo(
const QObject& from, QObject& to)
const
87 auto var = from.property(m_propName);
89 to.setProperty(m_propName, std::move(var));
94 const char* m_propName =
nullptr;
97class CC_TOOLS_API ToolsMsgType :
public ToolsMsgPropBase<unsigned>
99 using Base = ToolsMsgPropBase<unsigned>;
101 using ValueType = ToolsMessage::Type;
105 template <
typename TTo>
106 void setTo(ValueType val, TTo&& to)
108 Base::setTo(
static_cast<Base::ValueType
>(val), std::forward<TTo>(to));
111 template <
typename TFrom>
112 ValueType getFrom(TFrom&& from)
114 return static_cast<ValueType
>(Base::getFrom(std::forward<TFrom>(from)));
118class CC_TOOLS_API ToolsMsgIdx :
public ToolsMsgPropBase<unsigned>
120 using Base = ToolsMsgPropBase<unsigned>;
125class CC_TOOLS_API ToolsMsgTimestamp :
public ToolsMsgPropBase<unsigned long long>
127 using Base = ToolsMsgPropBase<unsigned long long>;
132class CC_TOOLS_API ToolsMsgProtocolName :
public ToolsMsgPropBase<QString>
134 using Base = ToolsMsgPropBase<QString>;
136 ToolsMsgProtocolName();
139class CC_TOOLS_API ToolsMsgTransportMsg :
public ToolsMsgPropBase<ToolsMessagePtr>
141 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
143 ToolsMsgTransportMsg();
146class CC_TOOLS_API ToolsMsgRawDataMsg :
public ToolsMsgPropBase<ToolsMessagePtr>
148 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
150 ToolsMsgRawDataMsg();
153class CC_TOOLS_API ToolsMsgExtraInfoMsg :
public ToolsMsgPropBase<ToolsMessagePtr>
155 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
157 ToolsMsgExtraInfoMsg();
160class CC_TOOLS_API ToolsMsgExtraInfo :
public ToolsMsgPropBase<QVariantMap>
162 using Base = ToolsMsgPropBase<QVariantMap>;
167class CC_TOOLS_API ToolsMsgForceExtraInfoExistence :
public ToolsMsgPropBase<bool>
169 using Base = ToolsMsgPropBase<bool>;
171 ToolsMsgForceExtraInfoExistence();
174class CC_TOOLS_API ToolsMsgDelay :
public ToolsMsgPropBase<unsigned long long>
176 using Base = ToolsMsgPropBase<unsigned long long>;
181class CC_TOOLS_API ToolsMsgDelayUnits :
public ToolsMsgPropBase<QString>
183 using Base = ToolsMsgPropBase<QString>;
185 ToolsMsgDelayUnits();
188class CC_TOOLS_API ToolsMsgRepeatDuration :
public ToolsMsgPropBase<unsigned long long>
190 using Base = ToolsMsgPropBase<unsigned long long>;
192 ToolsMsgRepeatDuration();
195class CC_TOOLS_API ToolsMsgRepeatDurationUnits :
public ToolsMsgPropBase<QString>
197 using Base = ToolsMsgPropBase<QString>;
199 ToolsMsgRepeatDurationUnits();
202class CC_TOOLS_API ToolsMsgRepeatCount :
public ToolsMsgPropBase<unsigned>
204 using Base = ToolsMsgPropBase<unsigned>;
206 ToolsMsgRepeatCount();
209class CC_TOOLS_API ToolsMsgScrollPos :
public ToolsMsgPropBase<int>
211 using Base = ToolsMsgPropBase<int>;
216class CC_TOOLS_API ToolsMsgComment :
public ToolsMsgPropBase<QString>
218 using Base = ToolsMsgPropBase<QString>;