Salome HOME
Coincident with objects
[modules/shaper.git] / src / PartSet / PartSet_WidgetMultiSelector.cpp
index 1c046be78d49a083c419f68ec88af9b030b9e1e6..43f066ea2337b8e935f502013489d968d4328e9f 100644 (file)
@@ -41,11 +41,41 @@ PartSet_WidgetMultiSelector::~PartSet_WidgetMultiSelector()
   delete myExternalObjectMgr;
 }
 
+//********************************************************************
+void PartSet_WidgetMultiSelector::onSelectionChanged()
+{
+  ModuleBase_WidgetMultiSelector::onSelectionChanged();
+  // TODO(nds): unite with externalObject(), remove parameters
+  //myFeature->execute();
+
+  DataPtr aData = myFeature->data();
+  AttributeSelectionListPtr aSelectionListAttr = 
+    std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(aData->attribute(attributeID()));
+
+  QObjectPtrList aListOfAttributeObjects;
+  for (int i = 0; i < aSelectionListAttr->size(); i++) {
+    AttributeSelectionPtr anAttr = aSelectionListAttr->value(i);
+    aListOfAttributeObjects.append(anAttr->context());
+  }
+
+  myExternalObjectMgr->removeUnusedExternalObjects(aListOfAttributeObjects, sketch(), myFeature);
+}
+
+//********************************************************************
+void PartSet_WidgetMultiSelector::storeAttributeValue()
+{
+  myIsInVaildate = true;
+  ModuleBase_WidgetMultiSelector::storeAttributeValue();
+
+}
+
 //********************************************************************
 void PartSet_WidgetMultiSelector::restoreAttributeValue(const bool theValid)
 {
+  myIsInVaildate = false;
   ModuleBase_WidgetMultiSelector::restoreAttributeValue(theValid);
-  myExternalObjectMgr->removeExternal(sketch(), myFeature);
+
+  myExternalObjectMgr->removeExternalValidated(sketch(), myFeature);
 }
 
 //********************************************************************
@@ -126,7 +156,10 @@ bool PartSet_WidgetMultiSelector::setObject(const ObjectPtr& theSelectedObject,
     return false;
 
   if (aSPFeature.get() == NULL && aShape.get() != NULL && !aShape->isNull() && myExternalObjectMgr->useExternal()) {
-    aSelectedObject = myExternalObjectMgr->externalObject(theSelectedObject, theShape, sketch());
+    if (myIsInVaildate)
+      aSelectedObject = myExternalObjectMgr->externalObjectValidated(theSelectedObject, theShape, sketch());
+    else
+      aSelectedObject = myExternalObjectMgr->externalObject(theSelectedObject, theShape, sketch());
   }