#include "ct_stependloop.h" #include "ct_stepbeginloop.h" CT_StepEndLoop::CT_StepEndLoop() : CT_AbstractStep() { m_mustRestartFromStep = nullptr; setDebuggable(true); } QString CT_StepEndLoop::description() const { return tr("Fin de boucle"); } QString CT_StepEndLoop::detailledDescription() const { return tr("Cette étape permet de terminer une boucle dans un script. Elle nécessite une étape de démarrage de boucle en amont."); } QString CT_StepEndLoop::inputDescription() const { return CT_AbstractStep::inputDescription() + tr("

Le résultat compteur choisi détermine à quel début de boucle cette fin de boucle correspond."); } QString CT_StepEndLoop::outputDescription() const { return tr("Cette étape génère une simple copie du résultat d'entrée, sans créer de nouvelle donnée. Cela permet de continuer le script après la boucle. "); } QString CT_StepEndLoop::detailsDescription() const { return tr("Il est possible d'emboîter plusieurs boucles. Pour cela il faut bien séléctionner les bon résultats compteurs pour faire correspondre deux à deux les étapes d'ouverture et de fermeture de boucle."); } CT_VirtualAbstractStep* CT_StepEndLoop::createNewInstance() const { // cree une copie de cette etape return new CT_StepEndLoop(); } CT_VirtualAbstractStep* CT_StepEndLoop::restartComputeFromStep() const { return m_mustRestartFromStep; } void CT_StepEndLoop::declareInputModels(CT_StepInModelStructureManager& manager) { manager.addResult(m_hInResultCopy, tr("Résultat compteur"), QString(), true); manager.setRootGroup(m_hInResultCopy, m_hInRootGroup); manager.addItem(m_hInRootGroup, m_hInLoopCounter, tr("Compteur")); } void CT_StepEndLoop::declareOutputModels(CT_StepOutModelStructureManager& manager) { manager.addResultCopy(m_hInResultCopy); } //////////////////// PROTECTED ////////////////// void CT_StepEndLoop::compute() { m_mustRestartFromStep = nullptr; for(CT_LoopCounter* counter : m_hInLoopCounter.iterateOutputs(m_hInResultCopy)) { STEP_LOG->addInfoMessage(tr("Fin de boucle, tour %1 sur %2").arg(counter->currentTurn()).arg(counter->nTurns())); // Use the debug mode at step loop scale (and not at step scale as usual) if ((currentNumberOfBreakPointToJump() != 0) && ((counter->currentTurn() % currentNumberOfBreakPointToJump()) == 0)) waitForAckIfInDebugMode(); if(counter->hasNextTurn()) { m_mustRestartFromStep = counter->beginLoopStep(); counter->beginNextTurn(); } else { counter->setCurrentTurn(1); } return; } }