1
14 package demo.view.layout.organic;
15
16 import y.base.Node;
17 import y.base.NodeCursor;
18 import y.view.Graph2DView;
19 import y.view.MoveSelectionMode;
20 import y.view.NodeRealizer;
21 import y.layout.organic.InteractiveOrganicLayouter;
22
23
26 public class InteractiveMoveSelectionMode extends MoveSelectionMode {
27 private InteractiveOrganicLayouter layouter;
28
29 public InteractiveMoveSelectionMode( InteractiveOrganicLayouter layouter ) {
30 if ( layouter == null ) throw new IllegalArgumentException( "layouter must not be null" );
31 this.layouter = layouter;
32 }
33
34
38 protected void selectionMoveStarted( double x, double y ) {
39 view.setDrawingMode( Graph2DView.NORMAL_MODE );
40
41 for ( NodeCursor nodeCursor = getGraph2D().selectedNodes(); nodeCursor.ok(); nodeCursor.next() ) {
42 Node node = nodeCursor.node();
43 NodeRealizer realizer = getGraph2D().getRealizer( node );
44 layouter.setCenter( node, realizer.getCenterX(), realizer.getCenterY() );
45
46 layouter.setInertia( node, 1 );
47 increaseNeighborsHeat( node );
48 }
49 layouter.wakeUp();
50 }
51
52
55 protected void selectionOnMove( double dx, double dy, double x, double y ) {
56 for ( NodeCursor nodeCursor = getGraph2D().selectedNodes(); nodeCursor.ok(); nodeCursor.next() ) {
57 Node node = nodeCursor.node();
58 NodeRealizer realizer = getGraph2D().getRealizer( node );
59 layouter.setCenter( node, realizer.getCenterX(), realizer.getCenterY() );
60 increaseNeighborsHeat( node );
61 }
62 layouter.wakeUp();
63 }
64
65
69 protected void selectionMovedAction( double dx, double dy, double x, double y ) {
70 for ( NodeCursor nodeCursor = getGraph2D().selectedNodes(); nodeCursor.ok(); nodeCursor.next() ) {
71 Node node = nodeCursor.node();
72 NodeRealizer realizer = getGraph2D().getRealizer( node );
73 layouter.setCenter( node, realizer.getCenterX(), realizer.getCenterY() );
74
75 layouter.setInertia( node, 0 );
76 increaseNeighborsHeat( node );
77 }
78 layouter.wakeUp();
79 }
80
81
85 protected void increaseNeighborsHeat( Node originalNode ) {
86 for ( NodeCursor cursor = originalNode.neighbors(); cursor.ok(); cursor.next() ) {
88 Node neighbor = cursor.node();
89
90 double oldStress = layouter.getStress( neighbor );
91 layouter.setStress( neighbor, Math.min( 1, oldStress + 0.5 ) );
92 }
93 }
94 }
95