1
14 package demo.view.layout.tree;
15
16 import java.awt.Dimension;
17 import java.awt.event.ItemEvent;
18 import java.util.Hashtable;
19 import javax.swing.JLabel;
20 import javax.swing.event.ChangeEvent;
21 import y.base.Node;
22 import y.layout.DefaultLayoutGraph;
23 import y.layout.tree.DefaultNodePlacer;
24 import y.layout.tree.GenericTreeLayouter;
25 import y.layout.tree.NodePlacer;
26 import y.util.DataProviders;
27
28
34 class DefaultNodePlacerConfigPanel extends javax.swing.JPanel
35 {
36
37 private DefaultNodePlacer placer;
38
39
40 public DefaultNodePlacerConfigPanel()
41 {
42 initComponents();
43 DefaultLayoutGraph graph = new DefaultLayoutGraph();
44 Node root = graph.createNode();
45 graph.getNodeLayout(root).setSize(30,30);
46 for (int i = 0; i < 3; i++){
47 Node child = graph.createNode();
48 graph.getNodeLayout(child).setSize(50 - i * 10 ,30);
49 graph.createEdge(root, child);
50 }
51 placer = new DefaultNodePlacer(DefaultNodePlacer.PLACEMENT_HORIZONTAL_DOWNWARD, 40, 40);
52 layoutPreviewPanel.setGraph(graph);
53 layoutPreviewPanel.setPreferredSize(new Dimension(160,160));
54 graph.addDataProvider(GenericTreeLayouter.NODE_PLACER_DPKEY, DataProviders.createConstantDataProvider(placer));
55 layoutPreviewPanel.setLayouter(new GenericTreeLayouter());
56 updateFromPlacer();
57 layoutPreviewPanel.update();
58 }
59
60
65 private void initComponents() {
67 java.awt.GridBagConstraints gridBagConstraints;
68
69 childPlacementLabel = new javax.swing.JLabel();
70 rootAlignmentLabel = new javax.swing.JLabel();
71 alignmentSlider = new javax.swing.JSlider();
72 horizontalSlider = new javax.swing.JSlider();
73 hSpacingLabel = new javax.swing.JLabel();
74 placementComboBox = new javax.swing.JComboBox();
75 verticalSlider = new javax.swing.JSlider();
76 vSpacingLabel = new javax.swing.JLabel();
77 previewPanel = new javax.swing.JPanel();
78 layoutPreviewPanel = new demo.layout.LayoutPreviewPanel();
79 routingStyleLabel = new javax.swing.JLabel();
80 routingStyleComboBox = new javax.swing.JComboBox();
81
82 setLayout(new java.awt.GridBagLayout());
83
84 setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(6, 6, 6, 6)));
85 childPlacementLabel.setText("Child Placement");
86 gridBagConstraints = new java.awt.GridBagConstraints();
87 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
88 add(childPlacementLabel, gridBagConstraints);
89
90 rootAlignmentLabel.setText("Root Alignment");
91 gridBagConstraints = new java.awt.GridBagConstraints();
92 gridBagConstraints.gridx = 0;
93 gridBagConstraints.gridy = 8;
94 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
95 gridBagConstraints.insets = new java.awt.Insets(7, 0, 0, 0);
96 add(rootAlignmentLabel, gridBagConstraints);
97
98 alignmentSlider.setMaximum(5);
99 alignmentSlider.setMinorTickSpacing(1);
100 alignmentSlider.setPaintLabels(true);
101 alignmentSlider.setPaintTicks(true);
102 alignmentSlider.setSnapToTicks(true);
103 Hashtable labelTable = new Hashtable();
105 labelTable.put( new Integer( 0 ), new JLabel("Leading") );
106 labelTable.put( new Integer( 3 ), new JLabel("Median") );
107 labelTable.put( new Integer( 5 ), new JLabel("Trailing") );
108 alignmentSlider.setLabelTable( labelTable );
109 alignmentSlider.addChangeListener(new javax.swing.event.ChangeListener()
110 {
111 public void stateChanged(javax.swing.event.ChangeEvent evt)
112 {
113 alignmentSliderStateChanged(evt);
114 }
115 });
116
117 gridBagConstraints = new java.awt.GridBagConstraints();
118 gridBagConstraints.gridx = 0;
119 gridBagConstraints.gridy = 9;
120 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
121 add(alignmentSlider, gridBagConstraints);
122
123 horizontalSlider.setMinorTickSpacing(5);
124 horizontalSlider.setPaintTicks(true);
125 horizontalSlider.addChangeListener(new javax.swing.event.ChangeListener()
126 {
127 public void stateChanged(javax.swing.event.ChangeEvent evt)
128 {
129 horizontalSliderStateChanged(evt);
130 }
131 });
132
133 gridBagConstraints = new java.awt.GridBagConstraints();
134 gridBagConstraints.gridx = 0;
135 gridBagConstraints.gridy = 5;
136 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
137 add(horizontalSlider, gridBagConstraints);
138
139 hSpacingLabel.setText("Horizontal Spacing");
140 gridBagConstraints = new java.awt.GridBagConstraints();
141 gridBagConstraints.gridx = 0;
142 gridBagConstraints.gridy = 4;
143 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
144 gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 0);
145 add(hSpacingLabel, gridBagConstraints);
146
147 placementComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Horizontally Downwards", "Horizontally Upwards", "Vertically to Left", "Vertically to Right" }));
148 placementComboBox.addItemListener(new java.awt.event.ItemListener()
149 {
150 public void itemStateChanged(java.awt.event.ItemEvent evt)
151 {
152 placementComboBoxItemStateChanged(evt);
153 }
154 });
155
156 gridBagConstraints = new java.awt.GridBagConstraints();
157 gridBagConstraints.gridx = 0;
158 gridBagConstraints.gridy = 1;
159 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
160 gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
161 add(placementComboBox, gridBagConstraints);
162
163 verticalSlider.setMinorTickSpacing(5);
164 verticalSlider.setPaintTicks(true);
165 verticalSlider.addChangeListener(new javax.swing.event.ChangeListener()
166 {
167 public void stateChanged(javax.swing.event.ChangeEvent evt)
168 {
169 verticalSliderStateChanged(evt);
170 }
171 });
172
173 gridBagConstraints = new java.awt.GridBagConstraints();
174 gridBagConstraints.gridx = 0;
175 gridBagConstraints.gridy = 7;
176 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
177 add(verticalSlider, gridBagConstraints);
178
179 vSpacingLabel.setText("Vertical Spacing");
180 gridBagConstraints = new java.awt.GridBagConstraints();
181 gridBagConstraints.gridx = 0;
182 gridBagConstraints.gridy = 6;
183 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
184 gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 0);
185 add(vSpacingLabel, gridBagConstraints);
186
187 previewPanel.setLayout(new java.awt.BorderLayout());
188
189 previewPanel.setBorder(new javax.swing.border.TitledBorder("Preview"));
190 layoutPreviewPanel.setBackground(new java.awt.Color(255, 255, 255));
191 previewPanel.add(layoutPreviewPanel, java.awt.BorderLayout.CENTER);
192
193 gridBagConstraints = new java.awt.GridBagConstraints();
194 gridBagConstraints.gridx = 0;
195 gridBagConstraints.gridy = 10;
196 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
197 gridBagConstraints.weightx = 1.0;
198 gridBagConstraints.weighty = 1.0;
199 add(previewPanel, gridBagConstraints);
200
201 routingStyleLabel.setText("Routing Style");
202 gridBagConstraints = new java.awt.GridBagConstraints();
203 gridBagConstraints.gridx = 0;
204 gridBagConstraints.gridy = 2;
205 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
206 gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 0);
207 add(routingStyleLabel, gridBagConstraints);
208
209 routingStyleComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Fork", "Fork at Root", "Straight Connect", "Poly Line Connect" }));
210 routingStyleComboBox.addItemListener(new java.awt.event.ItemListener()
211 {
212 public void itemStateChanged(java.awt.event.ItemEvent evt)
213 {
214 routingStyleComboBoxItemStateChanged(evt);
215 }
216 });
217
218 gridBagConstraints = new java.awt.GridBagConstraints();
219 gridBagConstraints.gridx = 0;
220 gridBagConstraints.gridy = 3;
221 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
222 gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 5);
223 add(routingStyleComboBox, gridBagConstraints);
224
225 }
227 private void routingStyleComboBoxItemStateChanged(java.awt.event.ItemEvent evt) { if (evt.getStateChange() == ItemEvent.SELECTED){
230 switch (routingStyleComboBox.getSelectedIndex()){
231 case 0:
232 placer.setRoutingStyle(DefaultNodePlacer.ROUTING_FORK);
233 break;
234 case 1:
235 placer.setRoutingStyle(DefaultNodePlacer.ROUTING_FORK_AT_ROOT);
236 break;
237 case 2:
238 placer.setRoutingStyle(DefaultNodePlacer.ROUTING_STRAIGHT);
239 break;
240 case 3:
241 placer.setRoutingStyle(DefaultNodePlacer.ROUTING_POLY_LINE);
242 break;
243 }
244 layoutPreviewPanel.update();
245 fireChangeListenerStateChanged(new ChangeEvent(this));
246 }
247 }
249 private void verticalSliderStateChanged(javax.swing.event.ChangeEvent evt) { placer.setVerticalDistance(verticalSlider.getValue());
252 layoutPreviewPanel.update();
253 fireChangeListenerStateChanged(new ChangeEvent(this));
254 }
256 private void horizontalSliderStateChanged(javax.swing.event.ChangeEvent evt) { placer.setHorizontalDistance(horizontalSlider.getValue());
259 layoutPreviewPanel.update();
260 fireChangeListenerStateChanged(new ChangeEvent(this));
261 }
263 private void alignmentSliderStateChanged(javax.swing.event.ChangeEvent evt) { placer.setRootAlignment((byte) alignmentSlider.getValue());
266 layoutPreviewPanel.update();
267 fireChangeListenerStateChanged(new ChangeEvent(this));
268 }
270 private void placementComboBoxItemStateChanged(java.awt.event.ItemEvent evt) { if (evt.getStateChange() == ItemEvent.SELECTED){
273 switch (placementComboBox.getSelectedIndex()){
274 case 0:
275 placer.setChildPlacement(DefaultNodePlacer.PLACEMENT_HORIZONTAL_DOWNWARD);
276 break;
277 case 1:
278 placer.setChildPlacement(DefaultNodePlacer.PLACEMENT_HORIZONTAL_UPWARD);
279 break;
280 case 2:
281 placer.setChildPlacement(DefaultNodePlacer.PLACEMENT_VERTICAL_TO_LEFT);
282 break;
283 case 3:
284 placer.setChildPlacement(DefaultNodePlacer.PLACEMENT_VERTICAL_TO_RIGHT);
285 break;
286 }
287 layoutPreviewPanel.update();
288 fireChangeListenerStateChanged(new ChangeEvent(this));
289 }
290 }
292 public void updateFromPlacer(){
293 switch (placer.getChildPlacement()){
294 case DefaultNodePlacer.PLACEMENT_HORIZONTAL_DOWNWARD:
295 placementComboBox.setSelectedIndex(0);
296 break;
297 case DefaultNodePlacer.PLACEMENT_HORIZONTAL_UPWARD:
298 placementComboBox.setSelectedIndex(1);
299 break;
300 case DefaultNodePlacer.PLACEMENT_VERTICAL_TO_LEFT:
301 placementComboBox.setSelectedIndex(2);
302 break;
303 case DefaultNodePlacer.PLACEMENT_VERTICAL_TO_RIGHT:
304 placementComboBox.setSelectedIndex(3);
305 break;
306 }
307 switch (placer.getRoutingStyle()){
308 case DefaultNodePlacer.ROUTING_FORK:
309 routingStyleComboBox.setSelectedIndex(0);
310 break;
311 case DefaultNodePlacer.ROUTING_FORK_AT_ROOT:
312 routingStyleComboBox.setSelectedIndex(1);
313 break;
314 case DefaultNodePlacer.ROUTING_STRAIGHT:
315 routingStyleComboBox.setSelectedIndex(2);
316 break;
317 case DefaultNodePlacer.ROUTING_POLY_LINE:
318 routingStyleComboBox.setSelectedIndex(3);
319 break;
320 }
321 alignmentSlider.setValue(placer.getRootAlignment());
322 horizontalSlider.setValue((int)placer.getHorizontalDistance());
323 verticalSlider.setValue((int)placer.getVerticalDistance());
324 }
325
326 public void adoptPlacerValues(NodePlacer fromPlacer){
327 if (fromPlacer instanceof DefaultNodePlacer){
328 DefaultNodePlacer p = (DefaultNodePlacer) fromPlacer;
329 this.placer.setRoutingStyle(p.getRoutingStyle());
330 this.placer.setChildPlacement(p.getChildPlacement());
331 this.placer.setVerticalDistance(p.getVerticalDistance());
332 this.placer.setHorizontalDistance(p.getHorizontalDistance());
333 this.placer.setRootAlignment(p.getRootAlignment());
334 updateFromPlacer();
335 }
336 }
337
338 public NodePlacer createPlacerCopy(){
339 return (NodePlacer) placer.clone();
340 }
341
342
346 public synchronized void addChangeListener(javax.swing.event.ChangeListener listener)
347 {
348 if (changeListenerList == null )
349 {
350 changeListenerList = new java.util.ArrayList();
351 }
352 changeListenerList.add(listener);
353 }
354
355
359 public synchronized void removeChangeListener(javax.swing.event.ChangeListener listener)
360 {
361 if (changeListenerList != null )
362 {
363 changeListenerList.remove(listener);
364 }
365 }
366
367
372 private void fireChangeListenerStateChanged(javax.swing.event.ChangeEvent event)
373 {
374 java.util.ArrayList list;
375 synchronized (this)
376 {
377 if (changeListenerList == null) return;
378 list = (java.util.ArrayList)changeListenerList.clone();
379 }
380 for (int i = 0; i < list.size(); i++)
381 {
382 ((javax.swing.event.ChangeListener)list.get(i)).stateChanged(event);
383 }
384 }
385
386 private javax.swing.JSlider alignmentSlider;
388 private javax.swing.JLabel childPlacementLabel;
389 private javax.swing.JLabel hSpacingLabel;
390 private javax.swing.JSlider horizontalSlider;
391 private demo.layout.LayoutPreviewPanel layoutPreviewPanel;
392 private javax.swing.JComboBox placementComboBox;
393 private javax.swing.JPanel previewPanel;
394 private javax.swing.JLabel rootAlignmentLabel;
395 private javax.swing.JComboBox routingStyleComboBox;
396 private javax.swing.JLabel routingStyleLabel;
397 private javax.swing.JLabel vSpacingLabel;
398 private javax.swing.JSlider verticalSlider;
399
401
404 private transient java.util.ArrayList changeListenerList;
405
406 }
407