1
28 package demo.layout.multipage;
29
30 import y.layout.multipage.MultiPageLayouter;
31 import y.option.ConstraintManager;
32 import y.option.OptionHandler;
33 import y.option.OptionItem;
34
35 import java.beans.PropertyChangeListener;
36
37
40 class MultiPageLayoutOptionHandler extends OptionHandler {
41 private static final String LAYOUT = "Page Layout";
42 static final String LAYOUT_ORGANIC = "Organic";
43 static final String LAYOUT_HIERARCHIC = "Hierarchic";
44 static final String LAYOUT_ORTHOGONAL = "Orthogonal";
45 static final String LAYOUT_COMPACT_ORTHOGONAL = "Compact Orthogonal";
46 static final String LAYOUT_CIRCULAR = "Circular";
47
48 private static final String GROUPING = "Grouping";
49 private static final String GROUPING_IGNORE_GROUPS = "Ignore Groups";
50 private static final String GROUPING_ONLY_COMMON_NODES = "Common Nodes Only";
51 private static final String GROUPING_INCLUDE_CONNECTORS = "Include Connectors";
52
53 private static final String SEPARATE_MULTIEDGES = "Separate Multi-edges";
54 private static final String SEPARATE_TYPES = "Separate Types";
55 private static final String SEPARATE_DIRECTION = "Separate Direction";
56
57 private static final String MAXIMUM_WIDTH = "Maximum Width";
58 private static final String MAXIMUM_HEIGHT = "Maximum Height";
59 private static final String SINGLE_PAGE_LAYOUT = "Single Page Layout";
60 private static final String MAXIMAL_DURATION = "Max. Duration (sec)";
61 private static final String DRAW_PAGE = "Draw Page";
62
63
64 static final OptionSet OPTIONS_NETWORK_SMALL_DISPLAY;
65 static final OptionSet OPTIONS_NETWORK_LARGE_DISPLAY;
66 static final OptionSet OPTIONS_CLASS_DIAGRAM_SMALL_DISPLAY;
67 static final OptionSet OPTIONS_CLASS_DIAGRAM_LARGE_DISPLAY;
68 static {
69 {
70 final OptionSet setting = new OptionSet("Network on small display");
71 setting.setLayoutStyle(MultiPageLayoutOptionHandler.LAYOUT_ORGANIC);
72 setting.setMaximumHeight(800);
73 setting.setMaximumWidth(500);
74 OPTIONS_NETWORK_SMALL_DISPLAY = setting;
75 }
76 {
77 final OptionSet setting = new OptionSet("Network on large display");
78 setting.setLayoutStyle(MultiPageLayoutOptionHandler.LAYOUT_ORGANIC);
79 setting.setMaximumHeight(2000);
80 setting.setMaximumWidth(2000);
81 OPTIONS_NETWORK_LARGE_DISPLAY = setting;
82 }
83 {
84 final OptionSet setting = new OptionSet("Class diagram on small display");
85 setting.setLayoutStyle(MultiPageLayoutOptionHandler.LAYOUT_HIERARCHIC);
86 setting.setMaximumHeight(800);
87 setting.setMaximumWidth(500);
88 OPTIONS_CLASS_DIAGRAM_SMALL_DISPLAY = setting;
89 }
90 {
91 final OptionSet setting = new OptionSet("Class diagram on large display");
92 setting.setLayoutStyle(MultiPageLayoutOptionHandler.LAYOUT_HIERARCHIC);
93 setting.setMaximumHeight(2000);
94 setting.setMaximumWidth(2000);
95 OPTIONS_CLASS_DIAGRAM_LARGE_DISPLAY = setting;
96 }
97 }
98
99
100 MultiPageLayoutOptionHandler() {
101 super("Option Table");
102
103 useSection("General");
104 final Object[] layoutStyles = {
105 LAYOUT_HIERARCHIC,
106 LAYOUT_ORGANIC,
107 LAYOUT_COMPACT_ORTHOGONAL,
108 LAYOUT_ORTHOGONAL,
109 LAYOUT_CIRCULAR
110 };
111 addEnum(LAYOUT, layoutStyles, 0);
112 final OptionItem singleLayoutItem = addBool(SINGLE_PAGE_LAYOUT, false);
113 final ConstraintManager cm = new ConstraintManager(this);
114 final ConstraintManager.Condition pageLayoutCondition =
115 cm.createConditionValueEquals(singleLayoutItem, Boolean.FALSE);
116 final Object[] groupingModes = {
117 GROUPING_IGNORE_GROUPS,
118 GROUPING_ONLY_COMMON_NODES,
119 GROUPING_INCLUDE_CONNECTORS
120 };
121 final OptionItem groupStyleItem = addEnum(GROUPING, groupingModes, 2);
122 cm.setEnabledOnCondition(pageLayoutCondition, groupStyleItem);
123
124 final OptionItem maxWidthItem = addInt(MAXIMUM_WIDTH, 600, 200, 4000);
128 cm.setEnabledOnCondition(pageLayoutCondition, maxWidthItem);
129 final OptionItem maxHeightItem = addInt(MAXIMUM_HEIGHT, 600, 200, 4000);
130 cm.setEnabledOnCondition(pageLayoutCondition, maxHeightItem);
131
132 final OptionItem maxDurationItem = addInt(MAXIMAL_DURATION, 30, 5, 5000);
133 cm.setEnabledOnCondition(pageLayoutCondition, maxDurationItem);
134 final OptionItem drawPageItem = addBool(DRAW_PAGE, true);
135 cm.setEnabledOnCondition(pageLayoutCondition, drawPageItem);
136
137 useSection("Connector Representation");
138 final OptionItem separateTypesItem = addBool(SEPARATE_TYPES, false);
139 cm.setEnabledOnCondition(pageLayoutCondition, separateTypesItem);
140 final OptionItem separateDirectionItem = addBool(SEPARATE_DIRECTION, false);
141 cm.setEnabledOnCondition(pageLayoutCondition, separateDirectionItem);
142 final OptionItem separateMultiedgesItem = addBool(SEPARATE_MULTIEDGES, false);
143 cm.setEnabledOnCondition(pageLayoutCondition, separateMultiedgesItem);
144 }
145
146 boolean isLayout(final String layout) {
147 return getString(LAYOUT).equals(layout);
148 }
149
150 int getSeparationMask() {
151 int mask = 0;
152 if (getBool(SEPARATE_TYPES)) {
153 mask = mask | MultiPageLayouter.EDGE_BUNDLE_DISTINGUISH_TYPES;
154 }
155 if (getBool(SEPARATE_DIRECTION)) {
156 mask = mask | MultiPageLayouter.EDGE_BUNDLE_DISTINGUISH_DIRECTIONS;
157 }
158 if (getBool(SEPARATE_MULTIEDGES)) {
159 mask = mask | MultiPageLayouter.EDGE_BUNDLE_DISTINGUISH_MULTIEDGES;
160 }
161 return mask;
162 }
163
164 boolean isDrawingPage() {
165 return getBool(DRAW_PAGE) && !getBool(SINGLE_PAGE_LAYOUT);
166 }
167
168 boolean isUseSinglePageLayout() {
169 return getBool(SINGLE_PAGE_LAYOUT);
170 }
171
172 byte getGroupingMode() {
173 if (getString(GROUPING).equals(GROUPING_IGNORE_GROUPS)) {
174 return MultiPageLayouter.GROUP_MODE_IGNORE;
175 } else if(getString(GROUPING).equals(GROUPING_ONLY_COMMON_NODES)) {
176 return MultiPageLayouter.GROUP_MODE_ORIGINAL_NODES_ONLY;
177 } else {
178 return MultiPageLayouter.GROUP_MODE_ALL_NODES;
179 }
180 }
181
182 long getMaximalDuration() {
183 return getInt(MAXIMAL_DURATION);
184 }
185
186 int getMaximumWidth() {
187 return getInt(MAXIMUM_WIDTH);
188 }
189
190 int getMaximumHeight() {
191 return getInt(MAXIMUM_HEIGHT);
192 }
193
194 void addDrawPageChangeListener( final PropertyChangeListener pcl ) {
195 final String property = OptionItem.PROPERTY_VALUE;
196 getItem(DRAW_PAGE).addPropertyChangeListener(property, pcl);
197 getItem(MAXIMUM_WIDTH).addPropertyChangeListener(property, pcl);
198 getItem(MAXIMUM_HEIGHT).addPropertyChangeListener(property, pcl);
199 getItem(SINGLE_PAGE_LAYOUT).addPropertyChangeListener(property, pcl);
200 }
201
202
203
207 static final class OptionSet {
208 private final String name;
209 private String layoutStyle;
210 private int maximumWidth;
211 private int maximumHeight;
212
213 private OptionSet( final String name ) {
214 this.name = name;
215 layoutStyle = MultiPageLayoutOptionHandler.LAYOUT_HIERARCHIC;
216 maximumWidth = 1000;
217 maximumHeight = 1000;
218 }
219
220 private void setLayoutStyle( final String layoutStyle ) {
221 this.layoutStyle = layoutStyle;
222 }
223
224 private void setMaximumHeight( final int maximumHeight ) {
225 this.maximumHeight = maximumHeight;
226 }
227
228 private void setMaximumWidth( final int maximumWidth ) {
229 this.maximumWidth = maximumWidth;
230 }
231
232 void apply( final MultiPageLayoutOptionHandler oh ) {
233 oh.set(MultiPageLayoutOptionHandler.LAYOUT, layoutStyle);
234 oh.set(MultiPageLayoutOptionHandler.SINGLE_PAGE_LAYOUT, Boolean.FALSE);
235 oh.set(MultiPageLayoutOptionHandler.GROUPING, MultiPageLayoutOptionHandler.GROUPING_INCLUDE_CONNECTORS);
236 oh.set(MultiPageLayoutOptionHandler.MAXIMUM_WIDTH, new Integer(maximumWidth));
237 oh.set(MultiPageLayoutOptionHandler.MAXIMUM_HEIGHT, new Integer(maximumHeight));
238 oh.set(MultiPageLayoutOptionHandler.MAXIMAL_DURATION, new Integer(30));
239 oh.set(MultiPageLayoutOptionHandler.DRAW_PAGE, Boolean.TRUE);
240 oh.set(MultiPageLayoutOptionHandler.SEPARATE_TYPES, Boolean.FALSE);
241 oh.set(MultiPageLayoutOptionHandler.SEPARATE_DIRECTION, Boolean.FALSE);
242 oh.set(MultiPageLayoutOptionHandler.SEPARATE_MULTIEDGES, Boolean.FALSE);
243 }
244
245 String getName() {
246 return name;
247 }
248 }
249 }
250