Hello,
I started to see how an implementation of a legend can be provided in Roassal 2.
I added this methods in TRCanvas>>addLegend:..
addLegend: aDictionary | startPos interNodeWidth| interNodeWidth := 30. fixedShapes isEmpty ifTrue: [ startPos := self topLeft + (10@20) ] ifFalse: [startPos := self topLeft + (10@40)]. aDictionary associationsDo: [ :association | |shape| self addFixedShape: (TRBoxShape new size: 10; translateTo: startPos; color: association value). shape := (TRLabelShape new text: association key; fontSize: 10). shape translateTo: (shape width /2) + startPos x + 10 @ startPos y. self addFixedShape: shape. startPos := startPos x + shape width + interNodeWidth @ startPos y ].
Usage example: ============================================ | v e1 e2 l | v := RTView new. e1 := (RTEllipse new size: 30; color: (Color blue alpha: 0.3)) element.
e2 := (RTEllipse new size: 30; color: (Color yellow alpha: 0.3)) element.
l := (RTLine new attachPoint: RTShorterDistanceAttachPoint new) edgeFrom: e1 to: e2.
e1 @ RTDraggable. e2 @ RTDraggable.
v canvas addLegend: ({ 'Red' -> Color red. 'very very green' -> Color green.'blue' -> Color blue. 'Cyan' -> Color cyan. 'Cyan2' -> Color cyan}) asDictionary. v addAll: (Array with: l with: e2 with: e1).
v open
========================================= Questions for Roassal guys:
- Is TRCanvas the right place to add a legend? I started from here because it allows adding fixed shapes to the view. - how do I tell the canvas not to draw where meta-items are drawn such as legend(s), menus, etc.
If this is correct, Leo might continue from here on and put this code in a class to add more customizations.
tx, Usman