1
28 package demo.view.viewmode;
29
30 import demo.view.DemoBase;
31 import y.base.Node;
32 import y.geom.YPoint;
33 import y.view.CreateEdgeMode;
34 import y.view.Drawable;
35 import y.view.EditMode;
36 import y.view.MoveSelectionMode;
37 import y.view.SnapLine;
38 import y.view.Graph2DView;
39 import y.view.MoveSnapContext;
40
41 import javax.swing.BorderFactory;
42 import javax.swing.JSlider;
43 import javax.swing.JToggleButton;
44 import javax.swing.JToolBar;
45 import javax.swing.SwingConstants;
46 import javax.swing.event.ChangeEvent;
47 import javax.swing.event.ChangeListener;
48 import java.awt.Color;
49 import java.awt.Dimension;
50 import java.awt.Graphics2D;
51 import java.awt.Rectangle;
52 import java.awt.EventQueue;
53 import java.util.Locale;
54
55
68 public class SnapLineDemo extends DemoBase {
69
70 private EditMode editMode;
71 private JToggleButton snapLineButton;
72 private JToggleButton showGridButton;
73 private SnappingConfiguration snappingConfiguration;
74
75
79 private SnapLine snapLine;
80
81 public SnapLineDemo() {
82 snappingConfiguration = createDefaultSnappingConfiguration();
84 snappingConfiguration.configureView(view);
85 snappingConfiguration.configureEditMode(editMode);
86
87 setUsingSnapping(true);
88
89 final Node n1 = view.getGraph2D().createNode(40, 30, "1");
90 final Node n2 = view.getGraph2D().createNode(40, 90, "2");
91 final Node n3 = view.getGraph2D().createNode(40, 210,"3");
92 view.getGraph2D().createEdge(n1, n2);
93 view.getGraph2D().createEdge(n2, n3);
94 view.updateWorldRect();
95 }
96
97 protected void initialize() {
98 super.initialize();
99
100 snapLine = new SnapLine(SnapLine.VERTICAL, SnapLine.CENTER, new YPoint(200, 200), 0, 400, null, 1.0d);
101 view.getGraph2D().addDrawable(new Drawable() {
102 public void paint(Graphics2D g) {
103 g.setColor(Color.red);
104 snapLine.paint(g);
105 }
106
107 public Rectangle getBounds() {
108 return snapLine.getBounds();
109 }
110 });
111 }
112
113
114 protected JToolBar createToolBar() {
115 JToolBar toolBar = super.createToolBar();
116 toolBar.addSeparator(TOOLBAR_SMALL_SEPARATOR);
117
118 snapLineButton = new JToggleButton("Snapping");
119 snapLineButton.setIcon(getIconResource("resource/mode_snapping.png"));
120 toolBar.add(snapLineButton);
121 toolBar.addSeparator(TOOLBAR_SMALL_SEPARATOR);
122
123 showGridButton = new JToggleButton("Grid");
124 showGridButton.setIcon(getIconResource("resource/mode_grid.png"));
125 toolBar.add(showGridButton);
126
127 final JSlider s1 = new JSlider(SwingConstants.HORIZONTAL, 0, 80, 30);
128 s1.setBorder(BorderFactory.createTitledBorder("Node To Node"));
129 s1.setMaximumSize(new Dimension(200, 100));
130 toolBar.add(s1);
131 final JSlider s2 = new JSlider(SwingConstants.HORIZONTAL, 0, 80, 20);
132 s2.setBorder(BorderFactory.createTitledBorder("Node To Edge"));
133 s2.setMaximumSize(new Dimension(200, 100));
134 toolBar.add(s2);
135 final JSlider s3 = new JSlider(SwingConstants.HORIZONTAL, 0, 80, 20);
136 s3.setBorder(BorderFactory.createTitledBorder("Edge To Edge"));
137 s3.setMaximumSize(new Dimension(200, 100));
138 toolBar.add(s3);
139 final ChangeListener listener = new ChangeListener() {
140 public void stateChanged(ChangeEvent e) {
141 snappingConfiguration.setSnappingEnabled(snapLineButton.isSelected());
142 snappingConfiguration.setRemovingInnerBends(snapLineButton.isSelected());
143 snappingConfiguration.setNodeToNodeDistance(s1.getValue());
144 snappingConfiguration.setNodeToEdgeDistance(s2.getValue());
145 snappingConfiguration.setEdgeToEdgeDistance(s3.getValue());
146 snappingConfiguration.setGridSnappingEnabled(showGridButton.isSelected());
147
148 snappingConfiguration.configureView(view);
149 snappingConfiguration.configureEditMode(editMode);
150 }
151 };
152 s1.addChangeListener(listener);
153 s2.addChangeListener(listener);
154 s3.addChangeListener(listener);
155 snapLineButton.addChangeListener(listener);
156 showGridButton.addChangeListener(listener);
157
158 return toolBar;
159 }
160
161 protected EditMode createEditMode() {
162 editMode = super.createEditMode();
163 ((MoveSelectionMode) editMode.getMoveSelectionMode()).getSnapContext().addSnapLine(snapLine);
164
165 editMode.setOrthogonalEdgeRouting(true);
167 ((CreateEdgeMode)editMode.getCreateEdgeMode()).setOrthogonalEdgeCreation(true);
168
169 return editMode;
170 }
171
172 public boolean isUsingSnapping() {
173 return snapLineButton.isSelected();
174 }
175
176 public void setUsingSnapping(boolean usingSnapping) {
177 this.snapLineButton.setSelected(usingSnapping);
178 }
179
180 public static void main(String[] args) {
181 EventQueue.invokeLater(new Runnable() {
182 public void run() {
183 Locale.setDefault(Locale.ENGLISH);
184 initLnF();
185 (new SnapLineDemo()).start("SnapLine Demo");
186 }
187 });
188 }
189 }
190