+void ModuleBase_WidgetMultiSelector::storeAttributeValue()
+{
+ DataPtr aData = myFeature->data();
+ AttributeSelectionListPtr aSelectionListAttr =
+ std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(aData->attribute(attributeID()));
+ if (aSelectionListAttr.get() == NULL)
+ return;
+
+ mySelectionType = aSelectionListAttr->selectionType();
+ mySelection.clear();
+ int aSize = aSelectionListAttr->size();
+ for (int i = 0; i < aSelectionListAttr->size(); i++) {
+ AttributeSelectionPtr aSelectAttr = aSelectionListAttr->value(i);
+ mySelection.append(GeomSelection(aSelectAttr->context(), aSelectAttr->value()));
+ }
+}
+
+//********************************************************************
+void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool/* theValid*/)
+{
+ DataPtr aData = myFeature->data();
+ AttributeSelectionListPtr aSelectionListAttr =
+ std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(aData->attribute(attributeID()));
+ if (aSelectionListAttr.get() == NULL)
+ return;
+ aSelectionListAttr->clear();
+
+ // Store shapes type
+ aSelectionListAttr->setSelectionType(mySelectionType);
+
+ // Store selection in the attribute
+ int aSize = mySelection.size();
+ foreach (GeomSelection aSelec, mySelection) {
+ aSelectionListAttr->append(aSelec.first, aSelec.second);
+ }
+}
+
+//********************************************************************
+bool ModuleBase_WidgetMultiSelector::setSelection(const QList<ModuleBase_ViewerPrs>& theValues,
+ int& thePosition)
+{
+ if (thePosition < 0)
+ return false;
+
+ QList<ModuleBase_ViewerPrs>::const_iterator anIt = theValues.begin(), aLast = theValues.end();
+ bool isDone = false;
+ for (int i = thePosition; i < theValues.size(); i++) {
+ ModuleBase_ViewerPrs aValue = theValues[i];
+ thePosition++;
+ bool aProcessed = false;
+ if (isValidSelection(aValue)) {
+ aProcessed = setSelectionCustom(aValue);
+ }
+ // if there is at least one set, the result is true
+ isDone = isDone || aProcessed;
+ // when an object, which do not satisfy the validating process, stop set selection
+ if (!aProcessed)
+ break;
+ }
+ if (isDone) {
+ updateObject(myFeature);
+ emit valuesChanged();
+ }
+ return isDone;
+}
+
+//********************************************************************
+bool ModuleBase_WidgetMultiSelector::setSelectionCustom(const ModuleBase_ViewerPrs& thePrs)