void AMLoopAction3::internalOnCurrentActionProgressChanged(double numerator, double denominator) { if(internalAllActionsHaveExpectedDuration()) { double totalNumerator = 0, totalDenominator = 0; for(int i=0, cc=subActionCount(); i<cc; i++) { AMAction3* action = subActionAt(i); double expectedSecs = action->info()->expectedDuration(); totalDenominator += expectedSecs*loopCount(); int timesFinished = currentIteration_; if(i < currentSubActionIndex_) timesFinished++; totalNumerator += expectedSecs*timesFinished; if(i == currentSubActionIndex()) // if it's the current action, we have some partial progress. totalNumerator += numerator/denominator * expectedSecs; } setProgress(totalNumerator, totalDenominator); setExpectedDuration(totalDenominator); } // Otherwise, assume every subaction makes up an equal unit ('1') of the total amount of work. Our denominator will be the number of sub-actions * the number of loops, and our numerator will be the sub-actions we've completed (plus the current sub-action's fraction done). else { double totalDenominator = subActionCount()*loopCount(); double totalNumerator = subActionCount()*currentIteration_; // add the completed full loops totalNumerator += currentSubActionIndex_; // add the actions done in this loop totalNumerator += numerator/denominator; // add the fraction done for the current action. setProgress(totalNumerator, totalDenominator); setExpectedDuration(runningTime()*totalDenominator/totalNumerator); } }
QWidget * AMActionRunnerQueueItemDelegate3::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(option) const AMActionRunnerQueueModel3* model = qobject_cast<const AMActionRunnerQueueModel3*>(index.model()); if(!model) return 0; AMAction3* action = model->actionAtIndex(index); if(!action) return 0; QWidget* rv = AMActionRegistry3::s()->createEditorForInfo(action->info()); if(rv) { rv->setParent(parent); rv->setFocusPolicy(Qt::StrongFocus); rv->setBackgroundRole(QPalette::Window); rv->setAutoFillBackground(true); } return rv; }