tahoma2d/toonz/sources/common/tparam/trangeparam.cpp

162 lines
4.3 KiB
C++
Raw Normal View History

2016-03-19 06:57:51 +13:00
#include "tparamset.h"
#include "tdoubleparam.h"
#include "texception.h"
#include "tstream.h"
//=========================================================
2016-06-15 18:43:10 +12:00
class TRangeParamImp {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TRangeParamImp(const DoublePair &v)
: m_min(new TDoubleParam(v.first)), m_max(new TDoubleParam(v.second)) {}
TRangeParamImp(const TRangeParamImp &src)
: m_min(src.m_min->clone()), m_max(src.m_max->clone()) {}
~TRangeParamImp() {}
TDoubleParamP m_min, m_max;
2016-03-19 06:57:51 +13:00
};
//---------------------------------------------------------
PERSIST_IDENTIFIER(TRangeParam, "rangeParam")
2016-06-15 18:43:10 +12:00
TRangeParam::TRangeParam(const DoublePair &v) : m_data(new TRangeParamImp(v)) {
addParam(m_data->m_min, "min");
addParam(m_data->m_max, "max");
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
TRangeParam::TRangeParam(const TRangeParam &src)
2016-06-15 18:43:10 +12:00
: TParamSet(src.getName()), m_data(new TRangeParamImp(*src.m_data)) {
addParam(m_data->m_min, "min");
addParam(m_data->m_max, "max");
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
TRangeParam::~TRangeParam() { delete m_data; }
2016-03-19 06:57:51 +13:00
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
void TRangeParam::copy(TParam *src) {
TRangeParam *p = dynamic_cast<TRangeParam *>(src);
if (!p) throw TException("invalid source for copy");
setName(src->getName());
m_data->m_min->copy(p->m_data->m_min.getPointer());
m_data->m_max->copy(p->m_data->m_max.getPointer());
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
DoublePair TRangeParam::getDefaultValue() const {
return DoublePair(m_data->m_min->getDefaultValue(),
m_data->m_max->getDefaultValue());
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
DoublePair TRangeParam::getValue(double frame) const {
return DoublePair(m_data->m_min->getValue(frame),
m_data->m_max->getValue(frame));
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
bool TRangeParam::setValue(double frame, const DoublePair &v) {
beginParameterChange();
m_data->m_min->setValue(frame, v.first);
m_data->m_max->setValue(frame, v.second);
endParameterChange();
return true;
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
void TRangeParam::setDefaultValue(const DoublePair &v) {
m_data->m_min->setDefaultValue(v.first);
m_data->m_max->setDefaultValue(v.second);
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
void TRangeParam::loadData(TIStream &is) {
std::string childName;
while (is.openChild(childName)) {
if (childName == "min")
m_data->m_min->loadData(is);
else if (childName == "max")
m_data->m_max->loadData(is);
else
throw TException("unknown tag");
is.closeChild();
}
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
void TRangeParam::saveData(TOStream &os) {
os.openChild("min");
m_data->m_min->saveData(os);
os.closeChild();
os.openChild("max");
m_data->m_max->saveData(os);
os.closeChild();
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
TDoubleParamP &TRangeParam::getMin() { return m_data->m_min; }
2016-03-19 06:57:51 +13:00
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
TDoubleParamP &TRangeParam::getMax() { return m_data->m_max; }
2016-03-19 06:57:51 +13:00
#ifdef BUTTA
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
int TRangeParam::getNextKeyframe(double frame) const {
int f_min = m_data->m_min->getNextKeyframe(frame);
int f_max = m_data->m_max->getNextKeyframe(frame);
if (f_min <= f_max && f_min != -1)
return f_min;
else {
if (f_max != -1)
return f_max;
else
return -1;
}
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
int TRangeParam::getPrevKeyframe(double frame) const {
int f_min = m_data->m_min->getPrevKeyframe(frame);
int f_max = m_data->m_max->getPrevKeyframe(frame);
if (f_min >= f_max)
return f_min;
else
return f_max;
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
void TRangeParam::deleteKeyframe(double frame, bool undoing) {
m_data->m_min->deleteKeyframe(frame, undoing);
m_data->m_max->deleteKeyframe(frame, undoing);
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
bool TRangeParam::isKeyframe(double frame) const {
bool min, max;
min = m_data->m_min->isKeyframe(frame);
max = m_data->m_max->isKeyframe(frame);
return (min || max);
2016-03-19 06:57:51 +13:00
}
//---------------------------------------------------------
#endif