]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Preselection using in operations: setSelection using in onSelectionChanged method.
authornds <natalia.donis@opencascade.com>
Wed, 17 Jun 2015 12:40:03 +0000 (15:40 +0300)
committernds <natalia.donis@opencascade.com>
Wed, 17 Jun 2015 12:40:03 +0000 (15:40 +0300)
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp
src/PartSet/PartSet_WidgetMultiSelector.cpp
src/PartSet/PartSet_WidgetSketchLabel.cpp

index 2720e55cfafc31f2886004fc0541893f26d14771..b01892e6a4b658821ff9052a07f1adcb51af2ad1 100644 (file)
@@ -300,19 +300,21 @@ bool ModuleBase_WidgetMultiSelector::isValidSelectionCustom(const ModuleBase_Vie
   return true;
 #endif
   GeomShapePtr aShape = myWorkshop->selection()->getShape(thePrs);
-  // if there is no selected shape, the method returns true
-  bool aValid;
-  if (!aShape.get())
-    aValid = true;
-  else {
-    // Check that the selection corresponds to selection type
-    TopoDS_Shape aTopoShape = aShape->impl<TopoDS_Shape>();
-    aValid = acceptSubShape(aTopoShape);
+  // if there is no result(the feature is presentable only), result is false
+  ResultPtr aResult = myWorkshop->selection()->getResult(thePrs);
+  bool aValid = aResult.get() != NULL;
+  if (aValid) {
+    // if there is no selected shape, the method returns true
+    if (!aShape.get())
+      aValid = true;
+    else {
+      // Check that the selection corresponds to selection type
+      TopoDS_Shape aTopoShape = aShape->impl<TopoDS_Shape>();
+      aValid = acceptSubShape(aTopoShape);
+    }
   }
 
   if (aValid) {
-    ResultPtr aResult = myWorkshop->selection()->getResult(thePrs);
-
     if (myFeature) {
       // We can not select a result of our feature
       const std::list<ResultPtr>& aResList = myFeature->results();
@@ -327,7 +329,6 @@ bool ModuleBase_WidgetMultiSelector::isValidSelectionCustom(const ModuleBase_Vie
       if(isSkipSelf)
         aValid = false;
     }
-  
   }
 
   return aValid;
@@ -412,15 +413,10 @@ void ModuleBase_WidgetMultiSelector::onSelectionChanged()
   DataPtr aData = myFeature->data();
   AttributeSelectionListPtr aSelectionListAttr = 
     std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(aData->attribute(attributeID()));
-
   aSelectionListAttr->clear();
-  if (aSelected.size() > 0) {
-    foreach (ModuleBase_ViewerPrs aPrs, aSelected) {
-      if (isValidSelection(aPrs)) {
-        setSelectionCustom(aPrs);
-      }
-    }
-  }
+
+  setSelection(aSelected);
+
   emit valuesChanged();
   // the updateObject method should be called to flush the updated sigal. The workshop listens it,
   // calls validators for the feature and, as a result, updates the Apply button state.
index 457a9f6ffe392950c180d7a2105451e5368ca3c4..03aaf1fcb7ff4daefdd22416a4f6c5d31a024103 100644 (file)
@@ -214,15 +214,9 @@ void ModuleBase_WidgetShapeSelector::onSelectionChanged()
   // In order to make reselection possible, set empty object and shape should be done
   setObject(ObjectPtr(), std::shared_ptr<GeomAPI_Shape>(new GeomAPI_Shape()));
 
-  bool aHasObject = false;
-  QList<ModuleBase_ViewerPrs> aSelectedPrs = myWorkshop->selection()->getSelected(ModuleBase_ISelection::AllControls);
-  if (!aSelectedPrs.empty()) {
-    ModuleBase_ViewerPrs aPrs = aSelectedPrs.first();
-    if (!aPrs.isEmpty() && isValidSelection(aPrs)) {
-      setSelectionCustom(aPrs);
-      aHasObject = true;
-    }
-  }
+  QList<ModuleBase_ViewerPrs> aSelected = myWorkshop->selection()->getSelected(ModuleBase_ISelection::AllControls);
+  bool aHasObject = setSelection(aSelected);
+
   // the updateObject method should be called to flush the updated sigal. The workshop listens it,
   // calls validators for the feature and, as a result, updates the Apply button state.
   updateObject(myFeature);
index 3557582824af7eb5a5501986f1cef40f13cb8d91..139be4ee3e8273a1b089195052cb0c587eca51e7 100644 (file)
@@ -81,21 +81,12 @@ void PartSet_WidgetMultiSelector::restoreAttributeValue(const bool theValid)
 //********************************************************************
 bool PartSet_WidgetMultiSelector::setSelectionCustom(const ModuleBase_ViewerPrs& thePrs)
 {
-  TopoDS_Shape aShape = thePrs.shape();
-  if (!acceptSubShape(aShape))
-    return false;
-
-  ResultPtr aResult;
-  if (!thePrs.owner().IsNull()) {
-    ObjectPtr anObject = myWorkshop->selection()->getSelectableObject(thePrs.owner());
-    aResult = std::dynamic_pointer_cast<ModelAPI_Result>(anObject);
-  }
-  else {
-    aResult = std::dynamic_pointer_cast<ModelAPI_Result>(thePrs.object());
-  }
-
+  //TopoDS_Shape aShape = thePrs.shape();
+  //if (!acceptSubShape(aShape))
+  //  return false;
 
-  if (myFeature) {
+  ResultPtr aResult = myWorkshop->selection()->getResult(thePrs);
+  /*if (myFeature) {
     // We can not select a result of our feature
     const std::list<ResultPtr>& aResList = myFeature->results();
     std::list<ResultPtr>::const_iterator aIt;
@@ -108,9 +99,9 @@ bool PartSet_WidgetMultiSelector::setSelectionCustom(const ModuleBase_ViewerPrs&
     }
     if(isSkipSelf)
       return false;
-  }
+  }*/
 
-  GeomShapePtr aGShape = GeomShapePtr();
+  /*GeomShapePtr aGShape = GeomShapePtr();
   const TopoDS_Shape& aTDSShape = thePrs.shape();
   // if only result is selected, an empty shape is set to the model
   if (aTDSShape.IsNull()) {
@@ -128,8 +119,9 @@ bool PartSet_WidgetMultiSelector::setSelectionCustom(const ModuleBase_ViewerPrs&
     else {
       //aSelectionListAttr->append(aResult, aShape);
     }
-  }
+  }*/
 
+  GeomShapePtr aGShape = myWorkshop->selection()->getShape(thePrs);
   setObject(aResult, aGShape);
   return true;
 }
index 9e659086c353cfc7f3c48a5c32281e2350ee2db5..e2d551bd2cfa3b59b32ddf8a8591e3682d658000 100644 (file)
@@ -101,16 +101,16 @@ QList<QWidget*> PartSet_WidgetSketchLabel::getControls() const
 
 void PartSet_WidgetSketchLabel::onSelectionChanged()
 {
-  QList<ModuleBase_ViewerPrs> aSelectedPrs = myWorkshop->selector()->selection()->getSelected(
+  QList<ModuleBase_ViewerPrs> aSelected = myWorkshop->selector()->selection()->getSelected(
                                                            ModuleBase_ISelection::AllControls);
-  if (aSelectedPrs.empty())
+  if (aSelected.empty())
     return;
-  ModuleBase_ViewerPrs aPrs = aSelectedPrs.first();
-  if (aPrs.isEmpty() || !isValidSelection(aPrs))
+  ModuleBase_ViewerPrs aPrs = aSelected.first();
+
+  bool isDone = ModuleBase_WidgetValidated::setSelection(aSelected);
+  if (!isDone)
     return;
 
-  // 2. set the selection to sketch
-  setSelectionCustom(aPrs);
   // 3. hide main planes if they have been displayed
   erasePreviewPlanes();
   // 4. if the planes were displayed, change the view projection