#pragma once
#ifndef TDOUBLEPARAMRELAYPROPERTY_H
#define TDOUBLEPARAMRELAYPROPERTY_H
// TnzCore includes
#include "tproperty.h"
// TnzBase includes
#include "tdoubleparam.h"
#undef DVAPI
#undef DVVAR
#ifdef TPARAM_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
//*****************************************************************************
// TDoubleParamRelayProperty declaration
//*****************************************************************************
//! The TDoubleParamRelayProperty is a TProperty heir which can be used as
//! intermediary between a TDoubleParam instance and its GUI viewers.
class DVAPI TDoubleParamRelayProperty final : public TProperty,
public TParamObserver {
TDoubleParamP m_param; //!< The referenced param
double m_frame; //!< Frame at which m_param returns values
public:
class Visitor {
public:
virtual void visit(TDoubleParamRelayProperty *p) = 0;
};
public:
TDoubleParamRelayProperty(const std::string &name,
TDoubleParamP param = TDoubleParamP());
~TDoubleParamRelayProperty();
TDoubleParamRelayProperty(const TDoubleParamRelayProperty &other);
TDoubleParamRelayProperty &operator=(const TDoubleParamRelayProperty &other);
TProperty *clone() const override;
std::string getValueAsString() override;
void setParam(const TDoubleParamP ¶m);
const TDoubleParamP &getParam() const { return m_param; }
void setValue(double v);
double getValue() const;
double frame() const { return m_frame; }
double &frame() { return m_frame; }
void accept(TProperty::Visitor &v) override;
void onChange(const TParamChange &) override;
};
#endif // TDOUBLEPARAMRELAYPROPERTY_H