diff options
author | mrwastl <mrwastl@users.sourceforge.net> | 2011-10-03 01:04:48 +0200 |
---|---|---|
committer | mrwastl <mrwastl@users.sourceforge.net> | 2011-10-03 01:04:48 +0200 |
commit | 5696489a786224631c3ded48f810164ee2c9ff25 (patch) | |
tree | 0991a85e509b244a8b6cca32b73dcca72a511a52 /glcdskin | |
parent | d82aaf34feead02bab70b12c7c8c2effb1187862 (diff) | |
download | graphlcd-base-5696489a786224631c3ded48f810164ee2c9ff25.tar.gz graphlcd-base-5696489a786224631c3ded48f810164ee2c9ff25.tar.bz2 |
functions (cSkinFunction) now evaluate parameters with variables and/or tokens too
Diffstat (limited to 'glcdskin')
-rw-r--r-- | glcdskin/function.c | 17 | ||||
-rw-r--r-- | glcdskin/type.h | 4 |
2 files changed, 19 insertions, 2 deletions
diff --git a/glcdskin/function.c b/glcdskin/function.c index c6089bc..6d96c57 100644 --- a/glcdskin/function.c +++ b/glcdskin/function.c @@ -360,8 +360,21 @@ cType cSkinFunction::Evaluate(void) const case variable: { cSkinVariable * variable = mSkin->GetVariable(mVariableId); - if (variable) - return variable->Value(); + if (variable) { + cType rv = variable->Value(); + if (rv.IsString()) { + std::string val = rv; + if (val.find("{") != std::string::npos || val.find("#") != std::string::npos) { + cSkinString *result = new cSkinString(mObject, false); + if (result->Parse(val)) { + val = (std::string) result->Evaluate(); + rv = cType(val); + } + delete result; + } + } + return rv; + } return false; } diff --git a/glcdskin/type.h b/glcdskin/type.h index ad02a15..4d54de8 100644 --- a/glcdskin/type.h +++ b/glcdskin/type.h @@ -54,6 +54,10 @@ public: void SetUpdate(uint32_t UpdateIn) { mUpdateIn = UpdateIn; } uint32_t UpdateIn(void) const { return mUpdateIn; } + bool IsString(void) const { return (mType == string); } + bool IsNumber(void) const { return (mType == number); } + bool IsBoolean(void) const { return (mType == boolean); } + operator std::string () const { return String(); } operator int () const { return Number(); } operator bool () const; |