|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef T_PARAM_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
#define T_PARAM_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tpersist.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tsmartpointer.h"
|
|
Toshihiro Shimizu |
890ddd |
#include <set></set>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef DVAPI
|
|
Toshihiro Shimizu |
890ddd |
#undef DVVAR
|
|
Toshihiro Shimizu |
890ddd |
#ifdef TPARAM_EXPORTS
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_EXPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_EXPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_IMPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_IMPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TParamObserver;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
//! This class is an abstract class and is a generic interface to the features of an object.
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
It is used to access to the parameters of an object, with the purpose
|
|
Toshihiro Shimizu |
890ddd |
to store and retrieve the key features.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
class DVAPI TParam : public TSmartObject, public TPersist
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
DECLARE_CLASS_CODE
|
|
Toshihiro Shimizu |
890ddd |
string m_name;
|
|
Toshihiro Shimizu |
890ddd |
string m_description;
|
|
Toshihiro Shimizu |
890ddd |
string m_label;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
The contructor store the name of the parameter and initialize his
|
|
Toshihiro Shimizu |
890ddd |
interface with I/O through the class TPersist.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
TParam(string name = "", string description = "", string label = "")
|
|
Toshihiro Shimizu |
890ddd |
: TSmartObject(m_classCode), TPersist(), m_name(name), m_description(description),
|
|
Toshihiro Shimizu |
890ddd |
m_label(label) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
virtual ~TParam() {}
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Returns the name of the parameter.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
string getName() const { return m_name; };
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This method sets the name of the parameter to \e name.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
void setName(const string &name) { m_name = name; };
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Return the description.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
string getDescription() const { return m_description; }
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Set the description.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
void setDescription(const string &description) { m_description = description; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool hasUILabel() const { return m_label != "" ? true : false; }
|
|
Toshihiro Shimizu |
890ddd |
void setUILabel(const std::string &l) { m_label = l; };
|
|
Toshihiro Shimizu |
890ddd |
std::string getUILabel() const { return m_label; };
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This method must be implemented with a clone function, i.e a function that make
|
|
Toshihiro Shimizu |
890ddd |
a new copy of the parameter.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual TParam *clone() const = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Performs a copy function of the parameter in an existing object.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual void copy(TParam *src) = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
An observer is a generic class that takes care and manages of canghes in the parameters.
|
|
Toshihiro Shimizu |
890ddd |
This method must be implemented with a function that add objects to an observer internal list.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual void addObserver(TParamObserver *) = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Removes \e this from the observer.
|
|
Toshihiro Shimizu |
890ddd |
\sa addObserver()
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual void removeObserver(TParamObserver *) = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This method is used to sets the status changing notification of the parameter. i.e the
|
|
Toshihiro Shimizu |
890ddd |
observer must take care of the changes.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual void enableNotification(bool on) {}
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This method must return \e true if the notification status is enabled.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual bool isNotificationEnabled() const { return true; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This pure virtual method must return a string with the value of the parameter
|
|
Toshihiro Shimizu |
890ddd |
and the precision needed.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual string getValueAlias(double frame, int precision) = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
virtual bool isAnimatable() const = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
It must returns \e true if the \e frame is a keyframe.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual bool isKeyframe(double frame) const = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Removes \e frame from the list of the keyframes associated to this parameter.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual void deleteKeyframe(double frame) = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Removes all keyframes from this parameter.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual void clearKeyframes() = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
Makes the \e frame associated to this parameter a keyframe
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual void assignKeyframe(
|
|
Toshihiro Shimizu |
890ddd |
double frame,
|
|
Toshihiro Shimizu |
890ddd |
const TSmartPointerT<tparam> &src, double srcFrame,</tparam>
|
|
Toshihiro Shimizu |
890ddd |
bool changedOnly = false) = 0;
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This function must be overridden with a method that returns as a reference
|
|
Toshihiro Shimizu |
890ddd |
a list of keyframes in the form of a standard list.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual void getKeyframes(std::set<double> &frames) const {}</double>
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This method must return true if there are keyframes associated to this parameter.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual bool hasKeyframes() const { return false; }
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This method must return the index of the keyframe (if any) after the \e frame, otherwiswe
|
|
Toshihiro Shimizu |
890ddd |
returns -1.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual int getNextKeyframe(double frame) const { return -1; }
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This method must return the index of the keyframe (if any) before the \e frame, otherwiswe
|
|
Toshihiro Shimizu |
890ddd |
returns -1.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual int getPrevKeyframe(double frame) const { return -1; }
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
This method must returns a frame given the index \e index. A frame is a double value representing
|
|
Toshihiro Shimizu |
890ddd |
a frame.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
virtual double keyframeIndexToFrame(int index) const { return 0.0; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
// not implemented
|
|
Toshihiro Shimizu |
890ddd |
TParam(const TParam &);
|
|
Toshihiro Shimizu |
890ddd |
TParam &operator=(const TParam &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef WIN32
|
|
Toshihiro Shimizu |
890ddd |
template class DVAPI TSmartPointerT<tparam>;</tparam>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
typedef TSmartPointerT<tparam> TParamP;</tparam>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef WIN32
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI_PARAM_SMARTPOINTER(PARAM) \
|
|
Toshihiro Shimizu |
890ddd |
template class DVAPI TSmartPointerT<param>; \
|
|
Toshihiro Shimizu |
890ddd |
template class DVAPI TDerivedSmartPointerT<param, tparam="">;</param,>
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI_PARAM_SMARTPOINTER(PARAM)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#define DEFINE_PARAM_SMARTPOINTER(PARAM, TYPE) \
|
|
Toshihiro Shimizu |
890ddd |
DVAPI_PARAM_SMARTPOINTER(PARAM) \
|
|
Toshihiro Shimizu |
890ddd |
\
|
|
Toshihiro Shimizu |
890ddd |
class DVAPI PARAM##P : public TDerivedSmartPointerT<param, tparam=""> \</param,>
|
|
Toshihiro Shimizu |
890ddd |
{ \
|
|
Toshihiro Shimizu |
890ddd |
public: \
|
|
Toshihiro Shimizu |
890ddd |
PARAM##P(PARAM *p = 0) : DerivedSmartPointer(p) {} \
|
|
Toshihiro Shimizu |
890ddd |
PARAM##P(TYPE v) : DerivedSmartPointer(new PARAM(v)) {} \
|
|
Toshihiro Shimizu |
890ddd |
PARAM##P(TParamP &p) : DerivedSmartPointer(p) {} \
|
|
Toshihiro Shimizu |
890ddd |
PARAM##P(const TParamP &p) : DerivedSmartPointer(p) {} \
|
|
Toshihiro Shimizu |
890ddd |
operator TParamP() const { return TParamP(m_pointer); } \
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|