]> SALOME platform Git repositories - modules/yacs.git/blobdiff - src/engine/ForEachLoop.cxx
Salome HOME
Manage initnode and finalizenode in the foreachloop progress bar.
[modules/yacs.git] / src / engine / ForEachLoop.cxx
index 371bb8de3c272b99c9e6d2a4f5b33e274fa84d0d..3b9dec62cb8baa4e7fe63f4971cda31e067cb6ab 100644 (file)
@@ -741,6 +741,7 @@ YACS::Event ForEachLoop::updateStateForInitNodeOnFinishedEventFrom(Node *node, u
   _execNodes[id]->exUpdateState();
   _nbOfEltConsumed++;
   _initializingCounter--;
+  _currentIndex++;
   if (_initializingCounter == 0)
     _initNode->setState(DONE);
   return YACS::NOEVENT;
@@ -1110,27 +1111,29 @@ std::string ForEachLoop::getProgress() const
  */
 list<ProgressWeight> ForEachLoop::getProgressWeight() const
 {
-       list<ProgressWeight> ret;
-       list<Node *> setOfNode=edGetDirectDescendants();
-       int elemDone=getCurrentIndex();
-       int elemTotal=getNbOfElementsToBeProcessed();
-       for(list<Node *>::const_iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++)
-         {
-                 list<ProgressWeight> myCurrentSet=(*iter)->getProgressWeight();
-                       for(list<ProgressWeight>::iterator iter=myCurrentSet.begin();iter!=myCurrentSet.end();iter++)
-                               {
-                                       (*iter).weightDone=((*iter).weightTotal) * elemDone;
-                                       (*iter).weightTotal*=elemTotal;
-                               }
-                       ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end());
-
-         }
-       return ret;
+  list<ProgressWeight> ret;
+  list<Node *> setOfNode=edGetDirectDescendants();
+  int elemDone=getCurrentIndex();
+  int elemTotal=getNbOfElementsToBeProcessed();
+  for(list<Node *>::const_iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++)
+    {
+      list<ProgressWeight> myCurrentSet=(*iter)->getProgressWeight();
+      for(list<ProgressWeight>::iterator iter=myCurrentSet.begin();iter!=myCurrentSet.end();iter++)
+        {
+          (*iter).weightDone=((*iter).weightTotal) * elemDone;
+          (*iter).weightTotal*=elemTotal;
+        }
+      ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end());
+    }
+  return ret;
 }
 
 int ForEachLoop::getNbOfElementsToBeProcessed() const
 {
-  return _splitterNode.getNumberOfElements();
+  int nbBranches = _nbOfBranches.getIntValue();
+  return _splitterNode.getNumberOfElements()
+         + (_initNode ? nbBranches:0)
+         + (_finalizeNode ? nbBranches:0) ;
 }
 
 /*!