Looks good!!!!
You are @embee on Slack right ? :-)

Cheers,
Alexandre
-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.



On Nov 19, 2015, at 4:03 PM, Martin B��hr <mbaehr@email.archlab.tuwien.ac.at> wrote:

Excerpts from stepharo's message of 2015-08-22 09:55:04 +0200:
would be fun to see if you can reuse the algo of roassal.

i have taken a stab at that:

===========================================================================================
view := RTView new.
| activenode prevnode |

view
when: TRMouseClick
do:
[ :ev |
| label node |
"node := shape element."
label := RTEditableLabel new
height: 30; "i have a very high resolution and like large fonts"
text: '';
element.
node := RTBox new
color: Color white;
borderWidth: 2;
borderColor: Color black;
element.
node @ RTDraggable.

"select a node to branch of new nodes from it"
node when: TRMouseClick do: [ :click | activenode := click element ].

"if the label is empty: '', then its size is 0@0 and is no
longer clickable to edit, hence we make the node clickable instead"
node when: TRMouseDoubleClick do: [ label shape showTextMorphFor: label ].
node when: TRMouseLeave do: [ label shape hideTextMorphFor: label ].
view
add: node;
add: label.
RTNest new
stretchable;
on: node nest: {label}.

"when the label changes its size, the box doesn't update its
size unless we add this workaround"
label trachelShape addCallback: (TRExtentCallback new block: [ :aShape :ratio | node trachelShape extent: aShape extent + (20 @ 0) ]).

node translateTo: ev position.

"label shape showTextMorphFor: label." "this opens the node in edit mode,
                                                       but somehow messes things up"

(activenode notNil and: node ~= activenode)
ifTrue: [ prevnode := activenode ].
prevnode
ifNotNil: [ edge := RTEdge from: prevnode to: node.
edge
+
(RTBezierLine horizontal
withContinuousRectangleAttachPoint;
yourself).
view add: edge ].
prevnode := node.
activenode := node.
view signalUpdate ].
view.
===========================================================================================

the behavior is a bit different than the usual mindmapping tools as it does not
enforce an automatic layout but you are free to place nodes whereever you like
by just clicking in the location and moving the node later.

that behavior is inspired by a mindmapping tool called labyrint:
https://github.com/labyrinth-team/labyrinth
https://www.youtube.com/watch?v=Pv3dTovGc0E


thanks to alexandre  bergel and others who helped me to figure out some
problems such as a workaround for RTEditableLabel not working with
RTCompositeShape:

shape := RTCompositeShape new.
shape allOfSameSizeWithPadding.
shape add: (RTBox new color: Color white; borderWidth: 2; borderColor: Color black).
shape add: (RTEditableLabel new height: 30).

the remaining problems are cosmetic. for example i can't seem to get the nodes
to open up in edit mode. doing that with the commented line in the code above,
wrecks havoc on the node.
i also would like RTBezierLine to be horizontal or vertical depending on how
the two nodes are positioned to each other. and it should always start at the
middle of the rectangles edge at a 90degree angle.

lastly, i'd like to have rounded corners on the RTBox.

if/when i develop this further, i plan to add the ability to select multiple
nodes and add edges between them. be able to move selected nodes as a group,
and align selected (or all) nodes according to one of the layouts provided by
roassal (tree, circle, etc), things like export to svg or png would also be nice.

and of course, package it up...

greetings, martin.

--
eKita                   -   the online platform for your entire academic life
--
chief engineer                                                       eKita.co
pike programmer      pike.lysator.liu.se    caudium.net     societyserver.org
secretary                                                      beijinglug.org
mentor                                                           fossasia.org
foresight developer  foresightlinux.org                            realss.com
unix sysadmin
Martin B��hr          working in china        http://societyserver.org/mbaehr/