20#include "cc_tools_qt/ToolsApi.h"
21#include "cc_tools_qt/ToolsMessage.h"
23#include <QtCore/QObject>
24#include <QtCore/QString>
25#include <QtCore/QVariantMap>
36template <
typename TValue>
40 using ValueType = TValue;
42 ToolsMsgPropBase(
const char* propName)
43 : m_propName(propName)
48 void setTo(U&& val, QObject& obj)
const
50 obj.setProperty(m_propName, QVariant::fromValue(std::forward<U>(val)));
51 assert(obj.property(m_propName).template canConvert<ValueType>());
55 void setTo(U&& val, QVariantMap& map)
const
57 QString name(m_propName);
58 map.insert(name, QVariant::fromValue(std::forward<U>(val)));
59 assert(map.value(name).template canConvert<ValueType>());
62 ValueType getFrom(
const QObject& obj,
const ValueType& defaultVal = ValueType())
const
64 auto var = obj.property(m_propName);
65 if ((!var.isValid()) || (!var.template canConvert<ValueType>())) {
69 return var.template value<ValueType>();
72 ValueType getFrom(
const QVariantMap& map,
const ValueType& defaultVal = ValueType())
const
74 QString name(m_propName);
75 auto var = map.value(name);
76 if ((!var.isValid()) || (!var.template canConvert<ValueType>())) {
80 return var.template value<ValueType>();
83 void copyFromTo(
const QObject& from, QObject& to)
const
85 auto var = from.property(m_propName);
87 to.setProperty(m_propName, std::move(var));
92 const char* m_propName =
nullptr;
95class CC_TOOLS_API ToolsMsgType :
public ToolsMsgPropBase<unsigned>
97 using Base = ToolsMsgPropBase<unsigned>;
99 using ValueType = ToolsMessage::Type;
103 template <
typename TTo>
104 void setTo(ValueType val, TTo&& to)
106 Base::setTo(
static_cast<Base::ValueType
>(val), std::forward<TTo>(to));
109 template <
typename TFrom>
110 ValueType getFrom(TFrom&& from)
112 return static_cast<ValueType
>(Base::getFrom(std::forward<TFrom>(from)));
116class CC_TOOLS_API ToolsMsgIdx :
public ToolsMsgPropBase<unsigned>
118 using Base = ToolsMsgPropBase<unsigned>;
123class CC_TOOLS_API ToolsMsgTimestamp :
public ToolsMsgPropBase<unsigned long long>
125 using Base = ToolsMsgPropBase<unsigned long long>;
130class CC_TOOLS_API ToolsMsgProtocolName :
public ToolsMsgPropBase<QString>
132 using Base = ToolsMsgPropBase<QString>;
134 ToolsMsgProtocolName();
137class CC_TOOLS_API ToolsMsgTransportMsg :
public ToolsMsgPropBase<ToolsMessagePtr>
139 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
141 ToolsMsgTransportMsg();
144class CC_TOOLS_API ToolsMsgRawDataMsg :
public ToolsMsgPropBase<ToolsMessagePtr>
146 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
148 ToolsMsgRawDataMsg();
151class CC_TOOLS_API ToolsMsgExtraInfoMsg :
public ToolsMsgPropBase<ToolsMessagePtr>
153 using Base = ToolsMsgPropBase<ToolsMessagePtr>;
155 ToolsMsgExtraInfoMsg();
158class CC_TOOLS_API ToolsMsgExtraInfo :
public ToolsMsgPropBase<QVariantMap>
160 using Base = ToolsMsgPropBase<QVariantMap>;
165class CC_TOOLS_API ToolsMsgForceExtraInfoExistence :
public ToolsMsgPropBase<bool>
167 using Base = ToolsMsgPropBase<bool>;
169 ToolsMsgForceExtraInfoExistence();
172class CC_TOOLS_API ToolsMsgDelay :
public ToolsMsgPropBase<unsigned long long>
174 using Base = ToolsMsgPropBase<unsigned long long>;
179class CC_TOOLS_API ToolsMsgDelayUnits :
public ToolsMsgPropBase<QString>
181 using Base = ToolsMsgPropBase<QString>;
183 ToolsMsgDelayUnits();
186class CC_TOOLS_API ToolsMsgRepeatDuration :
public ToolsMsgPropBase<unsigned long long>
188 using Base = ToolsMsgPropBase<unsigned long long>;
190 ToolsMsgRepeatDuration();
193class CC_TOOLS_API ToolsMsgRepeatDurationUnits :
public ToolsMsgPropBase<QString>
195 using Base = ToolsMsgPropBase<QString>;
197 ToolsMsgRepeatDurationUnits();
200class CC_TOOLS_API ToolsMsgRepeatCount :
public ToolsMsgPropBase<unsigned>
202 using Base = ToolsMsgPropBase<unsigned>;
204 ToolsMsgRepeatCount();
207class CC_TOOLS_API ToolsMsgScrollPos :
public ToolsMsgPropBase<int>
209 using Base = ToolsMsgPropBase<int>;
214class CC_TOOLS_API ToolsMsgComment :
public ToolsMsgPropBase<QString>
216 using Base = ToolsMsgPropBase<QString>;