Out of curiosity I dug a little deeper and was happy to learn about a Job and more about Pharo internals.
In any case, try replacing RTForceBasedLayout>>doExecute: with this
~~~~~~~~~~~~~~~~~~~~~~~~~
doExecute: nodeElements
self start: nodeElements.
[ :job |
job
title: 'Laying out elements';
min: 1 - alpha;
max: 1.
nbIterations = 0
ifTrue: [ [ alpha := alpha * 0.99. alpha > 0.005 ] whileTrue: [ self step. job currentValue: 1 - alpha ] ]
ifFalse: [ nbIterations timesRepeat: [ alpha := alpha * 0.99. self step. job currentValue: 1 - alpha ] ]
] asJob run.
alpha := 0.
nodes do: [ :e | translator translateTopLeftOf: e to: e position ].
~~~~~~~~~~~~~~~~~~~~~~~~~
it's bit messy (and doesn't account for nbIterations), but its a proof of concept.
I thing that it makes sense to create execution indicator without progress (with spinner for example)