Toshihiro Shimizu 890ddd
#ifndef TNOTANIMATABLEPARAM_H
Toshihiro Shimizu 890ddd
#define TNOTANIMATABLEPARAM_H
Toshihiro Shimizu 890ddd
Shinya Kitaoka 262a92
#include <memory></memory>
Shinya Kitaoka 262a92
Toshihiro Shimizu 890ddd
#include "tparam.h"
Toshihiro Shimizu 890ddd
#include "tparamchange.h"
Toshihiro Shimizu 890ddd
#include "tfilepath.h"
Toshihiro Shimizu 890ddd
#include "texception.h"
Toshihiro Shimizu 890ddd
#include "tundo.h"
Toshihiro Shimizu 890ddd
#include "tconvert.h"
Toshihiro Shimizu 890ddd
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
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
//  TNotAnimatableParamChange
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
#pragma warning(push)
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4251)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class TNotAnimatableParamChange : public TParamChange
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	T m_oldValue;
Toshihiro Shimizu 890ddd
	T m_newValue;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TNotAnimatableParamChange(TParam *param,
Toshihiro Shimizu 890ddd
							  const T &oldValue, const T &newValue,
Toshihiro Shimizu 890ddd
							  bool undoing)
Toshihiro Shimizu 890ddd
		: TParamChange(param, TParamChange::m_minFrame, TParamChange::m_maxFrame,
Toshihiro Shimizu 890ddd
					   false, false, undoing),
Toshihiro Shimizu 890ddd
		  m_oldValue(oldValue), m_newValue(newValue) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TParamChange *clone() const { return new TNotAnimatableParamChange<t>(*this); }</t>
Toshihiro Shimizu 890ddd
	TUndo *createUndo() const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
//  TNotAnimatableParamChangeUndo
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class TNotAnimatableParamChangeUndo : public TUndo
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TNotAnimatableParamChangeUndo(TParam *param,
Toshihiro Shimizu 890ddd
								  const T &oldValue,
Toshihiro Shimizu 890ddd
								  const T &newValue);
Toshihiro Shimizu 890ddd
	~TNotAnimatableParamChangeUndo();
Toshihiro Shimizu 890ddd
	void undo() const;
Toshihiro Shimizu 890ddd
	void redo() const;
Toshihiro Shimizu 890ddd
	int getSize() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	TParam *m_param;
Toshihiro Shimizu 890ddd
	T m_oldValue;
Toshihiro Shimizu 890ddd
	T m_newValue;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
//  TNotAnimatableParamObserver
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class TNotAnimatableParamObserver : public TParamObserver
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TNotAnimatableParamObserver() {}
Toshihiro Shimizu 890ddd
	virtual void onChange(const TParamChange &) = 0;
Toshihiro Shimizu 890ddd
	void onChange(const TNotAnimatableParamChange<t> &change)</t>
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		onChange(static_cast<const &="" tparamchange="">(change));</const>
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef TNotAnimatableParamObserver<int> TIntParamObserver;</int>
Toshihiro Shimizu 890ddd
typedef TNotAnimatableParamObserver<bool> TBoolParamObserver;</bool>
Toshihiro Shimizu 890ddd
typedef TNotAnimatableParamObserver<tfilepath> TFilePathParamObserver;</tfilepath>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
//    TNotAnimatableParam base class
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
using std::set;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class DVAPI TNotAnimatableParam : public TParam
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	T m_defaultValue, m_value;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	set<tnotanimatableparamobserver<t> *> m_observers;</tnotanimatableparamobserver<t>
Toshihiro Shimizu 890ddd
	set<tparamobserver *=""> m_paramObservers;</tparamobserver>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TNotAnimatableParam(T def = T()) : TParam(), m_defaultValue(def), m_value(def){};
Toshihiro Shimizu 890ddd
	TNotAnimatableParam(const TNotAnimatableParam &src)
Toshihiro Shimizu 890ddd
		: TParam(src.getName()), m_defaultValue(src.getDefaultValue()), m_value(src.getValue()){};
Toshihiro Shimizu 890ddd
	~TNotAnimatableParam(){};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	T getValue() const { return m_value; }
Toshihiro Shimizu 890ddd
	T getDefaultValue() const { return m_defaultValue; }
Toshihiro Shimizu 890ddd
	void setValue(T v, bool undoing = false)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		if (m_value == v)
Toshihiro Shimizu 890ddd
			return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		TNotAnimatableParamChange<t> change(this, m_value, v, undoing);</t>
Toshihiro Shimizu 890ddd
		m_value = v;
Toshihiro Shimizu 890ddd
		for (typename std::set<tnotanimatableparamobserver<t> *>::iterator obsIt = m_observers.begin();</tnotanimatableparamobserver<t>
Toshihiro Shimizu 890ddd
			 obsIt != m_observers.end();
Toshihiro Shimizu 890ddd
			 ++obsIt)
Toshihiro Shimizu 890ddd
			(*obsIt)->onChange(change);
Toshihiro Shimizu 890ddd
		for (std::set<tparamobserver *="">::iterator parObsIt = m_paramObservers.begin();</tparamobserver>
Toshihiro Shimizu 890ddd
			 parObsIt != m_paramObservers.end();
Toshihiro Shimizu 890ddd
			 ++parObsIt)
Toshihiro Shimizu 890ddd
			(*parObsIt)->onChange(change);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setDefaultValue(T value) { m_defaultValue = value; }
Toshihiro Shimizu 890ddd
	void copy(TParam *src)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		TNotAnimatableParam<t> *p = dynamic_cast<tnotanimatableparam<t> *>(src);</tnotanimatableparam<t></t>
Toshihiro Shimizu 890ddd
		if (!p)
Toshihiro Shimizu 890ddd
			throw TException("invalid source for copy");
Toshihiro Shimizu 890ddd
		setName(src->getName());
Toshihiro Shimizu 890ddd
		m_defaultValue = p->m_defaultValue;
Toshihiro Shimizu 890ddd
		m_value = p->m_value;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void reset(bool undoing = false) { setValue(m_defaultValue, undoing); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void addObserver(TParamObserver *observer)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		TNotAnimatableParamObserver<t> *obs = dynamic_cast<tnotanimatableparamobserver<t> *>(observer);</tnotanimatableparamobserver<t></t>
Toshihiro Shimizu 890ddd
		if (obs)
Toshihiro Shimizu 890ddd
			m_observers.insert(obs);
Toshihiro Shimizu 890ddd
		else
Toshihiro Shimizu 890ddd
			m_paramObservers.insert(observer);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	void removeObserver(TParamObserver *observer)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		TNotAnimatableParamObserver<t> *obs = dynamic_cast<tnotanimatableparamobserver<t> *>(observer);</tnotanimatableparamobserver<t></t>
Toshihiro Shimizu 890ddd
		if (obs)
Toshihiro Shimizu 890ddd
			m_observers.erase(obs);
Toshihiro Shimizu 890ddd
		else
Toshihiro Shimizu 890ddd
			m_paramObservers.erase(observer);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool isAnimatable() const { return false; }
Toshihiro Shimizu 890ddd
	bool isKeyframe(double) const { return false; }
Toshihiro Shimizu 890ddd
	void deleteKeyframe(double) {}
Toshihiro Shimizu 890ddd
	void clearKeyframes() {}
Toshihiro Shimizu 890ddd
	void assignKeyframe(
Toshihiro Shimizu 890ddd
		double,
Toshihiro Shimizu 890ddd
		const TSmartPointerT<tparam> &, double,</tparam>
Toshihiro Shimizu 890ddd
		bool) {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 3bfa54
	std::string getValueAlias(double, int)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return toString(getValue());
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	bool hasKeyframes() const { return 0; };
Toshihiro Shimizu 890ddd
	void getKeyframes(std::set<double> &) const {};</double>
Toshihiro Shimizu 890ddd
	int getNextKeyframe(double) const { return -1; };
Toshihiro Shimizu 890ddd
	int getPrevKeyframe(double) const { return -1; };
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//  class TIntParam
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TNotAnimatableParam<int>;</int>
Toshihiro Shimizu 890ddd
class TIntParam;
Toshihiro Shimizu 890ddd
template class DVAPI TPersistDeclarationT<tintparam>;</tintparam>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TIntParam : public TNotAnimatableParam<int></int>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	PERSIST_DECLARATION(TIntParam);
Toshihiro Shimizu 890ddd
	int minValue, maxValue;
Toshihiro Shimizu 890ddd
	bool m_isWheelEnabled;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TIntParam(int v = int()) : TNotAnimatableParam<int>(v),</int>
Toshihiro Shimizu 890ddd
							   minValue(-(std::numeric_limits<int>::max)()),</int>
Toshihiro Shimizu 890ddd
							   maxValue((std::numeric_limits<int>::max)()), m_isWheelEnabled(false) {}</int>
Toshihiro Shimizu 890ddd
	TIntParam(const TIntParam &src) : TNotAnimatableParam<int>(src) {}</int>
Toshihiro Shimizu 890ddd
	TParam *clone() const { return new TIntParam(*this); }
Toshihiro Shimizu 890ddd
	void loadData(TIStream &is);
Toshihiro Shimizu 890ddd
	void saveData(TOStream &os);
Toshihiro Shimizu 890ddd
	void enableWheel(bool on);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool isWheelEnabled() const;
Toshihiro Shimizu 890ddd
	void setValueRange(int min, int max);
Toshihiro Shimizu 890ddd
	bool getValueRange(int &min, int &max) const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
DEFINE_PARAM_SMARTPOINTER(TIntParam, int)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//  class TBoolParam
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TNotAnimatableParam<bool>;</bool>
Toshihiro Shimizu 890ddd
class TBoolParam;
Toshihiro Shimizu 890ddd
template class DVAPI TPersistDeclarationT<tboolparam>;</tboolparam>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TBoolParam : public TNotAnimatableParam<bool></bool>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	PERSIST_DECLARATION(TBoolParam);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TBoolParam(bool v = bool()) : TNotAnimatableParam<bool>(v) {}</bool>
Toshihiro Shimizu 890ddd
	TBoolParam(const TBoolParam &src) : TNotAnimatableParam<bool>(src) {}</bool>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TParam *clone() const { return new TBoolParam(*this); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void loadData(TIStream &is);
Toshihiro Shimizu 890ddd
	void saveData(TOStream &os);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
DEFINE_PARAM_SMARTPOINTER(TBoolParam, bool)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//  class TFilePathParam
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TNotAnimatableParam<tfilepath>;</tfilepath>
Toshihiro Shimizu 890ddd
class TFilePathParam;
Toshihiro Shimizu 890ddd
template class DVAPI TPersistDeclarationT<tfilepathparam>;</tfilepathparam>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TFilePathParam : public TNotAnimatableParam<tfilepath></tfilepath>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	PERSIST_DECLARATION(TFilePathParam);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TFilePathParam(const TFilePath &v = TFilePath()) : TNotAnimatableParam<tfilepath>(v) {}</tfilepath>
Toshihiro Shimizu 890ddd
	TFilePathParam(const TFilePathParam &src) : TNotAnimatableParam<tfilepath>(src) {}</tfilepath>
Toshihiro Shimizu 890ddd
	TParam *clone() const { return new TFilePathParam(*this); }
Toshihiro Shimizu 890ddd
	void loadData(TIStream &is);
Toshihiro Shimizu 890ddd
	void saveData(TOStream &os);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
DEFINE_PARAM_SMARTPOINTER(TFilePathParam, TFilePath)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//  class TStringParam
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TNotAnimatableParam<std::wstring>;</std::wstring>
Toshihiro Shimizu 890ddd
class TStringParam;
Toshihiro Shimizu 890ddd
template class DVAPI TPersistDeclarationT<tstringparam>;</tstringparam>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TStringParam : public TNotAnimatableParam<std::wstring></std::wstring>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	PERSIST_DECLARATION(TStringParam);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 3bfa54
	TStringParam(std::wstring v = L"") : TNotAnimatableParam<std::wstring>(v) {}</std::wstring>
Shinya Kitaoka 3bfa54
	TStringParam(const TStringParam &src) : TNotAnimatableParam<std::wstring>(src) {}</std::wstring>
Toshihiro Shimizu 890ddd
	TParam *clone() const { return new TStringParam(*this); }
Toshihiro Shimizu 890ddd
	void loadData(TIStream &is);
Toshihiro Shimizu 890ddd
	void saveData(TOStream &os);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 3bfa54
DEFINE_PARAM_SMARTPOINTER(TStringParam, std::wstring)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//  class TEnumParam
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TEnumParamImp;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TEnumParam : public TNotAnimatableParam<int></int>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	PERSIST_DECLARATION(TEnumParam)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 3bfa54
	TEnumParam(const int &v, const std::string &caption);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TEnumParam();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TEnumParam(const TEnumParam &src);
Toshihiro Shimizu 890ddd
	~TEnumParam();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TParam *clone() const { return new TEnumParam(*this); }
Toshihiro Shimizu 890ddd
	void copy(TParam *src);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setValue(int v, bool undoing = false);
Shinya Kitaoka 3bfa54
	void setValue(const std::string &caption, bool undoing = false);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 3bfa54
	void addItem(const int &item, const std::string &caption);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getItemCount() const;
Shinya Kitaoka 3bfa54
	void getItem(int i, int &item, std::string &caption) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// TPersist methods
Toshihiro Shimizu 890ddd
	void loadData(TIStream &is);
Toshihiro Shimizu 890ddd
	void saveData(TOStream &os);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 262a92
	std::unique_ptr<tenumparamimp> m_imp;</tenumparamimp>
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef TEnumParam TIntEnumParam;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef TNotAnimatableParamObserver<tintenumparam> TIntEnumParamObserver;</tintenumparam>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
DVAPI_PARAM_SMARTPOINTER(TIntEnumParam)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TIntEnumParamP : public TDerivedSmartPointerT<tintenumparam, tparam=""></tintenumparam,>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TIntEnumParamP(TIntEnumParam *p = 0) : DerivedSmartPointer(p) {}
Shinya Kitaoka 3bfa54
	TIntEnumParamP(int v, const std::string &caption) : DerivedSmartPointer(new TEnumParam(v, caption)) {}
Toshihiro Shimizu 890ddd
	TIntEnumParamP(TParamP &p) : DerivedSmartPointer(p) {}
Toshihiro Shimizu 890ddd
	TIntEnumParamP(const TParamP &p) : DerivedSmartPointer(p) {}
Toshihiro Shimizu 890ddd
	operator TParamP() const { return TParamP(m_pointer); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//  class TNADoubleParam   //is a not animatable double param
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TNotAnimatableParam<double>;</double>
Toshihiro Shimizu 890ddd
class TNADoubleParam;
Toshihiro Shimizu 890ddd
template class DVAPI TPersistDeclarationT<tnadoubleparam>;</tnadoubleparam>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TNADoubleParam : public TNotAnimatableParam<double></double>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	PERSIST_DECLARATION(TNADoubleParam);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TNADoubleParam(double v = double()) : TNotAnimatableParam<double>(v), m_min(0.), m_max(100.) {}</double>
Toshihiro Shimizu 890ddd
	TNADoubleParam(const TNADoubleParam &src) : TNotAnimatableParam<double>(src) {}</double>
Toshihiro Shimizu 890ddd
	TParam *clone() const { return new TNADoubleParam(*this); }
Toshihiro Shimizu 890ddd
	void setValueRange(double min, double max)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		m_min = min;
Toshihiro Shimizu 890ddd
		m_max = max;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	void setValue(double v, bool undoing = false)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		notMoreThan(m_max, v);
Toshihiro Shimizu 890ddd
		notLessThan(m_min, v);
Toshihiro Shimizu 890ddd
		TNotAnimatableParam<double>::setValue(v, undoing);</double>
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	bool getValueRange(double &min, double &max) const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		min = m_min;
Toshihiro Shimizu 890ddd
		max = m_max;
Toshihiro Shimizu 890ddd
		return min < max;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void loadData(TIStream &is);
Toshihiro Shimizu 890ddd
	void saveData(TOStream &os);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	double m_min, m_max;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
DEFINE_PARAM_SMARTPOINTER(TNADoubleParam, double)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
//  TNotAnimatableParamChangeUndo
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
TNotAnimatableParamChangeUndo<t>::TNotAnimatableParamChangeUndo(TParam *param,</t>
Toshihiro Shimizu 890ddd
																const T &oldValue,
Toshihiro Shimizu 890ddd
																const T &newValue)
Toshihiro Shimizu 890ddd
	: m_param(param), m_oldValue(oldValue), m_newValue(newValue)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_param->addRef();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
TNotAnimatableParamChangeUndo<t>::~TNotAnimatableParamChangeUndo()</t>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_param->release();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
void TNotAnimatableParamChangeUndo<t>::undo() const</t>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TNotAnimatableParam<t> *p = dynamic_cast<tnotanimatableparam<t> *>(m_param);</tnotanimatableparam<t></t>
Toshihiro Shimizu 890ddd
	p->setValue(m_oldValue, true);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
void TNotAnimatableParamChangeUndo<t>::redo() const</t>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TNotAnimatableParam<t> *p = dynamic_cast<tnotanimatableparam<t> *>(m_param);</tnotanimatableparam<t></t>
Toshihiro Shimizu 890ddd
	p->setValue(m_newValue, true);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
int TNotAnimatableParamChangeUndo<t>::getSize() const</t>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return sizeof(*this);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
//  TNotAnimatableParamChange
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
TUndo *TNotAnimatableParamChange<t>::createUndo() const</t>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return new TNotAnimatableParamChangeUndo<t>(m_param, m_oldValue, m_newValue);</t>
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
#pragma warning(pop)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif