1
28 package demo.layout.labeling;
29
30 import y.base.Edge;
31 import y.base.EdgeList;
32 import y.layout.LabelLayoutConstants;
33 import y.layout.PreferredPlacementDescriptor;
34 import y.option.MappedListCellRenderer;
35 import y.option.OptionHandler;
36 import y.view.EdgeLabel;
37 import y.view.Graph2D;
38 import y.view.View;
39
40 import java.util.LinkedHashMap;
41 import java.util.Map;
42
43
46 public class EdgeLabelPropertyHandler extends OptionHandler {
47 private static final String TEXT = "Text";
48 private static final String EDGE_LABEL_PROPERTIES = "Edge Label Properties";
49 private static final String PREFERRED_PLACEMENT = "Preferred Placement";
50
51 private EdgeLabel label;
52 private View view;
53
54 public EdgeLabelPropertyHandler(EdgeLabel label, View view) {
55 super(EDGE_LABEL_PROPERTIES);
56 setOptionsIOHandler(null);
57 this.label = label;
58 this.view = view;
59
60 addString(TEXT, label.getText(), 2);
61
62 final Map preferredPlacementMap = preferredPlacementsToStringMap();
63 addEnum(PREFERRED_PLACEMENT, preferredPlacementMap.keySet().toArray(),
64 new Byte(label.getPreferredPlacementDescriptor().getPlaceAlongEdge()), new MappedListCellRenderer(preferredPlacementMap));
65 }
66
67 public void commitValues() {
68 super.commitValues();
69
70 Edge e = label.getOwner().getEdge();
71 if(e != null) {
72 final Graph2D graph = (Graph2D) e.getGraph();
73 graph.backupRealizers(new EdgeList(e).edges());
74 }
75
76 label.setText(getString(TEXT));
77
78 final byte placement = ((Byte) get(PREFERRED_PLACEMENT)).byteValue();
79 final PreferredPlacementDescriptor oldDescriptor =
80 label.getPreferredPlacementDescriptor();
81 if (oldDescriptor.getPlaceAlongEdge() != placement) {
82 final PreferredPlacementDescriptor newDescriptor =
83 new PreferredPlacementDescriptor(oldDescriptor);
84 newDescriptor.setPlaceAlongEdge(placement);
85 label.setPreferredPlacementDescriptor(newDescriptor);
86 }
87
88 view.getGraph2D().updateViews();
89 }
90
91
94 private static Map preferredPlacementsToStringMap()
95 {
96 Map result = new LinkedHashMap(6);
97 result.put(new Byte(LabelLayoutConstants.PLACE_AT_TARGET),"At Target");
98 result.put(new Byte(LabelLayoutConstants.PLACE_AT_SOURCE),"At Source");
99 result.put(new Byte(LabelLayoutConstants.PLACE_AT_CENTER),"At Center");
100 result.put(new Byte(LabelLayoutConstants.PLACE_AT_TARGET_PORT),"At Target Port");
101 result.put(new Byte(LabelLayoutConstants.PLACE_AT_SOURCE_PORT),"At Source Port");
102 result.put(new Byte(LabelLayoutConstants.PLACE_ANYWHERE), "Anywhere");
103 return result;
104 }
105 }
106