+//********************************************************************
+void ModuleBase_WidgetMultiSelector::getSelectedAttributeIndices(std::set<int>& theAttributeIds)
+{
+ QList<QListWidgetItem*> aItems = myListControl->selectedItems();
+ foreach(QListWidgetItem* anItem, aItems) {
+ int anIndex = anItem->data(ATTRIBUTE_SELECTION_INDEX_ROLE).toInt();
+ if (theAttributeIds.find(anIndex) == theAttributeIds.end())
+ theAttributeIds.insert(anIndex);
+ }
+}
+
+void ModuleBase_WidgetMultiSelector::convertIndicesToViewerSelection(std::set<int> theAttributeIds,
+ QList<ModuleBase_ViewerPrs>& theValues) const
+{
+ if(myFeature.get() == NULL)
+ return;
+
+ 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);
+ 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())
+ continue;
+ AttributeSelectionPtr anAttr = aSelectionListAttr->value(i);
+ ResultPtr anObject = anAttr->context();
+ if (anObject.get()) {
+ TopoDS_Shape aShape;
+ std::shared_ptr<GeomAPI_Shape> aShapePtr = anAttr->value();
+ if (aShapePtr.get()) {
+ aShape = aShapePtr->impl<TopoDS_Shape>();
+ }
+ theValues.append(ModuleBase_ViewerPrs(anObject, aShape, NULL));
+ }
+ }
+ }
+ else if (aType == ModelAPI_AttributeRefList::typeId()) {
+ AttributeRefListPtr aRefListAttr =
+ std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(anAttribute);
+ 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())
+ continue;
+ ObjectPtr anObject = aRefListAttr->object(i);
+ if (anObject.get()) {
+ theValues.append(ModuleBase_ViewerPrs(anObject, TopoDS_Shape(), NULL));
+ }
+ }
+ }
+}