]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
Salome HOME
Issue #478 Problem of performance with selection: remove last instead of clearing...
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetMultiSelector.cpp
index 98f45e37081cd3d54bb193b39feb7f3a44b59c44..362d3d8a35f086054a58e39d25a2a830e90c36bf 100644 (file)
@@ -36,6 +36,8 @@
 #include <memory>
 #include <string>
 
+//#define DEBUG_ATTRIBUTE_SELECTION
+
 //#define DEBUG_SHAPE_VALIDATION_PREVIOUS
 
 class CustomListWidget : public QListWidget
@@ -66,7 +68,7 @@ ModuleBase_WidgetMultiSelector::ModuleBase_WidgetMultiSelector(QWidget* theParen
                                                                const Config_WidgetAPI* theData,
                                                                const std::string& theParentId)
  : ModuleBase_WidgetSelector(theParent, theWorkshop, theData, theParentId),
-   mySelectionType(""), mySelectionCount(0)
+   mySelectionCount(0)
 {
   QGridLayout* aMainLay = new QGridLayout(this);
   ModuleBase_Tools::adjustMargins(aMainLay);
@@ -150,6 +152,8 @@ bool ModuleBase_WidgetMultiSelector::storeValueCustom() const
 //********************************************************************
 bool ModuleBase_WidgetMultiSelector::restoreValueCustom()
 {
+  myIsInValidate = false;
+
   // A rare case when plugin was not loaded. 
   if(!myFeature)
     return false;
@@ -170,6 +174,7 @@ bool ModuleBase_WidgetMultiSelector::restoreValueCustom()
 //********************************************************************
 void ModuleBase_WidgetMultiSelector::storeAttributeValue()
 {
+  myIsInValidate = true;
   DataPtr aData = myFeature->data();
   AttributeSelectionListPtr aSelectionListAttr = 
     std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(aData->attribute(attributeID()));
@@ -177,14 +182,17 @@ void ModuleBase_WidgetMultiSelector::storeAttributeValue()
     return;
 
   mySelectionType = aSelectionListAttr->selectionType();
-  mySelectionCount = aSelectionListAttr->size();
 
-  /*mySelection.clear();
+#ifdef DEBUG_ATTRIBUTE_SELECTION
+  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()));
-  }*/
+  }
+#else
+  mySelectionCount = aSelectionListAttr->size();
+#endif
 }
 
 //********************************************************************
@@ -204,14 +212,16 @@ void ModuleBase_WidgetMultiSelector::setObject(ObjectPtr theSelectedObject,
   AttributeSelectionListPtr aSelectionListAttr = 
     std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(aData->attribute(attributeID()));
 
+  int aSelCount = aSelectionListAttr->size();
   ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theSelectedObject);
-  aSelectionListAttr->append(aResult, theShape);
+  aSelectionListAttr->append(aResult, theShape/*, myIsInValidate*/);
 }
 
 //********************************************************************
 void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool/* theValid*/)
 {
-  //clearAttribute();
+#ifdef DEBUG_ATTRIBUTE_SELECTION
+  clearAttribute();
 
   // Store shape type
   DataPtr aData = myFeature->data();
@@ -220,14 +230,21 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool/* theValid*/)
   aSelectionListAttr->setSelectionType(mySelectionType);
 
   // Store selection in the attribute
-  //int aSize = mySelection.size();
-  //foreach (GeomSelection aSelec, mySelection) {
-  //  setObject(aSelec.first, aSelec.second);
-  //}
+  foreach (GeomSelection aSelec, mySelection) {
+    setObject(aSelec.first, aSelec.second);
+  }
+#else
+  // Store shape type
+  DataPtr aData = myFeature->data();
+  AttributeSelectionListPtr aSelectionListAttr = 
+    std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(aData->attribute(attributeID()));
+  aSelectionListAttr->setSelectionType(mySelectionType);
 
-  //int aCountAppened = aSelectionListAttr->size() - mySelectionCount;
-  //for ( int i = 0; i < aCountAppened; i++)
-  //  aSelectionListAttr->removeLast();
+  // restore selection in the attribute
+  int aCountAppened = aSelectionListAttr->size() - mySelectionCount;
+  for ( int i = 0; i < aCountAppened; i++)
+    aSelectionListAttr->removeLast();
+#endif
 }
 
 //********************************************************************