1
14 package demo.view.viewmode;
15
16 import demo.view.DemoBase;
17 import y.base.Edge;
18 import y.base.Node;
19 import y.view.CreateEdgeMode;
20 import y.view.EditMode;
21 import y.view.HitInfo;
22
23 import javax.swing.JOptionPane;
24 import java.awt.Color;
25
26
34 public class CreateEdgeModeDemo extends DemoBase {
35 boolean showMessage = true;
38
39 protected void registerViewModes() {
40 EditMode editMode = new EditMode();
41 view.addViewMode( editMode );
42 editMode.setCreateEdgeMode( new DemoCreateEdgeMode() );
44 }
45
46
47 class DemoCreateEdgeMode extends CreateEdgeMode {
48
49 public void edgeMoved( double x, double y ) {
50 super.edgeMoved( x, y );
51 updateDummy( x, y );
52 }
53
54 public void edgeCreated( Edge e ) {
55 getGraph2D().getRealizer( e ).setLineColor( getGraph2D().getDefaultEdgeRealizer().getLineColor() );
56 }
57
58 private void updateDummy( double x, double y ) {
59 Node hitNode = (new HitInfo(view, x, y, true, HitInfo.NODE)).getHitNode();
60 if ( hitNode != null ) {
61 if ( acceptTargetNode( hitNode, x, y ) ) {
62 getDummyEdgeRealizer().setLineColor( Color.green );
63 } else {
64 getDummyEdgeRealizer().setLineColor( Color.red );
65 }
66 } else {
67 getDummyEdgeRealizer().setLineColor( getGraph2D().getDefaultEdgeRealizer().getLineColor() );
68 }
69 }
70
71 protected boolean acceptSourceNode( Node source, double x, double y ) {
72 try {
73 return Integer.parseInt( getGraph2D().getLabelText( source ) ) % 2 == 0;
74 } catch ( Exception ex ) {
75 return true;
76 }
77 }
78
79 protected void sourceNodeDeclined( Node source, double x, double y ) {
80 if ( showMessage ) {
81 cancelEdgeCreation();
82 JOptionPane.showMessageDialog( this.view,
83 "Only start nodes with even numbers allowed!",
84 "Forbidden!",
85 JOptionPane.ERROR_MESSAGE );
86 }
87 }
88
89 protected boolean acceptTargetNode( Node target, double x, double y ) {
90 try {
91 return Integer.parseInt( getGraph2D().getLabelText( target ) ) % 2 != 0;
92 } catch ( Exception ex ) {
93 return true;
94 }
95 }
96
97 protected void targetNodeDeclined( Node target, double x, double y ) {
98 if ( showMessage ) {
99 cancelEdgeCreation();
100 JOptionPane.showMessageDialog( this.view,
101 "Only end nodes with uneven numbers allowed!",
102 "Forbidden!",
103 JOptionPane.ERROR_MESSAGE );
104
105 }
106 }
107 }
108
109 public static void main( String args[] ) {
110 CreateEdgeModeDemo demo = new CreateEdgeModeDemo();
111 demo.start( "Create Edge Mode Demo" );
112 }
113 }
114
115
116
117