20#include "cc_tools_qt/details/ToolsFieldBase.h"
21#include "cc_tools_qt/field/ToolsBitfieldField.h"
28#include "comms/field/Bitfield.h"
36template <
typename TField>
37class ToolsBitfieldFieldImpl :
public ToolsFieldBase<cc_tools_qt::field::ToolsBitfieldField, TField>
39 using Base = ToolsFieldBase<cc_tools_qt::field::ToolsBitfieldField, TField>;
42 static_assert(comms::field::isBitfield<Field>(),
"Must be of Bitfield field type");
45 using Ptr =
typename Base::Ptr;
46 using ActPtr =
typename Base::ActPtr;
48 explicit ToolsBitfieldFieldImpl(Field& fieldRef)
53 ToolsBitfieldFieldImpl(
const ToolsBitfieldFieldImpl&) =
default;
54 ToolsBitfieldFieldImpl(ToolsBitfieldFieldImpl&&) =
default;
55 virtual ~ToolsBitfieldFieldImpl() noexcept = default;
57 ToolsBitfieldFieldImpl& operator=(const ToolsBitfieldFieldImpl&) = delete;
60 virtual Ptr cloneImpl()
override
62 return ActPtr(
new ToolsBitfieldFieldImpl<TField>(Base::field()));
65 virtual void membersUpdatedImpl()
override
67 auto& mems = Base::getMembers();
68 for (
auto& m : mems) {
70 m->forceHiddenSerialization();
76template <
typename TField>
77auto makeBitfieldField(TField& field)
79 return std::make_unique<ToolsBitfieldFieldImpl<TField>>(field);