]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Union of validator and filter functionalities.
authornds <natalia.donis@opencascade.com>
Thu, 26 Mar 2015 08:10:59 +0000 (11:10 +0300)
committernds <natalia.donis@opencascade.com>
Thu, 26 Mar 2015 08:10:59 +0000 (11:10 +0300)
Block for set initialized in order to compute distance value after isValid checking. isValid functionality changes the attribute content, but the isInitialized flag should not be modified

src/Model/Model_AttributeSelection.cpp
src/ModelAPI/ModelAPI_Attribute.cpp
src/ModelAPI/ModelAPI_Attribute.h
src/ModuleBase/ModuleBase_WidgetValidated.cpp

index 9133794ae94460375cf53c75b966de982345e221..f8be8ab4dfb82ead5673a574c2a6cbac1c208a76 100644 (file)
@@ -117,7 +117,8 @@ void Model_AttributeSelection::setValue(const ResultPtr& theContext,
       selectConstruction(theContext, theSubShape);
     }
   }
-  myIsInitialized = true;
+  //the attribute initialized state should be changed by sendAttributeUpdated only
+  //myIsInitialized = true;
 
   std::string aSelName = namingName();
   if(!aSelName.empty())
index 249353c542248d346501ff94ba5b969318307846..e7553a05da282865ec233007a0e627e3a8b4e446 100644 (file)
@@ -30,7 +30,17 @@ bool ModelAPI_Attribute::isInitialized()
 
 void ModelAPI_Attribute::setInitialized()
 {
-  myIsInitialized = true;
+  if (!mySetInitializedBlocked)
+    myIsInitialized = true;
+}
+
+bool ModelAPI_Attribute::blockSetInitialized(const bool theBlock)
+{
+  bool aBlocked = mySetInitializedBlocked;
+  
+  mySetInitializedBlocked = theBlock;
+
+  return aBlocked;
 }
 
 void ModelAPI_Attribute::setIsArgument(const bool theFlag)
@@ -62,6 +72,7 @@ const std::string& ModelAPI_Attribute::id() const
 
 ModelAPI_Attribute::ModelAPI_Attribute()
 {
+  mySetInitializedBlocked = false;
   myIsInitialized = false;
   myIsArgument = true;
   myIsImmutable = false;
index 179fbae2ff8f9636c80e2ce7289cacd847e3e4a9..1892b77bc8c5687367d091a559fc67a7451450b5 100644 (file)
@@ -25,6 +25,7 @@ class ModelAPI_Attribute
  protected:
   // accessible from the attributes
   bool myIsInitialized; ///< is some value assigned to this attribute
+  bool mySetInitializedBlocked; ///< is initialized blocked
   bool myIsArgument;    ///< is this attribute used as an argument for execution
   bool myIsImmutable;   ///< is this attribute can be changed programmatically (e.g. by constraint)
 
@@ -48,6 +49,11 @@ class ModelAPI_Attribute
   /// Makes attribute initialized
   MODELAPI_EXPORT void setInitialized();
 
+  /// Blocks sending "attribute updated" if theBlock is true
+  /// \param theBlock a block value
+  /// \return the previous block value
+  MODELAPI_EXPORT bool blockSetInitialized(const bool theBlock);
+
   /// Set this attribute is argument for result (change of this attribute requires update of result).
   /// By default it is true.
   MODELAPI_EXPORT void setIsArgument(const bool theFlag);
index 2dd78afc614a4ce83c47426a911bb9c589579986..e7285ab159157d243e0aa4447e99250fd1bc43b6 100644 (file)
@@ -41,7 +41,12 @@ bool ModuleBase_WidgetValidated::setSelection(ModuleBase_ViewerPrs theValue)
 //********************************************************************
 bool ModuleBase_WidgetValidated::isValid(const Handle_SelectMgr_EntityOwner& theOwner)
 {
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = myFeature->attribute(attributeID());
+
   // stores the current values of the widget attribute
+  aData->blockSendAttributeUpdated(true);
+  bool isAttributeBlocked = anAttribute->blockSetInitialized(true);
   storeAttributeValue();
 
   // saves the owner value to the widget attribute
@@ -52,6 +57,8 @@ bool ModuleBase_WidgetValidated::isValid(const Handle_SelectMgr_EntityOwner& the
 
   // restores the current values of the widget attribute
   restoreAttributeValue(aValid);
+  aData->blockSendAttributeUpdated(false);
+  anAttribute->blockSetInitialized(isAttributeBlocked);
 
   return aValid;
 }
@@ -68,9 +75,6 @@ bool ModuleBase_WidgetValidated::isValidAttribute() const
   DataPtr aData = myFeature->data();
   AttributePtr anAttribute = myFeature->attribute(attributeID());
 
-  aData->blockSendAttributeUpdated(true);
-
-    // 3. check the acceptability of the current values
   std::list<ModelAPI_Validator*>::iterator aValidator = aValidators.begin();
   std::list<std::list<std::string> >::iterator aArgs = anArguments.begin();
   bool aValid = true;
@@ -81,8 +85,6 @@ bool ModuleBase_WidgetValidated::isValidAttribute() const
       aValid = aAttrValidator->isValid(anAttribute, *aArgs);
     }
   }
-  aData->blockSendAttributeUpdated(false);
-
   return aValid;
 }