+
+///////////////// Model_ExpressionDouble /////////////
+Model_ExpressionDouble::Model_ExpressionDouble(TDF_Label& theLabel)
+ : Model_Expression(theLabel)
+{
+ myLab = theLabel;
+ reinit();
+}
+
+void Model_ExpressionDouble::reinit()
+{
+ if (!myLab.FindAttribute(TDataStd_Real::GetID(), myReal)) {
+ myIsInitialized = false;
+ } else {
+ myIsInitialized = true;
+ }
+}
+
+void Model_ExpressionDouble::setValue(const double theValue)
+{
+ if (!myIsInitialized || myReal.IsNull()) {
+ myReal = TDataStd_Real::Set(myText->Label(), theValue);
+ myIsInitialized = true;
+ } else if (value() != theValue) {
+ myReal->Set(theValue);
+ }
+}
+
+double Model_ExpressionDouble::value()
+{
+ if (myIsInitialized)
+ return myReal->Get();
+ return std::numeric_limits<double>::max(); // error
+}
+
+void Model_ExpressionDouble::setInvalid(const bool theFlag)
+{
+ if (theFlag) {
+ TDataStd_UAttribute::Set(myText->Label(), kInvalidGUID);
+ } else {
+ myText->Label().ForgetAttribute(kInvalidGUID);
+ }
+}
+
+bool Model_ExpressionDouble::isInvalid()
+{
+ return myText->Label().IsAttribute(kInvalidGUID) == Standard_True;
+}
+
+///////////////// Model_ExpressionInteger /////////////
+Model_ExpressionInteger::Model_ExpressionInteger(TDF_Label& theLabel)
+ : Model_Expression(theLabel)
+{
+ myLab = theLabel;
+ reinit();
+}
+
+void Model_ExpressionInteger::reinit()
+{
+ if (!myLab.FindAttribute(TDataStd_Integer::GetID(), myInteger)) {
+ myIsInitialized = false;
+ } else {
+ myIsInitialized = true;
+ }
+}
+
+void Model_ExpressionInteger::setValue(const int theValue)
+{
+ if (!myIsInitialized || myInteger.IsNull()) {
+ myInteger = TDataStd_Integer::Set(myText->Label(), theValue);
+ myIsInitialized = true;
+ } else if (value() != theValue) {
+ myInteger->Set(theValue);
+ }
+}
+
+int Model_ExpressionInteger::value()
+{
+ if (myIsInitialized)
+ return myInteger->Get();
+ return std::numeric_limits<int>::max(); // error
+}
+
+void Model_ExpressionInteger::setInvalid(const bool theFlag)
+{
+ if (theFlag) {
+ TDataStd_UAttribute::Set(myText->Label(), kInvalidGUID);
+ } else {
+ myText->Label().ForgetAttribute(kInvalidGUID);
+ }
+}
+
+bool Model_ExpressionInteger::isInvalid()
+{
+ return myText->Label().IsAttribute(kInvalidGUID) == Standard_True;
+}