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();
}
}