]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Merge branch 'Dev_1.1.0' of newgeom:newgeom into Dev_1.1.0
authorvsv <vitaly.smetannikov@opencascade.com>
Thu, 26 Mar 2015 08:44:26 +0000 (11:44 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Thu, 26 Mar 2015 08:44:26 +0000 (11:44 +0300)
src/Model/Model_AttributeSelection.cpp
src/ModelAPI/ModelAPI_Attribute.cpp
src/ModelAPI/ModelAPI_Attribute.h
src/ModuleBase/ModuleBase_WidgetValidated.cpp
src/SketchPlugin/CMakeLists.txt
src/SketchPlugin/SketchPlugin_ExternalValidator.cpp [new file with mode: 0644]
src/SketchPlugin/SketchPlugin_ExternalValidator.h [new file with mode: 0644]
src/SketchPlugin/SketchPlugin_Plugin.cpp
src/SketchPlugin/SketchPlugin_ShapeValidator.cpp [deleted file]
src/SketchPlugin/SketchPlugin_ShapeValidator.h [deleted file]
src/SketchPlugin/plugin-Sketch.xml

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;
 }
 
index 22ce7d27eda3dce82e05a8039a73bad2c22198c1..e94f680c15c1921d582fabd8c854adbb23486452 100644 (file)
@@ -28,7 +28,7 @@ SET(PROJECT_HEADERS
     SketchPlugin_ConstraintTangent.h
     SketchPlugin_ConstraintMirror.h
     SketchPlugin_ConstraintFillet.h
-    SketchPlugin_ShapeValidator.h
+    SketchPlugin_ExternalValidator.h
     SketchPlugin_Validators.h
 )
 
@@ -55,7 +55,7 @@ SET(PROJECT_SOURCES
     SketchPlugin_ConstraintTangent.cpp
     SketchPlugin_ConstraintMirror.cpp
     SketchPlugin_ConstraintFillet.cpp
-    SketchPlugin_ShapeValidator.cpp
+    SketchPlugin_ExternalValidator.cpp
     SketchPlugin_Validators.cpp
 )
 
diff --git a/src/SketchPlugin/SketchPlugin_ExternalValidator.cpp b/src/SketchPlugin/SketchPlugin_ExternalValidator.cpp
new file mode 100644 (file)
index 0000000..7b85871
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
+
+// File:        Model_ResultValidators.cpp
+// Created:     27 Feb 2015
+// Author:      Natalia ERMOLAEVA
+
+#include "SketchPlugin_ExternalValidator.h"
+#include "SketchPlugin_Feature.h"
+
+#include <ModelAPI_Session.h>
+#include <ModelAPI_Result.h>
+#include <ModelAPI_Tools.h>
+#include <ModelAPI_AttributeRefAttr.h>
+
+bool SketchPlugin_ExternalValidator::isValid(const AttributePtr& theAttribute,
+                                          const std::list<std::string>& theArguments) const
+{
+  if (theArguments.size() != 1)
+    return true;
+
+  // ask whether the feature of the attribute is external
+  bool isAttributeExternal = isExternalAttribute(theAttribute);
+
+  // ask whether the feature of the attribute by parameter identifier is external
+  std::string aFrontArgument = theArguments.front();
+  FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
+  bool isParameterExternal = isExternalAttribute(aFeature->attribute(aFrontArgument));
+
+  // it is not possible that both features, attribute and attribute in parameter, are external
+  if (isAttributeExternal && isParameterExternal)
+    return false;
+  return true;
+}
+
+bool SketchPlugin_ExternalValidator::isExternalAttribute(const AttributePtr& theAttribute) const
+{
+  bool isExternal = false;
+  AttributeRefAttrPtr anAttribute = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
+
+  if (anAttribute.get() != NULL) {
+    FeaturePtr anArgumentFeature = ModelAPI_Feature::feature(anAttribute->object());
+    if (anArgumentFeature.get() != NULL) {
+      std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
+                                    std::dynamic_pointer_cast<SketchPlugin_Feature>(anArgumentFeature);
+      if (aSketchFeature.get() != NULL) {
+        isExternal = aSketchFeature->isExternal();
+      }
+    }
+  }
+  return isExternal;
+}
diff --git a/src/SketchPlugin/SketchPlugin_ExternalValidator.h b/src/SketchPlugin/SketchPlugin_ExternalValidator.h
new file mode 100644 (file)
index 0000000..62d95bf
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
+
+// File:        Model_ResultValidators.h
+// Created:     27 Feb 2015
+// Author:      Natalia ERMOLAEVA
+
+#ifndef SketchPlugin_ExternalValidator_H
+#define SketchPlugin_ExternalValidator_H
+
+#include <SketchPlugin.h>
+#include <ModelAPI_AttributeValidator.h>
+
+/**\class SketchPlugin_ResultPointValidator
+ * \ingroup Validators
+ * \brief Validator for the points selection
+ *
+ * Allows to select points only.
+ */
+class SketchPlugin_ExternalValidator : public ModelAPI_AttributeValidator
+{
+public:
+  /// returns true if the feature of attribute do not contain external features in the given attribute and
+  /// among attributes listed in the arguments
+  /// \param theAttribute an attribute to check
+  /// \param theArguments a filter parameters
+  SKETCHPLUGIN_EXPORT virtual bool isValid(const AttributePtr& theAttribute,
+                                           const std::list<std::string>& theArguments) const;
+
+protected:
+  /// returns true if the feature of the attribute is external
+  /// \param theAttribute an attribute to check
+  bool isExternalAttribute(const AttributePtr& theAttribute) const;
+};
+
+#endif
index 04347759e5655848a0831c73ab5977e2abbc211d..68302fee1541fe700c648e15a9875c25297a213c 100644 (file)
@@ -20,7 +20,7 @@
 #include <SketchPlugin_ConstraintTangent.h>
 #include <SketchPlugin_ConstraintVertical.h>
 #include <SketchPlugin_Validators.h>
-#include <SketchPlugin_ShapeValidator.h>
+#include <SketchPlugin_ExternalValidator.h>
 
 #include <Events_Loop.h>
 #include <GeomDataAPI_Dir.h>
@@ -51,15 +51,12 @@ SketchPlugin_Plugin::SketchPlugin_Plugin()
   ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
   aFactory->registerValidator("SketchPlugin_DistanceAttr",
                               new SketchPlugin_DistanceAttrValidator);  
-  //aFactory->registerValidator("SketchPlugin_DifferentObjects",
-  //                            new SketchPlugin_DifferentObjectsValidator);
-
-  aFactory->registerValidator("SketchPlugin_ShapeValidator",
-                              new SketchPlugin_ShapeValidator);
+  aFactory->registerValidator("SketchPlugin_ExternalValidator",
+                              new SketchPlugin_ExternalValidator);
 
   // register this plugin
   ModelAPI_Session::get()->registerPlugin(this);
-
+  
   Config_PropManager::registerProp("Visualization", "sketch_entity_color", "Sketch enity color",
                                    Config_Prop::Color, SKETCH_ENTITY_COLOR);
 
diff --git a/src/SketchPlugin/SketchPlugin_ShapeValidator.cpp b/src/SketchPlugin/SketchPlugin_ShapeValidator.cpp
deleted file mode 100644 (file)
index 0722ce1..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
-
-// File:        Model_ResultValidators.cpp
-// Created:     27 Feb 2015
-// Author:      Natalia ERMOLAEVA
-
-#include "SketchPlugin_ShapeValidator.h"
-#include "SketchPlugin_Feature.h"
-
-#include <ModelAPI_Session.h>
-#include <ModelAPI_Result.h>
-#include <ModelAPI_Tools.h>
-#include <ModelAPI_AttributeRefAttr.h>
-
-bool SketchPlugin_ShapeValidator::isValid(const AttributePtr& theAttribute,
-                                          const std::list<std::string>& theArguments) const
-{
-  if (theArguments.size() != 1)
-    return true;
-
-  // ask whether the feature of the attribute is external
-  bool isAttributeExternal = isExternalAttribute(theAttribute);
-
-  // ask whether the feature of the attribute by parameter identifier is external
-  std::string aFrontArgument = theArguments.front();
-  FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
-  bool isParameterExternal = isExternalAttribute(aFeature->attribute(aFrontArgument));
-
-  // it is not possible that both features, attribute and attribute in parameter, are external
-  if (isAttributeExternal && isParameterExternal)
-    return false;
-  return true;
-}
-
-bool SketchPlugin_ShapeValidator::isExternalAttribute(const AttributePtr& theAttribute) const
-{
-  bool isExternal = false;
-  AttributeRefAttrPtr anAttribute = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
-
-  if (anAttribute.get() != NULL) {
-    FeaturePtr anArgumentFeature = ModelAPI_Feature::feature(anAttribute->object());
-    if (anArgumentFeature.get() != NULL) {
-      std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
-                                    std::dynamic_pointer_cast<SketchPlugin_Feature>(anArgumentFeature);
-      if (aSketchFeature.get() != NULL) {
-        isExternal = aSketchFeature->isExternal();
-      }
-    }
-  }
-  return isExternal;
-}
diff --git a/src/SketchPlugin/SketchPlugin_ShapeValidator.h b/src/SketchPlugin/SketchPlugin_ShapeValidator.h
deleted file mode 100644 (file)
index d07581e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
-
-// File:        Model_ResultValidators.h
-// Created:     27 Feb 2015
-// Author:      Natalia ERMOLAEVA
-
-#ifndef SketchPlugin_ShapeValidator_H
-#define SketchPlugin_ShapeValidator_H
-
-#include <SketchPlugin.h>
-#include <ModelAPI_AttributeValidator.h>
-
-/**\class SketchPlugin_ResultPointValidator
- * \ingroup Validators
- * \brief Validator for the points selection
- *
- * Allows to select points only.
- */
-class SketchPlugin_ShapeValidator : public ModelAPI_AttributeValidator
-{
-public:
-  /// returns true if the feature of attribute do not contain external features in the given attribute and
-  /// among attributes listed in the arguments
-  /// \param theAttribute an attribute to check
-  /// \param theArguments a filter parameters
-  SKETCHPLUGIN_EXPORT virtual bool isValid(const AttributePtr& theAttribute,
-                                           const std::list<std::string>& theArguments) const;
-
-protected:
-  /// returns true if the feature of the attribute is external
-  /// \param theAttribute an attribute to check
-  bool isExternalAttribute(const AttributePtr& theAttribute) const;
-};
-
-#endif
index 0f62a2932ddebc219dfe967efb3cdb5f73f08522..2d5e884e13d42fa2e435d946bbce8532dcc36c98 100644 (file)
@@ -52,7 +52,7 @@
               label="First object"
               tooltip="Select point, line end point, line, center of circle or arc."
               shape_types="edge vertex">
-          <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityB"/>
+          <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityB"/>
           <validator id="GeomValidators_EdgeOrVertex"/>
         </sketch_shape_selector>/>
         <sketch_shape_selector 
@@ -62,7 +62,7 @@
                 shape_types="edge vertex">
           <validator id="PartSet_DifferentObjects"/>
           <validator id="SketchPlugin_DistanceAttr" parameters="ConstraintEntityA"/>
-          <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityA"/>
+          <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
           <validator id="GeomValidators_EdgeOrVertex"/>
         </sketch_shape_selector>
         
         <sketch_constraint_shape_selector id="ConstraintEntityA" 
             label="First line" tooltip="Select a line" shape_types="edge">
             <validator id="GeomValidators_Edge" parameters="line"/>
-            <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityB"/>
+            <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityB"/>
         </sketch_constraint_shape_selector>
         
         <sketch_constraint_shape_selector id="ConstraintEntityB" label="Last line" tooltip="Select a line" 
             shape_types="edge">
             <validator id="GeomValidators_Edge" parameters="line"/>
             <validator id="PartSet_DifferentObjects"/>
-            <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityA"/>
+            <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
         </sketch_constraint_shape_selector>
         
         <validator id="PartSet_ParallelValidator"/>
         <sketch_constraint_shape_selector id="ConstraintEntityA" 
             label="First line" tooltip="Select an line" 
             shape_types="edge">
-          <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityB"/>
+          <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityB"/>
             <validator id="GeomValidators_Edge" parameters="line"/>
         </sketch_constraint_shape_selector>
         
             label="Last line" tooltip="Select an line" 
             shape_types="edge">
             <validator id="PartSet_DifferentObjects"/>
-          <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityA"/>
+          <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
             <validator id="GeomValidators_Edge" parameters="line"/>
         </sketch_constraint_shape_selector>
         <validator id="PartSet_PerpendicularValidator"/>