Brief description of class still missing. More...
#include <ExpressionContext.h>
Public Member Functions | |
void | addVariable (const QString &name, const QVariant &val) |
void | addVariable (const QString &name, const QString &index, const QVariant &val) |
int | addVariable (const QString &name, ExpressionStorage *var) |
ExpressionContext (ExpressionContext *parent=0) | |
virtual QStringList | functions () const |
virtual QVariant | functionValue (const QString &name, const QVector< ExpressionAction * > &args) const |
virtual bool | isValidFunction (const QString &name) const |
bool | isValidVariable (const QString &name) const |
ExpressionStorage * | variable (int varIndex) const |
QStringList | variables () const |
QVariant | variableValue (const QString &name, const QString &index=QString::null) const |
virtual | ~ExpressionContext () |
Brief description of class still missing.
Full description of class still missing
QGpCoreTools::ExpressionContext::ExpressionContext | ( | ExpressionContext * | parent = 0 | ) | [inline] |
{_parent=parent;}
QGpCoreTools::ExpressionContext::~ExpressionContext | ( | ) | [virtual] |
void QGpCoreTools::ExpressionContext::addVariable | ( | const QString & | name, |
const QVariant & | val | ||
) | [inline] |
References addVariable().
Referenced by addVariable(), DinverCore::ParamSpaceScript::apply(), QGpCoreTools::ExpressionVariable::ExpressionVariable(), ModelSlider::modify(), ModelSliderEditor::setModelType(), and GeopsyCore::SignalExpressionContext::SignalExpressionContext().
{addVariable(name, "0", val);}
void QGpCoreTools::ExpressionContext::addVariable | ( | const QString & | name, |
const QString & | index, | ||
const QVariant & | val | ||
) |
References TRACE, and variable().
{ TRACE; QMap<QString, int>::iterator it; it=_varNames.find (name); if(it!=_varNames.end()) { variable(it.value())->setValue(index, val); } else { int varIndex=_varValues.count(); _varNames.insert(name, varIndex); _varValues.append(new ExpressionVariableStorage); _varValues[varIndex]->setValue(index, val); } }
int QGpCoreTools::ExpressionContext::addVariable | ( | const QString & | name, |
ExpressionStorage * | var | ||
) |
Add a new variable if variable named name does not exist. In all cases, it returns the index of the variable
References TRACE.
{ TRACE; int index; QMap<QString, int>::iterator it; it=_varNames.find (name); if(it==_varNames.end()) { index=_varValues.count(); _varNames.insert(name, index); _varValues.append(var); } else { index=it.value(); delete var; } return index; }
QStringList QGpCoreTools::ExpressionContext::functions | ( | ) | const [virtual] |
Reimplemented in DinverCore::ParamExpressionContext.
References TRACE.
Referenced by QGpGuiTools::ExpressionEditor::setContext().
{ TRACE; QStringList l; l << "if( <condition>, <true>, <false> )" << "justify( <string>, <nChars>, <fillChar> )" << "left( <string>, <nChars> )" << "length( <string> )" << "mid( <string>, <pos>, <length> )" << "right( <string>, <nChars> )" << "sqrt( <value> )" << "pow( <base>, <exp> )" << "log10( <value> )" << "cos( <value> )" << "sin( <value> )" << "tan( <value> )"; return l; }
QVariant QGpCoreTools::ExpressionContext::functionValue | ( | const QString & | name, |
const QVector< ExpressionAction * > & | args | ||
) | const [virtual] |
Reimplemented in DinverCore::ParamExpressionContext.
References QGpCoreTools::cos(), QGpCoreTools::sin(), QGpCoreTools::sqrt(), QGpCoreTools::tan(), and TRACE.
{ TRACE; switch(name[0].unicode()) { case 'c': if(name=="cos") { if(args.count()==1) { return ::cos(args.at(0)->value().toDouble()); } } break; case 'i': if(name=="if") { if(args.count()==3) { if(args.at(0)->value().toBool()) { return args.at(1)->value(); } else { return args.at(2)->value(); } } else if(args.count()==2) { if(args.at(0)->value().toBool()) { return args.at(1)->value(); } } } break; case 'j': if(name=="justify") { if(args.count()==3) { QString s=args.at(2)->value().toString(); QChar c; if(s.isEmpty()) c=' '; else c=s[0]; return args.at(0)->value().toString().rightJustified(args.at(1)->value().toInt(),c); } } break; case 'l': if(name=="left") { if(args.count()==2) { return args.at(0)->value().toString().left(args.at(1)->value().toInt()); } } else if(name=="length") { if(args.count()==1) { return args.at(0)->value().toString().length(); } } else if(name=="log10") { if(args.count()==1) { return log10(args.at(0)->value().toDouble()); } } break; case 'm': if(name=="mid") { if(args.count()==3) { return args.at(0)->value().toString().mid(args.at(1)->value().toInt(), args.at(2)->value().toInt()); } } break; case 'p': if(name=="pow") { if(args.count()==2) { return pow(args.at(0)->value().toDouble(), args.at(1)->value().toDouble()); } } break; case 'r': if(name=="right") { if(args.count()==2) { return args.at(0)->value().toString().right(args.at(1)->value().toInt()); } } break; case 's': if(name=="sqrt") { if(args.count()==1) { return ::sqrt(args.at(0)->value().toDouble()); } } else if(name=="sin") { if(args.count()==1) { return ::sin(args.at(0)->value().toDouble()); } } break; case 't': if(name=="tan") { if(args.count()==1) { return ::tan(args.at(0)->value().toDouble()); } } break; default: break; } return QVariant(); }
bool QGpCoreTools::ExpressionContext::isValidFunction | ( | const QString & | name | ) | const [virtual] |
Reimplemented in DinverCore::ParamExpressionContext.
References TRACE.
{ TRACE; switch(name[0].unicode()) { case 'c': if(name=="cos") return true; break; case 'i': if(name=="if") return true; break; case 'j': if(name=="justify") return true; break; case 'l': if(name=="left") return true; else if(name=="length") return true; else if(name=="log10") return true; break; case 'm': if(name=="mid") return true; break; case 'p': if(name=="pow") return true; break; case 'r': if(name=="right") return true; break; case 's': if(name=="sqrt") return true; else if(name=="sin") return true; break; case 't': if(name=="tan") return true; break; default: break; } return false; }
bool QGpCoreTools::ExpressionContext::isValidVariable | ( | const QString & | name | ) | const |
References isValidVariable(), and TRACE.
Referenced by isValidVariable().
{ TRACE; bool c=_varNames.contains(name); if(!c && _parent) return _parent->isValidVariable(name); else return c; }
ExpressionStorage* QGpCoreTools::ExpressionContext::variable | ( | int | varIndex | ) | const [inline] |
Referenced by addVariable(), QGpCoreTools::ExpressionVariable::isReadOnly(), QGpCoreTools::ExpressionVariable::setValue(), and QGpCoreTools::ExpressionVariable::value().
{return _varValues[varIndex];}
QStringList QGpCoreTools::ExpressionContext::variables | ( | ) | const |
Referenced by QGpGuiTools::ExpressionEditor::setContext().
{ QStringList v; for(QMap<QString, int>::const_iterator it=_varNames.begin();it!=_varNames.end();it++) { v.append(it.key()); } return v; }
QVariant QGpCoreTools::ExpressionContext::variableValue | ( | const QString & | name, |
const QString & | index = QString::null |
||
) | const |
References TRACE, and variableValue().
Referenced by QGpCoreTools::ExpressionString::value(), and variableValue().
{ TRACE; QMap<QString, int>::const_iterator it; it=_varNames.find (name); if(it!=_varNames.end()) { return _varValues[it.value()]->value(index); } else if(_parent) { return _parent->variableValue(name, index); } else { return QVariant(); } }