1
28 package demo.layout.radial;
29
30 import demo.view.DemoBase;
31 import y.base.Edge;
32 import y.base.EdgeCursor;
33 import y.base.NodeMap;
34 import y.layout.radial.RadialLayouter;
35 import demo.layout.module.RadialLayoutModule;
36 import y.option.OptionHandler;
37 import y.util.DataProviderAdapter;
38 import y.view.Arrow;
39 import y.view.Bend;
40 import y.view.BendCursor;
41 import y.view.BezierEdgeRealizer;
42 import y.view.EdgeRealizer;
43 import y.view.Graph2D;
44 import y.view.PolyLineEdgeRealizer;
45 import y.view.QuadCurveEdgeRealizer;
46 import y.view.SplineEdgeRealizer;
47
48 import javax.swing.AbstractAction;
49 import javax.swing.AbstractButton;
50 import javax.swing.JComboBox;
51 import javax.swing.JToggleButton;
52 import javax.swing.JToolBar;
53 import java.awt.EventQueue;
54 import java.awt.event.ActionEvent;
55 import java.awt.event.ActionListener;
56 import java.net.URL;
57 import java.util.Locale;
58
59
71 public class RadialLayouterDemo extends DemoBase {
72
73
74 private RadialLayoutModule module;
75
76
77 private NodeMap nodeInfoMap;
78
79
80 private SectorDrawable sectorDrawable;
81
82
83 private EdgeRealizer[] edgeRealizers;
84
85 public RadialLayouterDemo() {
86 loadGraph("resource/radial.graphml");
88 doLayout();
89 }
90
91 protected void initialize() {
92 super.initialize();
93
94 initializeEdgeRealizer();
95
96 nodeInfoMap = view.getGraph2D().createNodeMap();
98 view.getGraph2D().addDataProvider(RadialLayouter.NODE_INFO_DPKEY, nodeInfoMap);
99 sectorDrawable = new SectorDrawable(view, nodeInfoMap);
101 view.addBackgroundDrawable(sectorDrawable);
102 }
103
104 private void initializeEdgeRealizer() {
105 SplineEdgeRealizer splineEdgeRealizer = new SplineEdgeRealizer();
107 splineEdgeRealizer.setArrow(Arrow.DELTA);
108
109 QuadCurveEdgeRealizer quadCurveEdgeRealizer = new QuadCurveEdgeRealizer();
110 quadCurveEdgeRealizer.setArrow(Arrow.DELTA);
111
112 BezierEdgeRealizer bezierEdgeRealizer = new BezierEdgeRealizer();
113 bezierEdgeRealizer.setArrow(Arrow.DELTA);
114
115 PolyLineEdgeRealizer polyLineEdgeRealizer = new PolyLineEdgeRealizer();
116 polyLineEdgeRealizer.setArrow(Arrow.DELTA);
117
118 view.getGraph2D().setDefaultEdgeRealizer(polyLineEdgeRealizer);
119 edgeRealizers = new EdgeRealizer[]{splineEdgeRealizer, quadCurveEdgeRealizer, bezierEdgeRealizer, polyLineEdgeRealizer};
120 }
121
122
125 protected JToolBar createToolBar() {
126 module = new RadialLayoutModule();
127
128 final JToolBar toolBar = super.createToolBar();
129 toolBar.addSeparator();
130 toolBar.add(createActionControl(new AbstractAction(
131 "Layout", SHARED_LAYOUT_ICON) {
132 public void actionPerformed(final ActionEvent e) {
133 doLayout();
134 }
135 }));
136
137 toolBar.addSeparator(TOOLBAR_SMALL_SEPARATOR);
138 toolBar.add(createActionControl(new AbstractAction(
139 "Settings...", getIconResource("resource/properties.png")) {
140 public void actionPerformed(final ActionEvent e) {
141 final OptionHandler settings = module.getOptionHandler();
142 if (settings != null) {
143 final ActionListener listener = new ActionListener() {
144 public void actionPerformed(ActionEvent e) {
145 doLayout();
146 }
147 };
148
149 OptionSupport.showDialog(settings, listener, false, view.getFrame());
150 }
151 }
152 }));
153
154 toolBar.addSeparator();
155 final JToggleButton showCirclesBtn = new JToggleButton(new AbstractAction("Show Circles") {
156 public void actionPerformed(ActionEvent e) {
157 sectorDrawable.setDrawingCircles(((AbstractButton) e.getSource()).isSelected());
158 view.updateView();
159 }
160 });
161 showCirclesBtn.setSelected(sectorDrawable.isDrawingCircles());
162 toolBar.add(showCirclesBtn);
163 toolBar.addSeparator(TOOLBAR_SMALL_SEPARATOR);
164 final JToggleButton showSectorsBtn = new JToggleButton(new AbstractAction("Show Sectors") {
165 public void actionPerformed(ActionEvent e) {
166 sectorDrawable.setDrawingSectors(((AbstractButton) e.getSource()).isSelected());
167 view.updateView();
168 }
169 });
170 showSectorsBtn.setSelected(sectorDrawable.isDrawingSectors());
171 toolBar.add(showSectorsBtn);
172 toolBar.addSeparator();
173
174 final JComboBox comboBox = new JComboBox(new Object[]{"Spline Routing", "Quad Curve Routing", "Bezier Routing", "Polygonal Routing"});
175 comboBox.setMaximumSize(comboBox.getPreferredSize());
176 comboBox.setSelectedIndex(3);
177 comboBox.addActionListener(new ActionListener() {
178 public void actionPerformed(ActionEvent e) {
179 EdgeRealizer selectedRealizer = edgeRealizers[comboBox.getSelectedIndex()];
180 if (view.getGraph2D().getDefaultEdgeRealizer() != selectedRealizer) {
181 view.getGraph2D().setDefaultEdgeRealizer(selectedRealizer);
182 updateEdgeRealizers();
183 }
184 }
185 });
186 toolBar.add(comboBox);
187
188 return toolBar;
189 }
190
191 private void doLayout() {
192 module.start(view.getGraph2D());
193 sectorDrawable.updateSectors();
194 view.fitContent();
195 view.updateView();
196 }
197
198 protected void loadGraph(final URL resource) {
199 super.loadGraph(resource);
200
201 sectorDrawable.updateSectors();
203
204 updateEdgeRealizers();
205 }
206
207
213 private void updateEdgeRealizers() {
214 final Graph2D graph2D = view.getGraph2D();
215
216 for (EdgeCursor ec = graph2D.edges(); ec.ok(); ec.next()) {
217 Edge edge = ec.edge();
218 EdgeRealizer oldRealizer = graph2D.getRealizer(edge);
219 EdgeRealizer newRealizer = graph2D.getDefaultEdgeRealizer().createCopy();
220 for (BendCursor bc = oldRealizer.bends(); bc.ok(); bc.next()) {
221 Bend bend = bc.bend();
222 newRealizer.addPoint(bend.getX(), bend.getY());
223 }
224 graph2D.setRealizer(edge, newRealizer);
225 }
226 view.updateView();
227 }
228
229 public static void main( String[] args ) {
230 EventQueue.invokeLater(new Runnable() {
231 public void run() {
232 Locale.setDefault(Locale.ENGLISH);
233 initLnF();
234 new RadialLayouterDemo().start();
235 }
236 });
237 }
238 }
239