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