]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Correctly manage the invalid expressions
authormpv <mpv@opencascade.com>
Mon, 25 May 2015 09:09:12 +0000 (12:09 +0300)
committermpv <mpv@opencascade.com>
Mon, 25 May 2015 09:09:12 +0000 (12:09 +0300)
src/Model/Model_AttributeDouble.cpp
src/Model/Model_AttributeDouble.h
src/Model/Model_Document.cpp
src/Model/Model_Update.cpp
src/ModelAPI/ModelAPI_AttributeDouble.h
src/ParametersPlugin/ParametersPlugin_EvalListener.cpp

index 29ca7be4e70d4b9bfcc6dae4a98dd792b91be369..c65748dee83f50d4273fd6ccab3b29a8b199487e 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <TCollection_AsciiString.hxx>
 #include <TCollection_ExtendedString.hxx>
+#include <TDataStd_UAttribute.hxx>
 
 using namespace std;
 
@@ -52,3 +53,19 @@ string Model_AttributeDouble::text()
 {
   return TCollection_AsciiString(myText->Get()).ToCString();
 }
+
+Standard_GUID kInvalidGUID("caee5ce4-34b1-4b29-abcb-685287d18096");
+
+void Model_AttributeDouble::setExpressionInvalid(const bool theFlag)
+{
+  if (theFlag) {
+    TDataStd_UAttribute::Set(myReal->Label(), kInvalidGUID);
+  } else {
+    myReal->Label().ForgetAttribute(kInvalidGUID);
+  }
+}
+
+bool Model_AttributeDouble::expressionInvalid()
+{
+  return myReal->Label().IsAttribute(kInvalidGUID);
+}
index 951c99613ad1f0640acd05890c1c9607dc3841a6..6c999936593e4b8a37586e3fd0604ef3da1fafc4 100644 (file)
@@ -36,6 +36,12 @@ class Model_AttributeDouble : public ModelAPI_AttributeDouble
   /// Returns the double value
   MODEL_EXPORT virtual std::string text();
 
+  /// Allows to set expression (text) as invalid (by the parameters listener)
+  MODEL_EXPORT virtual void setExpressionInvalid(const bool theFlag);
+
+  /// Returns true if text is invalid
+  MODEL_EXPORT virtual bool expressionInvalid();
+
  protected:
   /// Initializes attibutes
   Model_AttributeDouble(TDF_Label& theLabel);
index 90e577c05d2ef0c610b97dd4c72799dc2b601c1d..5b379c982e630352273c9db64b561f2721dbdf48 100644 (file)
@@ -703,7 +703,9 @@ void Model_Document::setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurr
     if (anIter == theCurrent) aPassed = true;
 
     bool aDisabledFlag = !aPassed;
-    if (aMain.get() && aMain->isSub(anIter))
+    if (aMain.get() && aMain->isSub(anIter)) // sub-elements of not-disabled feature are not disabled
+      aDisabledFlag = false;
+    if (anIter->getKind() == "Parameter") // parameters are always out of the history
       aDisabledFlag = false;
     if (anIter->setDisabled(aDisabledFlag)) {
       // state of feature is changed => so feature become updated
index 8eae85c9308a51cfbe38bdd10527573f685482e8..be69043e92c72ee0c7b9910ebbbfe954a4d86b1e 100644 (file)
@@ -260,27 +260,17 @@ void Model_Update::updateArguments(FeaturePtr theFeature) {
   ModelAPI_ExecState aState = theFeature->data()->execState();
   if (aState == ModelAPI_StateInvalidArgument) // a chance to be corrected
     aState = ModelAPI_StateMustBeUpdated;
-  // check the parameters: values can be changed
-  /* parameters evaluator now does this
+  // check the parameters state
   std::list<AttributePtr> aDoubles = 
     theFeature->data()->attributes(ModelAPI_AttributeDouble::typeId()); 
   std::list<AttributePtr>::iterator aDoubleIter = aDoubles.begin();
   for(; aDoubleIter != aDoubles.end(); aDoubleIter++) {
     AttributeDoublePtr aDouble = 
       std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(*aDoubleIter);
-    if (aDouble.get() && !aDouble->text().empty()) {
-      double aNewVal;
-      if (ModelAPI_Tools::findVariable(aDouble->text(), aNewVal)) {
-        if (aNewVal != aDouble->value()) {
-          aDouble->setValue(aNewVal);
-          aJustUpdated = true;
-        }
-      } else {
-        aState = ModelAPI_StateInvalidArgument;
-      }
+    if (aDouble.get() && aDouble->expressionInvalid()) {
+      aState = ModelAPI_StateInvalidArgument;
     }
   }
-  */
 
   //if (aState == ModelAPI_StateDone) {// all referenced objects are ready to be used
     //std::cout<<"Execute feature "<<theFeature->getKind()<<std::endl;
index 6ac965232fbf28b6a8c395f13a3068709e9fd42a..d30b11c4942b2631087456b17612be763b0520fe 100644 (file)
@@ -29,6 +29,12 @@ class ModelAPI_AttributeDouble : public ModelAPI_Attribute
   /// Returns the double value
   MODELAPI_EXPORT virtual std::string text() = 0;
 
+  /// Allows to set expression (text) as invalid (by the parameters listener)
+  MODELAPI_EXPORT virtual void setExpressionInvalid(const bool theFlag) = 0;
+
+  /// Returns true if text is invalid
+  MODELAPI_EXPORT virtual bool expressionInvalid() = 0;
+
   /// Returns the type of this class of attributes
   MODELAPI_EXPORT static std::string typeId()
   {
index ff05cd51027ccdcd8c5a95ee0ed2b7cfe392c386..06f2ecfa1397be4b00200e56291a5f3ac58560ca 100644 (file)
@@ -46,6 +46,9 @@ void ParametersPlugin_EvalListener::processEvent(const std::shared_ptr<Events_Me
       double aValue = evaluate(aDoubleAttribute->text(), anError);
       if (anError.empty()) {
         aDoubleAttribute->setValue(aValue);
+        aDoubleAttribute->setExpressionInvalid(false);
+      } else { // set feature as invalid-parameter arguments
+        aDoubleAttribute->setExpressionInvalid(true);
       }
     }
   } else {