]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
#1821 Axis by two plains: problem in selection update
authornds <nds@opencascade.com>
Thu, 3 Nov 2016 10:09:45 +0000 (13:09 +0300)
committernds <nds@opencascade.com>
Thu, 3 Nov 2016 10:10:04 +0000 (13:10 +0300)
cash of temporary values should be cleared by widget deactivate

src/Model/Model_AttributeSelection.cpp
src/Model/Model_AttributeSelection.h
src/Model/Model_AttributeSelectionList.cpp
src/Model/Model_AttributeSelectionList.h
src/ModelAPI/ModelAPI_AttributeSelection.h
src/ModelAPI/ModelAPI_AttributeSelectionList.h
src/ModuleBase/ModuleBase_WidgetSelector.cpp

index cf482e2df5b9ba2ea221c7234e61bedd9e7b803e..1ee049900d81bc5beec7d0a2fc127023a527f55b 100644 (file)
@@ -181,6 +181,14 @@ void Model_AttributeSelection::setValue(const ResultPtr& theContext,
   owner()->data()->sendAttributeUpdated(this);
 }
 
+void Model_AttributeSelection::removeTemporaryValues()
+{
+  if (myTmpContext.get() || myTmpSubShape.get()) {
+    myTmpContext.reset();
+    myTmpSubShape.reset();
+  }
+}
+
 std::shared_ptr<GeomAPI_Shape> Model_AttributeSelection::value()
 {
   GeomShapePtr aResult;
index 0d329e6445167b9a97d2c586986cfd9844f5e6ff..720cfa79dc2b00c12086d7beaaf838a1d5a6c11a 100644 (file)
@@ -35,6 +35,9 @@ public:
     const ResultPtr& theContext, const std::shared_ptr<GeomAPI_Shape>& theSubShape,
     const bool theTemporarily = false);
 
+  /// Reset temporary stored values
+  virtual void removeTemporaryValues();
+
   /// Returns the selected subshape
   MODEL_EXPORT virtual std::shared_ptr<GeomAPI_Shape> value();
 
index 81ce0984cb9a856808b9439a51fdaee82f571fb5..0e3943f93755b91061525b768de348f452628806 100644 (file)
@@ -75,6 +75,13 @@ void Model_AttributeSelectionList::append(
   owner()->data()->sendAttributeUpdated(this);
 }
 
+void Model_AttributeSelectionList::removeTemporaryValues()
+{
+  if (myTmpAttr.get()) {
+    myTmpAttr.reset();
+  }
+}
+
 void Model_AttributeSelectionList::removeLast() 
 {
   int anOldSize = mySize->Get();
index c3b50a3d7910d33b3f96037510ba84b8bffef23d..0caf621b18c0f8cabc9c61816110723b878ed259 100644 (file)
@@ -45,6 +45,9 @@ public:
   /// The type of shape is taken from the current selection type if the given is empty
   MODEL_EXPORT virtual void append(const std::string theNamingName, const std::string& theType="");
 
+  /// Reset temporary stored values
+  virtual void removeTemporaryValues();
+
   /// Removes the last element in the list
   MODEL_EXPORT virtual void removeLast();
 
index 99c53b61a7c50131793e8a6c877307be815df14d..cc9862d88e08fafaf85ebdaad1f1f725d2296c54 100644 (file)
@@ -27,6 +27,9 @@ class ModelAPI_AttributeSelection : public ModelAPI_Attribute
     const ResultPtr& theContext, const std::shared_ptr<GeomAPI_Shape>& theSubShape,
     const bool theTemporarily = false) = 0;
 
+  /// Reset temporary stored values
+  virtual void removeTemporaryValues() = 0;
+
   /// Returns the selected subshape
   virtual std::shared_ptr<GeomAPI_Shape> value() = 0;
 
index aa2e7291574ae0eda5d55c77f5fcbff109a92d59..c5fe4c9349c007dd198181777c11c846187825ee 100644 (file)
@@ -32,6 +32,9 @@ class ModelAPI_AttributeSelectionList : public ModelAPI_Attribute
   /// The type of shape is taken from the current selection type if the given is empty
   virtual void append(const std::string theNamingName, const std::string& theType = "") = 0;
 
+  /// Reset temporary stored values
+  virtual void removeTemporaryValues() = 0;
+
   /// Removes the last element in the list
   virtual void removeLast() = 0;
 
index 7e0eb3f0f80fd7985baa43b28af771873f02445a..fda60cc0ea2030903ce8aa1ba33688a20ce6f9ad 100755 (executable)
@@ -19,6 +19,8 @@
 
 #include <ModelAPI_ResultConstruction.h>
 #include <ModelAPI_Events.h>
+#include <ModelAPI_AttributeSelection.h>
+#include <ModelAPI_AttributeSelectionList.h>
 
 #include <TopoDS_Iterator.hxx>
 
@@ -204,7 +206,20 @@ void ModuleBase_WidgetSelector::deactivate()
   ModuleBase_ModelWidget::deactivate();
   disconnect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
   activateSelectionAndFilters(false);
-  ModuleBase_ModelWidget::deactivate();
+
+  /// clear temporary cash
+  AttributePtr anAttribute = attribute();
+  std::string aType = anAttribute->attributeType();
+  if (anAttribute->attributeType() == ModelAPI_AttributeSelection::typeId()) {
+    AttributeSelectionPtr aSelectAttr =
+                             std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(anAttribute);
+    aSelectAttr->removeTemporaryValues();
+  }
+  else if (anAttribute->attributeType() == ModelAPI_AttributeSelectionList::typeId()) {
+    AttributeSelectionListPtr aSelectAttr =
+                             std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    aSelectAttr->removeTemporaryValues();
+  }
 }
 
 //********************************************************************