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