|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tparamset.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tundo.h"
|
|
Toshihiro Shimizu |
890ddd |
//#include "tparam.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tdoubleparam.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tstream.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <set></set>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Shinya Kitaoka |
120a6e |
void doRelease(const std::pair<tparam *,="" std::string=""> ¶m) {</tparam>
|
|
Shinya Kitaoka |
120a6e |
param.first->release();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class TParamSetImp : public TParamObserver {
|
|
Shinya Kitaoka |
120a6e |
friend class TParamSet;
|
|
Shinya Kitaoka |
120a6e |
TParamSet *m_param;
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">> m_params;</std::pair<tparam>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// ChangeBlock *m_changeBlock;
|
|
Shinya Kitaoka |
120a6e |
bool m_draggingEnabled, m_notificationEnabled;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TParamSetImp(TParamSet *param)
|
|
Shinya Kitaoka |
120a6e |
: m_param(param)
|
|
Shinya Kitaoka |
120a6e |
//, m_changeBlock(0)
|
|
Shinya Kitaoka |
120a6e |
, m_draggingEnabled(false)
|
|
Shinya Kitaoka |
120a6e |
, m_notificationEnabled(true) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~TParamSetImp() {
|
|
Shinya Kitaoka |
120a6e |
std::for_each(m_params.begin(), m_params.end(), doRelease);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// std::set<tparamsetobserver*> m_observers;</tparamsetobserver*>
|
|
Shinya Kitaoka |
120a6e |
std::set<tparamobserver *=""> m_paramObservers;</tparamobserver>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
template <typename t=""></typename>
|
|
Shinya Kitaoka |
120a6e |
void notify(const T &change);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void onChange(const TParamChange &change) {}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
3bfa54 |
TParamSet::TParamSet(std::string name)
|
|
Shinya Kitaoka |
120a6e |
: TParam(name), m_imp(new TParamSetImp(this)) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TParamSet::TParamSet(const TParamSet &src)
|
|
Shinya Kitaoka |
120a6e |
: TParam(src.getName()), m_imp(new TParamSetImp(this)) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TParamSet::~TParamSet() { delete m_imp; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
template <class container=""></class>
|
|
Shinya Kitaoka |
120a6e |
class MyBackInsertIterator : public std::iterator
|
|
Shinya Kitaoka |
120a6e |
void, void, void, void>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Toshihiro Shimizu |
890ddd |
Container &container;
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
MyBackInsertIterator(Container &c) : container(c) {}
|
|
Shinya Kitaoka |
120a6e |
MyBackInsertIterator<container> &operator=(const typename</container>
|
|
Shinya Kitaoka |
120a6e |
Container::value_type &value)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
container.push_back(value);
|
|
Toshihiro Shimizu |
890ddd |
return *this;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
MyBackInsertIterator<container>&operator*()</container>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return *this;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
MyBackInsertIterator<container>&operator++()</container>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return *this;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
MyBackInsertIterator<container>&operator++(int)</container>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return *this;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::beginParameterChange() {
|
|
Shinya Kitaoka |
120a6e |
// assert(0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// std::set<tparamsetobserver*>::iterator it = m_imp->m_observers.begin();</tparamsetobserver*>
|
|
Shinya Kitaoka |
120a6e |
// for (;it != m_imp->m_observers.end(); ++it)
|
|
Shinya Kitaoka |
120a6e |
// (*it)->onBeginChangeBlock(this);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// assert(!m_imp->m_changeBlock);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::vector<tparam *=""> params;</tparam>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
MyBackInsertIterator<vector<pair<tparam*, string=""> > ></vector<pair<tparam*,>
|
|
Shinya Kitaoka |
120a6e |
myBackInsertIterator(params);
|
|
Toshihiro Shimizu |
890ddd |
copy(m_imp->m_params.begin(), m_imp->m_params.end(), myIterator);
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it2 =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
for (; it2 != m_imp->m_params.end(); ++it2) params.push_back(it2->first);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// m_imp->m_changeBlock = new ChangeBlock;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TParamSet::endParameterChange(){
|
|
Shinya Kitaoka |
120a6e |
// assert(0);
|
|
Shinya Kitaoka |
120a6e |
// assert(m_imp->m_changeBlock);
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
TParamSetChange change(this, m_imp->m_changeBlock->m_firstAffectedFrame,
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_changeBlock->m_lastAffectedFrame,
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_changeBlock->m_changes, false);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
change.m_dragging = m_imp->m_draggingEnabled;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//delete m_imp->m_changeBlock;
|
|
Toshihiro Shimizu |
890ddd |
//m_imp->m_changeBlock = 0;
|
|
Toshihiro Shimizu |
890ddd |
//m_imp->notify(change);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//std::set<tparamsetobserver*>::iterator it = m_imp->m_observers.begin();</tparamsetobserver*>
|
|
Toshihiro Shimizu |
890ddd |
//for (;it != m_imp->m_observers.end(); ++it)
|
|
Toshihiro Shimizu |
890ddd |
// (*it)->onEndChangeBlock(this);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
m_imp->notify(change);
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::addParam(const TParamP ¶m, const std::string &name) {
|
|
Shinya Kitaoka |
120a6e |
std::pair<tparam *,="" std::string=""> paramToInsert =</tparam>
|
|
Shinya Kitaoka |
120a6e |
std::make_pair(param.getPointer(), name);
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
std::find(m_imp->m_params.begin(), m_imp->m_params.end(), paramToInsert);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (it == m_imp->m_params.end()) {
|
|
Shinya Kitaoka |
120a6e |
param->addRef();
|
|
Shinya Kitaoka |
120a6e |
param->addObserver(m_imp);
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.push_back(paramToInsert);
|
|
Shinya Kitaoka |
120a6e |
// TParamSetParamAdded psParamAdded(this, param.getPointer(), name, false);
|
|
Shinya Kitaoka |
120a6e |
if (param->getName().empty()) param->setName(name);
|
|
Shinya Kitaoka |
120a6e |
// m_imp->notify(psParamAdded);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::insertParam(const TParamP ¶m, const std::string &name,
|
|
Shinya Kitaoka |
120a6e |
int index) {
|
|
Shinya Kitaoka |
120a6e |
std::pair<tparam *,="" std::string=""> paramToInsert =</tparam>
|
|
Shinya Kitaoka |
120a6e |
std::make_pair(param.getPointer(), name);
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
std::find(m_imp->m_params.begin(), m_imp->m_params.end(), paramToInsert);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (it == m_imp->m_params.end()) {
|
|
Shinya Kitaoka |
120a6e |
param->addRef();
|
|
Shinya Kitaoka |
120a6e |
param->addObserver(m_imp);
|
|
Shinya Kitaoka |
120a6e |
it = m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
int f;
|
|
Shinya Kitaoka |
120a6e |
for (f = 0; f < index; f++) it++;
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.insert(it, paramToInsert);
|
|
Shinya Kitaoka |
120a6e |
if (param->getName().empty()) param->setName(name);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Shinya Kitaoka |
120a6e |
class matchesParam {
|
|
Shinya Kitaoka |
120a6e |
TParamP m_param;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
matchesParam(const TParamP ¶m) : m_param(param) {}
|
|
Shinya Kitaoka |
120a6e |
bool operator()(const std::pair<tparam *,="" std::string=""> ¶m) {</tparam>
|
|
Shinya Kitaoka |
120a6e |
return m_param.getPointer() == param.first;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::removeParam(const TParamP ¶m) {
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it = std::find_if(</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin(), m_imp->m_params.end(), matchesParam(param));
|
|
Shinya Kitaoka |
120a6e |
if (it != m_imp->m_params.end()) {
|
|
Shinya Kitaoka |
120a6e |
param->removeObserver(m_imp);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// TParamSetParamRemoved psParamRemoved(this, param.getPointer(),
|
|
Shinya Kitaoka |
120a6e |
// it->second, false);
|
|
Shinya Kitaoka |
120a6e |
// m_imp->notify(psParamRemoved);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
param->release();
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.erase(it);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::removeAllParam() {
|
|
Shinya Kitaoka |
120a6e |
while (!m_imp->m_params.empty()) {
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
TParam *param = it->first;
|
|
Shinya Kitaoka |
120a6e |
param->removeObserver(m_imp);
|
|
Shinya Kitaoka |
120a6e |
param->release();
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.erase(it);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TParamSet::getParamCount() const { return m_imp->m_params.size(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TParamP TParamSet::getParam(int i) const {
|
|
Shinya Kitaoka |
120a6e |
assert(i >= 0 && i < (int)m_imp->m_params.size());
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_params[i].first;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::string TParamSet::getParamName(int i) const {
|
|
Shinya Kitaoka |
120a6e |
assert(i >= 0 && i < (int)m_imp->m_params.size());
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_params[i].second;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TParamSet::getParamIdx(const std::string &name) const {
|
|
Shinya Kitaoka |
120a6e |
int i, paramsCount = m_imp->m_params.size();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < paramsCount; ++i)
|
|
Shinya Kitaoka |
120a6e |
if (m_imp->m_params[i].second == name) break;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
return i;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::getAnimatableParams(std::vector<tparamp> ¶ms,</tparamp>
|
|
Shinya Kitaoka |
120a6e |
bool recursive) {
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
for (; it != m_imp->m_params.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
TParam *param = it->first;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TDoubleParamP dparam = TParamP(param);
|
|
Shinya Kitaoka |
120a6e |
if (dparam)
|
|
Shinya Kitaoka |
120a6e |
params.push_back(dparam);
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
TParamSetP paramset = TParamP(param);
|
|
Shinya Kitaoka |
120a6e |
if (paramset && recursive)
|
|
Shinya Kitaoka |
120a6e |
paramset->getAnimatableParams(params, recursive);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::addObserver(TParamObserver *observer) {
|
|
Shinya Kitaoka |
120a6e |
// TParamSetObserver *obs = dynamic_cast<tparamsetobserver *="">(observer);</tparamsetobserver>
|
|
Shinya Kitaoka |
120a6e |
// if (obs)
|
|
Shinya Kitaoka |
120a6e |
// m_imp->m_observers.insert(obs);
|
|
Shinya Kitaoka |
120a6e |
// else
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_paramObservers.insert(observer);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename t=""></typename>
|
|
Shinya Kitaoka |
120a6e |
void TParamSetImp::notify(const T &change) {
|
|
Shinya Kitaoka |
120a6e |
if (m_notificationEnabled) {
|
|
Shinya Kitaoka |
120a6e |
// for (std::set<tparamsetobserver*>::iterator it = m_observers.begin();</tparamsetobserver*>
|
|
Shinya Kitaoka |
120a6e |
// it!= m_observers.end();
|
|
Shinya Kitaoka |
120a6e |
// ++it)
|
|
Shinya Kitaoka |
120a6e |
// (*it)->onChange(change);
|
|
Shinya Kitaoka |
120a6e |
for (std::set<tparamobserver *="">::iterator paramIt =</tparamobserver>
|
|
Shinya Kitaoka |
120a6e |
m_paramObservers.begin();
|
|
Shinya Kitaoka |
120a6e |
paramIt != m_paramObservers.end(); ++paramIt)
|
|
Shinya Kitaoka |
120a6e |
(*paramIt)->onChange(change);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::removeObserver(TParamObserver *observer) {
|
|
Shinya Kitaoka |
120a6e |
// TParamSetObserver *obs = dynamic_cast<tparamsetobserver *="">(observer);</tparamsetobserver>
|
|
Shinya Kitaoka |
120a6e |
// if (obs)
|
|
Shinya Kitaoka |
120a6e |
// m_imp->m_observers.erase(obs);
|
|
Shinya Kitaoka |
120a6e |
// else
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_paramObservers.erase(observer);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::enableDragging(bool on) {
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
for (; it != m_imp->m_params.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
TDoubleParamP dparam(it->first);
|
|
Shinya Kitaoka |
120a6e |
// if (dparam)
|
|
Shinya Kitaoka |
120a6e |
// dparam->enableDragging(on);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_draggingEnabled = on;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
namespace {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class DoEnableNotification : public std::binary_function {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
DoEnableNotification() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void operator() (const pair<tparam*, string=""> ¶m, bool on)</tparam*,>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return param->first->enableNotification(on);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::enableNotification(bool on) {
|
|
Shinya Kitaoka |
120a6e |
// std::for_each(m_imp->m_params.begin(), m_imp->m_params.end(),
|
|
Shinya Kitaoka |
120a6e |
// std::bind2nd(DoEnableNotification, on));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
for (; it != m_imp->m_params.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
it->first->enableNotification(on);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_notificationEnabled = on;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool TParamSet::isNotificationEnabled() const {
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_notificationEnabled;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool TParamSet::isKeyframe(double frame) const {
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < getParamCount(); i++)
|
|
Shinya Kitaoka |
120a6e |
if (getParam(i)->isKeyframe(frame)) return true;
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::getKeyframes(std::set<double> &frames) const {</double>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < getParamCount(); i++) getParam(i)->getKeyframes(frames);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
double TParamSet::keyframeIndexToFrame(int index) const {
|
|
Shinya Kitaoka |
120a6e |
std::set<double> frames;</double>
|
|
Shinya Kitaoka |
120a6e |
getKeyframes(frames);
|
|
Shinya Kitaoka |
120a6e |
assert(0 <= index && index < (int)frames.size());
|
|
Shinya Kitaoka |
120a6e |
std::set<double>::const_iterator it = frames.begin();</double>
|
|
Shinya Kitaoka |
120a6e |
std::advance(it, index);
|
|
Shinya Kitaoka |
120a6e |
return *it;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TParamSet::getNextKeyframe(double frame) const {
|
|
Shinya Kitaoka |
120a6e |
std::set<double> frames;</double>
|
|
Shinya Kitaoka |
120a6e |
getKeyframes(frames);
|
|
Shinya Kitaoka |
120a6e |
std::set<double>::iterator it = frames.upper_bound(frame);</double>
|
|
Shinya Kitaoka |
120a6e |
if (it == frames.end())
|
|
Shinya Kitaoka |
120a6e |
return -1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
return std::distance(frames.begin(), it);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TParamSet::getPrevKeyframe(double frame) const {
|
|
Shinya Kitaoka |
120a6e |
std::set<double> frames;</double>
|
|
Shinya Kitaoka |
120a6e |
getKeyframes(frames);
|
|
Shinya Kitaoka |
120a6e |
std::set<double>::iterator it = frames.lower_bound(frame);</double>
|
|
Shinya Kitaoka |
120a6e |
if (it == frames.begin())
|
|
Shinya Kitaoka |
120a6e |
return -1;
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
--it;
|
|
Shinya Kitaoka |
120a6e |
return std::distance(frames.begin(), it);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool TParamSet::hasKeyframes() const {
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < getParamCount(); i++)
|
|
Shinya Kitaoka |
120a6e |
if (getParam(i)->hasKeyframes()) return true;
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TParamSet::getKeyframeCount() const {
|
|
Shinya Kitaoka |
120a6e |
std::set<double> frames;</double>
|
|
Shinya Kitaoka |
120a6e |
getKeyframes(frames);
|
|
Shinya Kitaoka |
120a6e |
return frames.size();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::deleteKeyframe(double frame) {
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < getParamCount(); i++) getParam(i)->deleteKeyframe(frame);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::clearKeyframes() {
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < getParamCount(); i++) getParam(i)->clearKeyframes();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::assignKeyframe(double frame, const TParamP &src,
|
|
Shinya Kitaoka |
120a6e |
double srcFrame, bool changedOnly) {
|
|
Shinya Kitaoka |
120a6e |
TParamSetP paramSetSrc = src;
|
|
Shinya Kitaoka |
120a6e |
if (!paramSetSrc) return;
|
|
Shinya Kitaoka |
120a6e |
if (getParamCount() != paramSetSrc->getParamCount()) return;
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < getParamCount(); i++)
|
|
Shinya Kitaoka |
120a6e |
getParam(i)->assignKeyframe(frame, paramSetSrc->getParam(i), srcFrame,
|
|
Shinya Kitaoka |
120a6e |
changedOnly);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TParam *TParamSet::clone() const { return new TParamSet(*this); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::copy(TParam *src) {
|
|
Shinya Kitaoka |
120a6e |
TParamSet *p = dynamic_cast<tparamset *="">(src);</tparamset>
|
|
Shinya Kitaoka |
120a6e |
if (!p) throw TException("invalid source for copy");
|
|
Shinya Kitaoka |
120a6e |
int srcParamCount = p->getParamCount();
|
|
Shinya Kitaoka |
120a6e |
removeAllParam();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < srcParamCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
TParamP param = p->getParam(i);
|
|
Shinya Kitaoka |
120a6e |
addParam(param->clone(), param->getName());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::loadData(TIStream &is) {
|
|
Shinya Kitaoka |
120a6e |
std::string tagName;
|
|
Shinya Kitaoka |
120a6e |
is.openChild(tagName);
|
|
Shinya Kitaoka |
120a6e |
while (!is.eos()) {
|
|
Shinya Kitaoka |
120a6e |
std::string paramName;
|
|
Shinya Kitaoka |
120a6e |
is.openChild(paramName);
|
|
Shinya Kitaoka |
120a6e |
TPersist *p = 0;
|
|
Shinya Kitaoka |
120a6e |
is >> p;
|
|
Shinya Kitaoka |
120a6e |
TParam *param = dynamic_cast<tparam *="">(p);</tparam>
|
|
Shinya Kitaoka |
120a6e |
assert(param);
|
|
Shinya Kitaoka |
120a6e |
addParam(param, paramName);
|
|
Shinya Kitaoka |
120a6e |
is.closeChild();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
is.closeChild();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TParamSet::saveData(TOStream &os) {
|
|
Shinya Kitaoka |
120a6e |
os.openChild(getName());
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator end =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.end();
|
|
Shinya Kitaoka |
120a6e |
while (it != end) {
|
|
Shinya Kitaoka |
120a6e |
os.openChild(it->second);
|
|
Shinya Kitaoka |
120a6e |
// it->first->saveData(os);
|
|
Shinya Kitaoka |
120a6e |
os << it->first;
|
|
Shinya Kitaoka |
120a6e |
os.closeChild();
|
|
Shinya Kitaoka |
120a6e |
++it;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
os.closeChild();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::string TParamSet::getValueAlias(double frame, int precision) {
|
|
Shinya Kitaoka |
120a6e |
std::string alias = "(";
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator end =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
std::advance(end, m_imp->m_params.size() - 1);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tparam *,="" std::string="">>::iterator it =</std::pair<tparam>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_params.begin();
|
|
Shinya Kitaoka |
120a6e |
for (; it != end; ++it)
|
|
Shinya Kitaoka |
120a6e |
alias += it->first->getValueAlias(frame, precision) + ",";
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
alias += it->first->getValueAlias(frame, precision);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
alias += ")";
|
|
Shinya Kitaoka |
120a6e |
return alias;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TPersistDeclarationT<tparamset> TParamSet::m_declaration("TParamSet");</tparamset>
|