Hi Alex,
You use RoassalModel just like a regular ComposableModel (which it is subclass of) and then use methods #script: [ :view :canvas | ] to fill in your visualization. (And use #refresh or something, but I am triggering updates manually).
So for example
~~~~~~~~~~~~~~~~~~~~~
ui := DynamicComposableModel new.
ui instantiateModels: #(
button ButtonModel
view RoassalModel
).
ui button label: 'I am a button'.
ui extent: 600 @ 480.
ui view script: [ :view :canvas |
|es|
es := RTEllipse new size: 20; elementsOn: (1 to: 6).
view addAll: es.
RTCircleLayout on: es.
RTEdgeBuilder new
view: view;
elements: es;
connectToAll: [ :value | { value + 1. (value + 1) % 6 } ].
canvas camera focusOnCenter.
].
layout := SpecLayout composed
newColumn: [ :col |
col
add: #button height: ComposableModel toolbarHeight;
add: #view.
];
yourself.
ui openWithSpecLayout: layout.
~~~~~~~~~~~~~~~~~~~~~
If you use ComposableModel (as you should), you just move it to methods as appropriate (#initializeWidgets, #initializePresenters, etc...)
(or DynaCASE, but our usage of RoassalModel is quite complex so it's _not_ a good example).
I believe Johan was working on an example.
Peter