The issue here is that I have introduced a mechanism to do ‘if’ statements. I am not sure this is the best things…

Why not use filter-like syntax which is already used in RTShapeBuilder? (RTShapeBuilder>>ifElement:color:, etc.)

ifElement: #isConnected layout: RTTreeLayout new.
ifElement: [ :e | e isConnected not ] layout: RTTreeLayout new.

This would also allow for overlapping of layouts.

Peter