|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tparamcontainer.h"
|
|
Toshihiro Shimizu |
890ddd |
//#include "tdoubleparam.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tparamset.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tparam.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TParamVar::setParamObserver(TParamObserver *obs)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if (m_paramObserver == obs)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
TParam *param = getParam();
|
|
Toshihiro Shimizu |
890ddd |
if (param) {
|
|
Toshihiro Shimizu |
890ddd |
if (obs)
|
|
Toshihiro Shimizu |
890ddd |
param->addObserver(obs);
|
|
Toshihiro Shimizu |
890ddd |
if (m_paramObserver)
|
|
Toshihiro Shimizu |
890ddd |
param->removeObserver(m_paramObserver);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
m_paramObserver = obs;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TParamContainer::Imp
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
std::map<string, *="" tparamvar=""> m_nameTable;</string,>
|
|
Toshihiro Shimizu |
890ddd |
std::vector<tparamvar *=""> m_vars;</tparamvar>
|
|
Toshihiro Shimizu |
890ddd |
TParamObserver *m_paramObserver;
|
|
Toshihiro Shimizu |
890ddd |
Imp() : m_paramObserver(0) {}
|
|
Toshihiro Shimizu |
890ddd |
~Imp() { clearPointerContainer(m_vars); }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TParamContainer::TParamContainer()
|
|
Toshihiro Shimizu |
890ddd |
: m_imp(new Imp())
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TParamContainer::~TParamContainer()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
delete m_imp;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TParamContainer::setParamObserver(TParamObserver *observer)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_imp->m_paramObserver = observer;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TParamObserver *TParamContainer::getParamObserver() const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_imp->m_paramObserver;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TParamContainer::add(TParamVar *var)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_imp->m_vars.push_back(var);
|
|
Toshihiro Shimizu |
890ddd |
m_imp->m_nameTable[var->getName()] = var;
|
|
Toshihiro Shimizu |
890ddd |
var->setParamObserver(m_imp->m_paramObserver);
|
|
Toshihiro Shimizu |
890ddd |
var->getParam()->setName(var->getName());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int TParamContainer::getParamCount() const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_imp->m_vars.size();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TParam *TParamContainer::getParam(int index) const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
assert(0 <= index && index < getParamCount());
|
|
Toshihiro Shimizu |
890ddd |
return m_imp->m_vars[index]->getParam();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool TParamContainer::isParamHidden(int index) const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
assert(0 <= index && index < getParamCount());
|
|
Toshihiro Shimizu |
890ddd |
return m_imp->m_vars[index]->isHidden();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
string TParamContainer::getParamName(int index) const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
assert(0 <= index && index < getParamCount());
|
|
Toshihiro Shimizu |
890ddd |
return m_imp->m_vars[index]->getName();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const TParamVar *TParamContainer::getParamVar(int index) const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
assert(0 <= index && index < getParamCount());
|
|
Toshihiro Shimizu |
890ddd |
return m_imp->m_vars[index];
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TParam *TParamContainer::getParam(string name) const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
std::map<string, *="" tparamvar="">::const_iterator it;</string,>
|
|
Toshihiro Shimizu |
890ddd |
it = m_imp->m_nameTable.find(name);
|
|
Toshihiro Shimizu |
890ddd |
if (it == m_imp->m_nameTable.end())
|
|
Toshihiro Shimizu |
890ddd |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
return it->second->getParam();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TParamContainer::unlink()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
for (int i = 0; i < getParamCount(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
//TRangeParam *p0;//,*p1;
|
|
Toshihiro Shimizu |
890ddd |
TParamVar *var = m_imp->m_vars[i];
|
|
Toshihiro Shimizu |
890ddd |
TParam *param = var->getParam();
|
|
Toshihiro Shimizu |
890ddd |
//p0 = dynamic_cast<trangeparam *="">(param);</trangeparam>
|
|
Toshihiro Shimizu |
890ddd |
var->setParam(param->clone());
|
|
Toshihiro Shimizu |
890ddd |
/*p1 = dynamic_cast<trangeparam *="">(var->getParam());</trangeparam>
|
|
Toshihiro Shimizu |
890ddd |
if(p0 && p1)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
string name = p0->getName();
|
|
Toshihiro Shimizu |
890ddd |
name = p1->getName();
|
|
Toshihiro Shimizu |
890ddd |
}*/
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TParamContainer::link(const TParamContainer *src)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
assert(getParamCount() == src->getParamCount());
|
|
Toshihiro Shimizu |
890ddd |
for (int i = 0; i < getParamCount(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
assert(getParamName(i) == src->getParamName(i));
|
|
Toshihiro Shimizu |
890ddd |
assert(m_imp->m_vars[i]->getName() == getParamName(i));
|
|
Toshihiro Shimizu |
890ddd |
m_imp->m_vars[i]->setParam(src->getParam(i));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TParamContainer::copy(const TParamContainer *src)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
assert(getParamCount() == src->getParamCount());
|
|
Toshihiro Shimizu |
890ddd |
for (int i = 0; i < getParamCount(); i++) {
|
|
Toshihiro Shimizu |
890ddd |
assert(getParamName(i) == src->getParamName(i));
|
|
Toshihiro Shimizu |
890ddd |
assert(m_imp->m_vars[i]->getName() == getParamName(i));
|
|
Toshihiro Shimizu |
890ddd |
getParam(i)->copy(src->getParam(i));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|