]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #1037 Time performance on a big model: validating is performed before the attri...
authornds <nds@opencascade.com>
Thu, 28 Apr 2016 09:46:42 +0000 (12:46 +0300)
committernds <nds@opencascade.com>
Thu, 28 Apr 2016 09:49:25 +0000 (12:49 +0300)
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp

index a4dc153777f933a752f5f0f0aaffbc8731922bed..ab940f015b42c17335730bcfac6b4b6d2076d704 100755 (executable)
@@ -220,22 +220,27 @@ bool ModuleBase_WidgetMultiSelector::restoreValueCustom()
 bool ModuleBase_WidgetMultiSelector::setSelection(QList<ModuleBase_ViewerPrsPtr>& theValues,
                                                   const bool theToValidate)
 {
-  QList<ModuleBase_ViewerPrsPtr> aSkippedValues;
-
   /// remove unused objects from the model attribute.
   /// It should be performed before new attributes append.
   removeUnusedAttributeObjects(theValues);
 
+  QList<ModuleBase_ViewerPrsPtr> anInvalidValues;
   QList<ModuleBase_ViewerPrsPtr>::const_iterator anIt = theValues.begin(), aLast = theValues.end();
-  bool isDone = false;
   for (; anIt != aLast; anIt++) {
     ModuleBase_ViewerPrsPtr aValue = *anIt;
     bool aProcessed = false;
-    if (!theToValidate || isValidInFilters(aValue)) {
-      aProcessed = setSelectionCustom(aValue);
-    }
-    else
-      aSkippedValues.append(aValue);
+    if (theToValidate && !isValidInFilters(aValue))
+      anInvalidValues.append(aValue);
+  }
+  bool aHasInvalidValues = anInvalidValues.size() > 0;
+
+  bool isDone = false;
+  for (anIt = theValues.begin(); anIt != aLast; anIt++) {
+    ModuleBase_ViewerPrsPtr aValue = *anIt;
+    bool aProcessed = false;
+    if (aHasInvalidValues && anInvalidValues.contains(aValue))
+      continue;
+    aProcessed = setSelectionCustom(aValue);
     // if there is at least one set, the result is true
     isDone = isDone || aProcessed;
   }
@@ -248,8 +253,8 @@ bool ModuleBase_WidgetMultiSelector::setSelection(QList<ModuleBase_ViewerPrsPtr>
   //}
 
   theValues.clear();
-  if (!aSkippedValues.empty())
-    theValues.append(aSkippedValues);
+  if (!anInvalidValues.empty())
+    theValues.append(anInvalidValues);
 
   return isDone;
 }