Salome HOME
Correct processing of the fixed arc in PlaneGCS (issue #1280)
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetMultiSelector.cpp
index c8250969a14b0a3c665aaae4741d34b71ae4aca5..9acca5255469efb03ff16b333712b22663b630ca 100755 (executable)
@@ -189,8 +189,7 @@ bool ModuleBase_WidgetMultiSelector::storeValueCustom() const
   AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID());
     aSelectionListAttr->setSelectionType(myTypeCombo->currentText().toStdString());
   }
   return true;
@@ -206,10 +205,11 @@ bool ModuleBase_WidgetMultiSelector::restoreValueCustom()
   AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID());
     // Restore shape type
-    setCurrentShapeType(ModuleBase_Tools::shapeType(aSelectionListAttr->selectionType().c_str()));
+    std::string aSelectionType = aSelectionListAttr->selectionType().c_str();
+    if (!aSelectionType.empty())
+      setCurrentShapeType(ModuleBase_Tools::shapeType(aSelectionType.c_str()));
   }
   updateSelectionList();
   return true;
@@ -220,75 +220,34 @@ void ModuleBase_WidgetMultiSelector::storeAttributeValue()
 {
   ModuleBase_WidgetValidated::storeAttributeValue();
 
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = aData->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
-
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID());
     mySelectionType = aSelectionListAttr->selectionType();
     mySelectionCount = aSelectionListAttr->size();
   }
   else if (aType == ModelAPI_AttributeRefList::typeId()) {
-    AttributeRefListPtr aRefListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(anAttribute);
+    AttributeRefListPtr aRefListAttr = aData->reflist(attributeID());
     mySelectionCount = aRefListAttr->size();
   }
   else if (aType == ModelAPI_AttributeRefAttrList::typeId()) {
-    AttributeRefAttrListPtr aRefAttrListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefAttrList>(anAttribute);
+    AttributeRefAttrListPtr aRefAttrListAttr = aData->refattrlist(attributeID());
     mySelectionCount = aRefAttrListAttr->size();
   }
 }
 
-//********************************************************************
-bool ModuleBase_WidgetMultiSelector::setSelectionCustom(const ModuleBase_ViewerPrs& thePrs)
-{
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
-  std::string aType = anAttribute->attributeType();
-  if (aType == ModelAPI_AttributeRefAttrList::typeId()) {
-    AttributeRefAttrListPtr aRefAttrListAttr = 
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefAttrList>(anAttribute);
-    bool isDone = false;
-    if (!thePrs.shape().IsNull()) {
-      GeomShapePtr aGeomShape = std::shared_ptr<GeomAPI_Shape>(new GeomAPI_Shape);
-      aGeomShape->setImpl(new TopoDS_Shape(thePrs.shape()));
-
-      AttributePtr anAttribute = myWorkshop->module()->findAttribute(thePrs.object(), aGeomShape);
-      if (anAttribute.get()) {
-        aRefAttrListAttr->append(anAttribute);
-        isDone = true;
-      }
-    }
-    if (!isDone) {
-      //ModuleBase_WidgetSelector::setSelectionCustom(thePrs);
-      ObjectPtr anObject;
-      GeomShapePtr aShape;
-      getGeomSelection(thePrs, anObject, aShape);
-      setObject(anObject, aShape);
-    }
-  }
-  else {
-    //ModuleBase_WidgetSelector::setSelectionCustom(thePrs);
-
-    ObjectPtr anObject;
-    GeomShapePtr aShape;
-    getGeomSelection(thePrs, anObject, aShape);
-    setObject(anObject, aShape);
-  }
-  return true;
-}
-
 //********************************************************************
 void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool theValid)
 {
   ModuleBase_WidgetValidated::restoreAttributeValue(theValid);
 
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = aData->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID());
     aSelectionListAttr->setSelectionType(mySelectionType);
 
     // restore selection in the attribute. Indeed there is only one stored object
@@ -297,16 +256,14 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool theValid)
       aSelectionListAttr->removeLast();
   }
   else if (aType == ModelAPI_AttributeRefList::typeId()) {
-    AttributeRefListPtr aRefListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(anAttribute);
+    AttributeRefListPtr aRefListAttr = aData->reflist(attributeID());
     // restore objects in the attribute. Indeed there is only one stored object
     int aCountAppened = aRefListAttr->size() - mySelectionCount;
     for (int i = 0; i < aCountAppened; i++)
       aRefListAttr->removeLast();
   }
   else if (aType == ModelAPI_AttributeRefAttrList::typeId()) {
-    AttributeRefAttrListPtr aRefAttrListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefAttrList>(anAttribute);
+    AttributeRefAttrListPtr aRefAttrListAttr = aData->refattrlist(attributeID());
     // restore objects in the attribute. Indeed there is only one stored object
     int aCountAppened = aRefAttrListAttr->size() - mySelectionCount;
     for (int i = 0; i < aCountAppened; i++)
@@ -317,21 +274,19 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool theValid)
 //********************************************************************
 void ModuleBase_WidgetMultiSelector::clearAttribute()
 {
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = aData->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID());
     aSelectionListAttr->clear();
   }
   else if (aType == ModelAPI_AttributeRefList::typeId()) {
-    AttributeRefListPtr aRefListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(anAttribute);
+    AttributeRefListPtr aRefListAttr = aData->reflist(attributeID());
     aRefListAttr->clear();
   }
   else if (aType == ModelAPI_AttributeRefAttrList::typeId()) {
-    AttributeRefAttrListPtr aRefAttrListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefAttrList>(anAttribute);
+    AttributeRefAttrListPtr aRefAttrListAttr = aData->refattrlist(attributeID());
     aRefAttrListAttr->clear();
   }
 }
@@ -340,23 +295,26 @@ void ModuleBase_WidgetMultiSelector::clearAttribute()
 void ModuleBase_WidgetMultiSelector::setObject(ObjectPtr theSelectedObject,
                                                GeomShapePtr theShape)
 {
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = aData->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID());
     ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theSelectedObject);
     aSelectionListAttr->append(aResult, theShape, myIsInValidate);
   }
   else if (aType == ModelAPI_AttributeRefList::typeId()) {
-    AttributeRefListPtr aRefListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(anAttribute);
+    AttributeRefListPtr aRefListAttr = aData->reflist(attributeID());
     aRefListAttr->append(theSelectedObject);
   }
   else if (aType == ModelAPI_AttributeRefAttrList::typeId()) {
-    //AttributeRefAttrListPtr aRefAttrListAttr =
-    //             std::dynamic_pointer_cast<ModelAPI_AttributeRefAttrList>(anAttribute);
-    //aRefAttrListAttr->clear();
+    AttributeRefAttrListPtr aRefAttrListAttr = aData->refattrlist(attributeID());
+
+    AttributePtr anAttribute = myWorkshop->module()->findAttribute(theSelectedObject, theShape);
+    if (anAttribute.get())
+      aRefAttrListAttr->append(anAttribute);
+    else
+      aRefAttrListAttr->append(theSelectedObject);
   }
 }
 
@@ -438,23 +396,21 @@ bool ModuleBase_WidgetMultiSelector::processDelete()
 
   // refill attribute by the items which indices are not in the list of ids
   bool aDone = false;
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = aData->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
   aDone = !anAttributeIds.empty();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID());
     aSelectionListAttr->remove(anAttributeIds);
 
   }
   else if (aType == ModelAPI_AttributeRefList::typeId()) {
-    AttributeRefListPtr aRefListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(anAttribute);
-      aRefListAttr->remove(anAttributeIds);
+    AttributeRefListPtr aRefListAttr = aData->reflist(attributeID());
+    aRefListAttr->remove(anAttributeIds);
   }
   else if (aType == ModelAPI_AttributeRefAttrList::typeId()) {
-    AttributeRefAttrListPtr aRefAttrListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefAttrList>(anAttribute);
+    AttributeRefAttrListPtr aRefAttrListAttr = aData->refattrlist(attributeID());
     aRefAttrListAttr->remove(anAttributeIds);
   }
 
@@ -555,11 +511,11 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList()
 {
   myListControl->clear();
 
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = aData->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID());
     for (int i = 0; i < aSelectionListAttr->size(); i++) {
       AttributeSelectionPtr aAttr = aSelectionListAttr->value(i);
       QListWidgetItem* anItem = new QListWidgetItem(aAttr->namingName().c_str(), myListControl);
@@ -568,8 +524,7 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList()
     }
   }
   else if (aType == ModelAPI_AttributeRefList::typeId()) {
-    AttributeRefListPtr aRefListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(anAttribute);
+    AttributeRefListPtr aRefListAttr = aData->reflist(attributeID());
     for (int i = 0; i < aRefListAttr->size(); i++) {
       ObjectPtr anObject = aRefListAttr->object(i);
       if (anObject.get()) {
@@ -581,13 +536,12 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList()
     }
   }
   else if (aType == ModelAPI_AttributeRefAttrList::typeId()) {
-    AttributeRefAttrListPtr aRefAttrListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefAttrList>(anAttribute);
+    AttributeRefAttrListPtr aRefAttrListAttr = aData->refattrlist(attributeID());
     for (int i = 0; i < aRefAttrListAttr->size(); i++) {
       AttributePtr anAttribute = aRefAttrListAttr->attribute(i);
       QString aName;
       if (anAttribute.get()) {
-        std::string anAttrName = generateName(anAttribute);
+        std::string anAttrName = generateName(anAttribute, myWorkshop);
         aName = QString::fromStdString(anAttrName);
       }
       else {
@@ -673,11 +627,11 @@ void ModuleBase_WidgetMultiSelector::convertIndicesToViewerSelection(std::set<in
   if(myFeature.get() == NULL)
     return;
 
-  AttributePtr anAttribute = myFeature->data()->attribute(attributeID());
+  DataPtr aData = myFeature->data();
+  AttributePtr anAttribute = aData->attribute(attributeID());
   std::string aType = anAttribute->attributeType();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
-    AttributeSelectionListPtr aSelectionListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(anAttribute);
+    AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID());
     for (int i = 0; i < aSelectionListAttr->size(); i++) {
       // filter by attribute indices only if the container is not empty otherwise return all items
       if (!theAttributeIds.empty() && theAttributeIds.find(i) == theAttributeIds.end())
@@ -695,8 +649,7 @@ void ModuleBase_WidgetMultiSelector::convertIndicesToViewerSelection(std::set<in
     }
   }
   else if (aType == ModelAPI_AttributeRefList::typeId()) {
-    AttributeRefListPtr aRefListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(anAttribute);
+    AttributeRefListPtr aRefListAttr = aData->reflist(attributeID());
     for (int i = 0; i < aRefListAttr->size(); i++) {
       // filter by attribute indices only if the container is not empty otherwise return all items
       if (!theAttributeIds.empty() && theAttributeIds.find(i) == theAttributeIds.end())
@@ -708,8 +661,7 @@ void ModuleBase_WidgetMultiSelector::convertIndicesToViewerSelection(std::set<in
     }
   }
   else if (aType == ModelAPI_AttributeRefAttrList::typeId()) {
-    AttributeRefAttrListPtr aRefAttrListAttr =
-                 std::dynamic_pointer_cast<ModelAPI_AttributeRefAttrList>(anAttribute);
+    AttributeRefAttrListPtr aRefAttrListAttr = aData->refattrlist(attributeID());
     for (int i = 0; i < aRefAttrListAttr->size(); i++) {
       // filter by attribute indices only if the container is not empty otherwise return all items
       if (!theAttributeIds.empty() && theAttributeIds.find(i) == theAttributeIds.end())