]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
1. Parameter should update other parameters immediately after value/expression change
authorasl <asl@opencascade.com>
Mon, 7 Dec 2009 11:20:45 +0000 (11:20 +0000)
committerasl <asl@opencascade.com>
Mon, 7 Dec 2009 11:20:45 +0000 (11:20 +0000)
2. If expression is invalid, the previous state of parameter should be restored

src/Notebook/SALOME_Parameter.cxx
src/Notebook/SALOME_Parameter.hxx

index c62b7970093803e96e201156ab5aaaa669417241..8fc4ca6aa95a3a3bf98ebe899800ca58abdf0a5e 100644 (file)
@@ -122,6 +122,12 @@ void SALOME_Parameter::Update( SALOME::Notebook_ptr /*theNotebook*/ )
   }
 }
 
+void SALOME_Parameter::Update()
+{
+  myNotebook->SetToUpdate( _this() );
+  myNotebook->Update();
+}
+
 void SALOME_Parameter::SetExpression( const char* theExpr )
 {
   if( myIsAnonymous )
@@ -130,8 +136,7 @@ void SALOME_Parameter::SetExpression( const char* theExpr )
   else
   {
     InternalSetExpression( theExpr );
-    myIsCalculable = true;
-    myNotebook->SetToUpdate( _this() );
+    Update();
   }
 }
 
@@ -144,7 +149,7 @@ void SALOME_Parameter::SetBoolean( CORBA::Boolean theValue )
   {
     myResult = theValue;
     myIsCalculable = false;
-    myNotebook->SetToUpdate( _this() );
+    Update();
   }
 }
 
@@ -157,7 +162,7 @@ void SALOME_Parameter::SetInteger( CORBA::Long theValue )
   {
     myResult = (int)theValue;
     myIsCalculable = false;
-    myNotebook->SetToUpdate( _this() );
+    Update();
   }
 }
 
@@ -170,7 +175,7 @@ void SALOME_Parameter::SetReal( CORBA::Double theValue )
   {
     myResult = theValue;
     myIsCalculable = false;
-    myNotebook->SetToUpdate( _this() );
+    Update();
   }
 }
 
@@ -183,7 +188,7 @@ void SALOME_Parameter::SetString( const char* theValue )
   {
     myResult = theValue;
     myIsCalculable = false;
-    myNotebook->SetToUpdate( _this() );
+    Update();
   }
 }
 
@@ -371,12 +376,27 @@ void SALOME_Parameter::ThrowTypeError( const std::string& theMsg )
 
 void SALOME_Parameter::InternalSetExpression( const std::string& theExpr )
 {
-  myExpr.setExpression( theExpr );
-  AnalyzeError();
+  std::string anOldExpr = myExpr.expression();
+  bool anOldCalc = myIsCalculable;
+  try
+  {
+    myExpr.setExpression( theExpr );
+    myIsCalculable = true;
+    AnalyzeError();
+  }
+  catch( SALOME::ExpressionError anError )
+  {
+    myExpr.setExpression( anOldExpr );
+    myIsCalculable = anOldCalc;
+    throw anError;
+  }
 }
 
 void SALOME_Parameter::AnalyzeError()
 {
+  if( !myIsCalculable )
+    return;
+
   std::string aMsg;
   SALOME_EvalExprError anError = myExpr.parser()->error();
   bool isCalcError = true;
index 71165b6a322d7b2ac690433e7dc5848e84d8d7e1..e1380123ec3fcb615b6ed2362a7f0c791a3075fa 100644 (file)
@@ -89,6 +89,7 @@ private:
   void InternalSetExpression( const std::string& theExpr );
   void AnalyzeError();
   void SetId();
+  void Update();
 
 private:
   SALOME_Notebook* myNotebook;