@@ -33,7 +33,7 @@ std::string Quantity::getDisplayValueString() { | |||||
void Quantity::setDisplayValueString(std::string s) { | void Quantity::setDisplayValueString(std::string s) { | ||||
static const double inf = INFINITY; | static const double inf = INFINITY; | ||||
static te_variable vars[] = { | static te_variable vars[] = { | ||||
{"inf", &inf}, | |||||
{"inf", &inf, TE_VARIABLE, NULL}, | |||||
}; | }; | ||||
te_expr* expr = te_compile(s.c_str(), vars, LENGTHOF(vars), NULL); | te_expr* expr = te_compile(s.c_str(), vars, LENGTHOF(vars), NULL); | ||||
if (!expr) | if (!expr) | ||||
@@ -41,6 +41,9 @@ void Quantity::setDisplayValueString(std::string s) { | |||||
double result = te_eval(expr); | double result = te_eval(expr); | ||||
te_free(expr); | te_free(expr); | ||||
if (std::isnan(result)) | |||||
return; | |||||
setDisplayValue(result); | setDisplayValue(result); | ||||
} | } | ||||
@@ -80,11 +80,17 @@ float ParamQuantity::getDisplayValue() { | |||||
void ParamQuantity::setDisplayValue(float displayValue) { | void ParamQuantity::setDisplayValue(float displayValue) { | ||||
if (!module) | if (!module) | ||||
return; | return; | ||||
// Handle displayOffset | |||||
float v = displayValue - displayOffset; | float v = displayValue - displayOffset; | ||||
// Handle displayMultiplier | |||||
if (displayMultiplier == 0.f) | if (displayMultiplier == 0.f) | ||||
v = 0.f; | v = 0.f; | ||||
else | else | ||||
v /= displayMultiplier; | v /= displayMultiplier; | ||||
// Handle displayBase | |||||
if (displayBase == 0.f) { | if (displayBase == 0.f) { | ||||
// Linear | // Linear | ||||
// v is unchanged | // v is unchanged | ||||
@@ -97,6 +103,10 @@ void ParamQuantity::setDisplayValue(float displayValue) { | |||||
// Exponential | // Exponential | ||||
v = std::log(v) / std::log(displayBase); | v = std::log(v) / std::log(displayBase); | ||||
} | } | ||||
if (std::isnan(v)) | |||||
return; | |||||
setValue(v); | setValue(v); | ||||
} | } | ||||