8 #include "portalitem.h"
9 #include "portalutils.h"
14 #include <parametervec.h>
15 #include <nap/signalslot.h>
77 const std::vector<typename T::value_type> getVectorValues()
const;
82 bool setVectorValues(
const std::vector<typename T::value_type>& values,
utility::ErrorState& error);
103 mParameter->valueChanged.connect(mParameterUpdateSlot);
110 mParameter->valueChanged.disconnect(mParameterUpdateSlot);
128 if (!error.check(arg->
isArray(),
"%s: expected array for value argument, not %s", mID.c_str(), arg->
getValueType().get_name().data()))
132 const std::vector<typename T::value_type>* values = arg->
asArray<
typename T::value_type>();
133 if (!error.check(values !=
nullptr,
"%s: expected array of %s for value argument, not %s", mID.c_str(), RTTI_OF(
typename T::value_type).get_name().data(), arg->
getValueType().get_name().data()))
136 return setVectorValues(*values, error);
142 APIEventPtr event = std::make_unique<APIEvent>(mParameter->getDisplayName(), mID);
154 APIEventPtr event = std::make_unique<APIEvent>(mParameter->getDisplayName(), mID);
162 size_t length = mParameter->mValue.length();
163 std::vector<typename T::value_type> values(length);
164 std::memcpy(values.data(), &mParameter->mValue,
sizeof(
typename T::value_type) * length);
169 bool PortalItemVec<T>::setVectorValues(
const std::vector<typename T::value_type>& values, utility::ErrorState& error)
172 size_t length = mParameter->mValue.length();
173 if (!error.check(values.size() == length,
"%s: expected a vector of size %i, received %i", mID.c_str(), length, values.size()))
178 std::memcpy(&new_value, values.data(),
sizeof(
typename T::value_type) * length);
179 mParameter->valueChanged.disconnect(mParameterUpdateSlot);
180 mParameter->setValue(new_value);
181 mParameter->valueChanged.connect(mParameterUpdateSlot);
189 #define DEFINE_PORTAL_ITEM_VEC(Type) \
190 RTTI_BEGIN_CLASS(Type, "Portal vector item") \
191 RTTI_PROPERTY("Parameter", &Type::mParameter, nap::rtti::EPropertyMetaData::Required, "Vector parameter") \
virtual bool processUpdate(const APIEvent &event, utility::ErrorState &error) override
Definition: portalitemvec.h:120
Definition: apivalue.h:56
constexpr const char * itemValueArgName
Name of the argument containing the portal item value in the portal item message.
Definition: portalutils.h:19
constexpr const char * itemTypeArgName
Name of the argument containing the portal item type in the portal item message.
Definition: portalutils.h:18
const rtti::TypeInfo getValueType() const
Definition: portalitemvec.h:23
constexpr const char * itemMinArgName
Name of the argument containing the minimum portal item value in the portal item message.
Definition: portalutils.h:20
virtual APIEventPtr getDescriptor() const override
Definition: portalitemvec.h:140
Definition: objectptr.h:154
ResourcePtr< ParameterVec< T > > mParameter
Property: 'Parameter' the parameter linked to this portal item.
Definition: portalitemvec.h:70
Definition: errorstate.h:19
virtual bool init(utility::ErrorState &error) override
Definition: portalitemvec.h:101
Definition: portalitem.h:19
constexpr const char * itemMaxArgName
Name of the argument containing the maximum portal item value in the portal item message.
Definition: portalutils.h:21
std::unique_ptr< nap::APIEvent > APIEventPtr
Definition: apievent.h:179
virtual void onDestroy() override
Definition: portalitemvec.h:108
Slot< T > mParameterUpdateSlot
Definition: portalitemvec.h:68
virtual APIEventPtr getValue() const override
Definition: portalitemvec.h:152
Definition: templateapp.h:17
Definition: apiargument.h:22
const std::vector< T > * asArray() const
Definition: apiargument.h:208
constexpr const char * itemClampArgName
Name of the argument containing the clamp value in the portal item message.
Definition: portalutils.h:22
Definition: apievent.h:37
virtual void onParameterUpdate(T value)
Definition: portalitemvec.h:114