1
28 package demo.layout.partial;
29
30 import y.layout.Layouter;
31 import y.layout.circular.CircularLayouter;
32 import y.layout.partial.PartialLayouter;
33 import y.option.IntOptionItem;
34 import y.option.OptionHandler;
35
36 import java.awt.EventQueue;
37 import java.util.Locale;
38
39
58 public class CircularPartialLayoutDemo extends PartialLayoutBase {
59
60 public CircularPartialLayoutDemo() {
61 this(null);
62 }
63
64 public CircularPartialLayoutDemo(final String helpFilePath) {
65 super(helpFilePath);
66 }
67
68
71 protected void loadInitialGraph() {
72 loadGraph("resource/graphCircular.graphml");
73 }
74
75
76 protected OptionHandler createOptionHandler() {
77 final OptionHandler layoutOptionHandler = new OptionHandler("Option Table");
78
79 layoutOptionHandler.addEnum("Subgraph Layout",
80 new Object[]{"Circular Layout", "Unchanged"}, 0);
81 layoutOptionHandler.addEnum("Component Assignment",
82 new Object[]{"Single Nodes", "Connected Graphs"}, 1);
83 layoutOptionHandler.addEnum("Placement Strategy",
84 new Object[]{"Barycenter", "From Sketch"}, 0);
85 layoutOptionHandler.addEnum("Edge Routing Style",
86 new Object[]{"Automatic", "Straight Line", "Organic"}, 0);
87 layoutOptionHandler.addBool("Allow Mirroring", false);
88 layoutOptionHandler.addInt("Minimum Node Distance", 10);
89 layoutOptionHandler.getItem("Minimum Node Distance").setAttribute(
90 IntOptionItem.ATTRIBUTE_MIN_VALUE, new Integer(0));
91
92 return layoutOptionHandler;
93 }
94
95 protected Layouter createConfiguredPartialLayouter() {
96 final PartialLayouter partialLayouter = new PartialLayouter();
97
98 if (optionHandler != null) {
99 final int minNodeDist = optionHandler.getInt("Minimum Node Distance");
100 partialLayouter.setMinimalNodeDistance(minNodeDist);
101 switch (optionHandler.getEnum("Subgraph Layout")) {
102 default:
103 case 0:
104 CircularLayouter layouter = new CircularLayouter();
105 layouter.getSingleCycleLayouter().setMinimalNodeDistance(minNodeDist);
106 partialLayouter.setCoreLayouter(layouter);
107 break;
108 case 1:
109 }
111 switch (optionHandler.getEnum("Component Assignment")) {
112 default:
113 case 0:
114 partialLayouter.setComponentAssignmentStrategy(PartialLayouter.COMPONENT_ASSIGNMENT_STRATEGY_SINGLE);
115 break;
116 case 1:
117 partialLayouter.setComponentAssignmentStrategy(PartialLayouter.COMPONENT_ASSIGNMENT_STRATEGY_CONNECTED);
118 break;
119 }
120 switch (optionHandler.getEnum("Placement Strategy")) {
121 default:
122 case 0:
123 partialLayouter.setPositioningStrategy(PartialLayouter.SUBGRAPH_POSITIONING_STRATEGY_BARYCENTER);
124 break;
125 case 1:
126 partialLayouter.setPositioningStrategy(PartialLayouter.SUBGRAPH_POSITIONING_STRATEGY_FROM_SKETCH);
127 break;
128 }
129 switch (optionHandler.getEnum("Edge Routing Style")) {
130 default:
131 case 0:
132 partialLayouter.setEdgeRoutingStrategy(PartialLayouter.EDGE_ROUTING_STRATEGY_AUTOMATIC);
133 break;
134 case 1:
135 partialLayouter.setEdgeRoutingStrategy(PartialLayouter.EDGE_ROUTING_STRATEGY_STRAIGHTLINE);
136 break;
137 case 2:
138 partialLayouter.setEdgeRoutingStrategy(PartialLayouter.EDGE_ROUTING_STRATEGY_ORGANIC);
139 break;
140 }
141 partialLayouter.setMirroringAllowed(optionHandler.getBool("Allow Mirroring"));
142 }
143 return partialLayouter;
144 }
145
146
149 public static void main(String[] args) {
150 EventQueue.invokeLater(new Runnable() {
151 public void run() {
152 Locale.setDefault(Locale.ENGLISH);
153 initLnF();
154 (new CircularPartialLayoutDemo("resource/circularlayouthelp.html"))
155 .start("Circular Partial Layouter Demo");
156 }
157 });
158 }
159 }
160