1
28 package demo.layout.partial;
29
30 import y.layout.Layouter;
31 import y.layout.organic.SmartOrganicLayouter;
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 OrganicPartialLayoutDemo extends PartialLayoutBase {
59
60 public OrganicPartialLayoutDemo() {
61 this(null);
62 }
63
64 public OrganicPartialLayoutDemo(final String helpFilePath) {
65 super(helpFilePath);
66 }
67
68
71 protected void loadInitialGraph() {
72 loadGraph("resource/graphOrganic.graphml");
73 }
74
75 protected OptionHandler createOptionHandler() {
76 final OptionHandler layoutOptionHandler = new OptionHandler("Option Table");
77
78 layoutOptionHandler.addEnum("Subgraph Layout",
79 new Object[]{"Organic Layout", "Unchanged"}, 0);
80 layoutOptionHandler.addEnum("Component Assignment",
81 new Object[]{"Single Nodes", "Connected Graphs"}, 0);
82 layoutOptionHandler.addEnum("Placement Strategy",
83 new Object[]{"Barycenter", "From Sketch"}, 0);
84 layoutOptionHandler.addEnum("Edge Routing Style",
85 new Object[]{"Automatic", "Straight Line", "Organic"}, 0);
86 layoutOptionHandler.addBool("Snapping", true);
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 switch (optionHandler.getEnum("Subgraph Layout")) {
100 default:
101 case 0:
102 final SmartOrganicLayouter sol = new SmartOrganicLayouter();
103 sol.setMultiThreadingAllowed(true);
104 partialLayouter.setCoreLayouter(sol);
105 break;
106 case 1:
107 }
109 switch (optionHandler.getEnum("Component Assignment")) {
110 default:
111 case 0:
112 partialLayouter.setComponentAssignmentStrategy(PartialLayouter.COMPONENT_ASSIGNMENT_STRATEGY_SINGLE);
113 break;
114 case 1:
115 partialLayouter.setComponentAssignmentStrategy(PartialLayouter.COMPONENT_ASSIGNMENT_STRATEGY_CONNECTED);
116 break;
117 }
118 switch (optionHandler.getEnum("Placement Strategy")) {
119 default:
120 case 0:
121 partialLayouter.setPositioningStrategy(PartialLayouter.SUBGRAPH_POSITIONING_STRATEGY_BARYCENTER);
122 break;
123 case 1:
124 partialLayouter.setPositioningStrategy(PartialLayouter.SUBGRAPH_POSITIONING_STRATEGY_FROM_SKETCH);
125 break;
126 }
127 switch (optionHandler.getEnum("Edge Routing Style")) {
128 default:
129 case 0:
130 partialLayouter.setEdgeRoutingStrategy(PartialLayouter.EDGE_ROUTING_STRATEGY_AUTOMATIC);
131 break;
132 case 1:
133 partialLayouter.setEdgeRoutingStrategy(PartialLayouter.EDGE_ROUTING_STRATEGY_STRAIGHTLINE);
134 break;
135 case 2:
136 partialLayouter.setEdgeRoutingStrategy(PartialLayouter.EDGE_ROUTING_STRATEGY_ORGANIC);
137 break;
138 }
139 partialLayouter.setConsiderNodeAlignment(optionHandler.getBool("Snapping"));
140 partialLayouter.setMirroringAllowed(optionHandler.getBool("Allow Mirroring"));
141 partialLayouter.setMinimalNodeDistance(optionHandler.getInt("Minimum Node Distance"));
142 }
143 partialLayouter.setLayoutOrientation(PartialLayouter.ORIENTATION_AUTO_DETECTION);
144 return partialLayouter;
145 }
146
147
150 public static void main(String[] args) {
151 EventQueue.invokeLater(new Runnable() {
152 public void run() {
153 Locale.setDefault(Locale.ENGLISH);
154 initLnF();
155 (new OrganicPartialLayoutDemo("resource/organiclayouthelp.html"))
156 .start("Organic Partial Layouter Demo");
157 }
158 });
159 }
160
161 }
162