|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tnotanimatableparam.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tstream.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_IDENTIFIER(TIntParam, "intParam")
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_IDENTIFIER(TBoolParam, "boolParam")
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_IDENTIFIER(TFilePathParam, "filePathParam")
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_IDENTIFIER(TStringParam, "stringParam")
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_IDENTIFIER(TNADoubleParam, "naDoubleParam")
|
|
Toshihiro Shimizu |
890ddd |
//PERSIST_IDENTIFIER(TIntEnumParam, "intEnumParam")
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TPersistDeclarationT<tenumparam> TEnumParam::m_declaration("intEnumParam");</tenumparam>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TIntParam::loadData(TIStream &is)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int def, value;
|
|
Toshihiro Shimizu |
890ddd |
is >> def;
|
|
Toshihiro Shimizu |
890ddd |
if (is.eos()) {
|
|
Toshihiro Shimizu |
890ddd |
def += 1;
|
|
Toshihiro Shimizu |
890ddd |
setDefaultValue(def);
|
|
Toshihiro Shimizu |
890ddd |
setValue(def, false);
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
setDefaultValue(def);
|
|
Toshihiro Shimizu |
890ddd |
is >> value;
|
|
Toshihiro Shimizu |
890ddd |
setValue(value, false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TIntParam::saveData(TOStream &os)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
os << getDefaultValue();
|
|
Toshihiro Shimizu |
890ddd |
os << getValue();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool TIntParam::isWheelEnabled() const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_isWheelEnabled;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TIntParam::enableWheel(bool on)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_isWheelEnabled = on;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TBoolParam::loadData(TIStream &is)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int def, value;
|
|
Toshihiro Shimizu |
890ddd |
is >> def >> value;
|
|
Toshihiro Shimizu |
890ddd |
setDefaultValue(def ? true : false);
|
|
Toshihiro Shimizu |
890ddd |
setValue(value ? true : false, false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TBoolParam::saveData(TOStream &os)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
os << (int)getDefaultValue() << (int)getValue();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TFilePathParam::loadData(TIStream &is)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
TFilePath def, value;
|
|
Toshihiro Shimizu |
890ddd |
is >> def >> value;
|
|
Toshihiro Shimizu |
890ddd |
setDefaultValue(def);
|
|
Toshihiro Shimizu |
890ddd |
setValue(value, false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TFilePathParam::saveData(TOStream &os)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
os << getDefaultValue();
|
|
Toshihiro Shimizu |
890ddd |
os << getValue();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
void TStringParam::loadData(TIStream &is)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
wstring def, value;
|
|
Toshihiro Shimizu |
890ddd |
is >> def >> value;
|
|
Toshihiro Shimizu |
890ddd |
setDefaultValue(def);
|
|
Toshihiro Shimizu |
890ddd |
setValue(value, false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
void TStringParam::saveData(TOStream &os)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
os << getDefaultValue();
|
|
Toshihiro Shimizu |
890ddd |
os << getValue();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
void TNADoubleParam::loadData(TIStream &is)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
double def, value;
|
|
Toshihiro Shimizu |
890ddd |
is >> def >> value;
|
|
Toshihiro Shimizu |
890ddd |
setDefaultValue(def);
|
|
Toshihiro Shimizu |
890ddd |
setValue(value, false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
void TNADoubleParam::saveData(TOStream &os)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
os << getDefaultValue();
|
|
Toshihiro Shimizu |
890ddd |
os << getValue();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
namespace
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
template <typename t=""></typename>
|
|
Toshihiro Shimizu |
890ddd |
class matchesValue
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
T m_v;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
matchesValue(T v) : m_v(v) {}
|
|
Toshihiro Shimizu |
890ddd |
bool operator()(const pair<t, string=""> &p) { return m_v == p.first; }</t,>
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TEnumParamImp
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
vector<pair<int, string="">> m_items;</pair<int,>
|
|
Toshihiro Shimizu |
890ddd |
void copy(TEnumParamImp *src)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_items.clear();
|
|
Toshihiro Shimizu |
890ddd |
std::back_insert_iterator<std::vector<pair<int, string="">>> bii(m_items);</std::vector<pair<int,>
|
|
Toshihiro Shimizu |
890ddd |
std::copy(src->m_items.begin(), src->m_items.end(), bii);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
bool checkValue(int v)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
std::vector<pair<int, string="">>::iterator it =</pair<int,>
|
|
Toshihiro Shimizu |
890ddd |
std::find_if(m_items.begin(), m_items.end(), matchesValue<int>(v));</int>
|
|
Toshihiro Shimizu |
890ddd |
return it != m_items.end();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TEnumParam::TEnumParam(const int &v, const string &caption)
|
|
Toshihiro Shimizu |
890ddd |
: TNotAnimatableParam<int>(v), m_imp(new TEnumParamImp())</int>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
addItem(v, caption);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TEnumParam::copy(TParam *src)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
TNotAnimatableParam<int>::copy(src);</int>
|
|
Toshihiro Shimizu |
890ddd |
TEnumParam *p = dynamic_cast<tenumparam *="">(src);</tenumparam>
|
|
Toshihiro Shimizu |
890ddd |
if (!p)
|
|
Toshihiro Shimizu |
890ddd |
throw TException("invalid source for copy");
|
|
Toshihiro Shimizu |
890ddd |
TEnumParam::setName(src->getName());
|
|
Toshihiro Shimizu |
890ddd |
m_imp->copy(p->m_imp);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TEnumParam::~TEnumParam()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
delete m_imp;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TEnumParam::TEnumParam(const TEnumParam &src)
|
|
Toshihiro Shimizu |
890ddd |
: TNotAnimatableParam<int>(src), m_imp(new TEnumParamImp(*src.m_imp))</int>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TEnumParam::TEnumParam()
|
|
Toshihiro Shimizu |
890ddd |
: TNotAnimatableParam<int>(), m_imp(new TEnumParamImp())</int>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TEnumParam::setValue(int v, bool undoing)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bool valid = false;
|
|
Toshihiro Shimizu |
890ddd |
std::vector<pair<int, string="">>::iterator it = m_imp->m_items.begin();</pair<int,>
|
|
Toshihiro Shimizu |
890ddd |
for (; it != m_imp->m_items.end(); ++it) {
|
|
Toshihiro Shimizu |
890ddd |
if (it->first == v) {
|
|
Toshihiro Shimizu |
890ddd |
valid = true;
|
|
Toshihiro Shimizu |
890ddd |
break;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (!valid)
|
|
Toshihiro Shimizu |
890ddd |
throw TException("out of range parameter value");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TNotAnimatableParam<int>::setValue(v, undoing);</int>
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TEnumParam::setValue(const string &caption, bool undoing)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bool valid = false;
|
|
Toshihiro Shimizu |
890ddd |
int v = 0;
|
|
Toshihiro Shimizu |
890ddd |
std::vector<pair<int, string="">>::iterator it = m_imp->m_items.begin();</pair<int,>
|
|
Toshihiro Shimizu |
890ddd |
for (; it != m_imp->m_items.end(); ++it) {
|
|
Toshihiro Shimizu |
890ddd |
if (it->second == caption) {
|
|
Toshihiro Shimizu |
890ddd |
v = it->first;
|
|
Toshihiro Shimizu |
890ddd |
valid = true;
|
|
Toshihiro Shimizu |
890ddd |
break;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (!valid)
|
|
Toshihiro Shimizu |
890ddd |
throw TException("out of range parameter value");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TNotAnimatableParam<int>::setValue(v, undoing);</int>
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TEnumParam::addItem(const int &item, const string &caption)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_imp->m_items.push_back(std::make_pair(item, caption));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int TEnumParam::getItemCount() const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_imp->m_items.size();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TEnumParam::getItem(int i, int &item, string &caption) const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
assert(i >= 0 && i < m_imp->m_items.size());
|
|
Toshihiro Shimizu |
890ddd |
item = m_imp->m_items[i].first;
|
|
Toshihiro Shimizu |
890ddd |
caption = m_imp->m_items[i].second;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TEnumParam::loadData(TIStream &is)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int value;
|
|
Toshihiro Shimizu |
890ddd |
is >> value;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
try {
|
|
Toshihiro Shimizu |
890ddd |
setValue(value, false);
|
|
Toshihiro Shimizu |
890ddd |
} catch (TException &) {
|
|
Toshihiro Shimizu |
890ddd |
TNotAnimatableParam<int>::reset();</int>
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TEnumParam::saveData(TOStream &os)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
os << TNotAnimatableParam<int>::getValue();</int>
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TIntParam::setValueRange(int min, int max)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
assert(min < max);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
minValue = min;
|
|
Toshihiro Shimizu |
890ddd |
maxValue = max;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool TIntParam::getValueRange(int &min, int &max) const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
min = minValue;
|
|
Toshihiro Shimizu |
890ddd |
max = maxValue;
|
|
Toshihiro Shimizu |
890ddd |
return min < max;
|
|
Toshihiro Shimizu |
890ddd |
}
|