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