Hmm, maybe that's the reason why there is separate class for ArrowedLine.
Essentially both RTElement and RTEdge has method 'model:' (RTShapedObject>>model:) where you can put a string which is then used by RTLabelled. (You can actually pass any object, but then you will have to modify it to send it the proper message).
| vista e1 e2 e3 e4 line edge1 edge2 |
"Se crea un objeto tipo vista"
vista := RTView new.
"Definimo los elementos, que denominamos simplemente e1, e2, etc, con
su color y su tamaño"
e1 := (RTEllipse new color: (Color blue alpha: 0.4); size: 20) elementOn: 'first'.
e2 := (RTEllipse new color: (Color red alpha: 0.4); size: 20) elementOn: 'second'.
e3 := (RTEllipse new color: (Color yellow alpha: 0.4); size: 20) elementOn: 'third'.
e4 := (RTEllipse new color: (Color green alpha: 0.4); size: 20) elementOn: 'fourth'.
"Decimos que los elementos antes definidos se podrán arrastrar"
vista add: e1; add: e2; add: e3; add: e4.
vista elements do: [ :each | each @ RTDraggable @ RTLabelled ].
"Adicionamos los elementos a la vista"
"Decimos qué propiedades va a tener la línea que los conecta los elementos"
line := RTArrowedLine new color: Color red.
line withOffsetIfMultiple.
"Decimos de dónde a dónde van las líneas que unen los elementos en la vista"
edge1 := (line edgeFrom: e1 to: e2).
edge2 := (line edgeFrom: e3 to: e4) model: 'second label'.
vista add: edge1.
vista add: (line edgeFrom: e2 to: e1).
vista add: (line edgeFrom: e1 to: e2).
vista add: (line edgeFrom: e2 to: e2).
vista add: edge2.
edge1 @ (RTLabelled new text: 'edge label').
edge2 @ RTLabelled. "this uses the model of edge2"
"Decimos que dispocisión van a tener los elementos en la vista.
En este caso se van a disponer de manera circular"
RTCircleLayout on: { e1 . e2 . e3 . e4 }.
"Abrimos la vista"
vista open