1   /****************************************************************************
2    * This demo file is part of yFiles for Java 2.14.
3    * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28,
4    * 72070 Tuebingen, Germany. All rights reserved.
5    * 
6    * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution
7    * of demo files in source code or binary form, with or without
8    * modification, is not permitted.
9    * 
10   * Owners of a valid software license for a yFiles for Java version that this
11   * demo is shipped with are allowed to use the demo source code as basis
12   * for their own yFiles for Java powered applications. Use of such programs is
13   * governed by the rights and conditions as set out in the yFiles for Java
14   * license agreement.
15   * 
16   * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED
17   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
19   * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21   * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22   * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23   * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26   *
27   ***************************************************************************/
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  /**
44   * A simple OptionHandler that is used by the generic edge labeling demo.
45   */
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    /**
92     * Creates a map that maps the preferred placement constants to strings.
93     */
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