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.view.uml;
29  
30  import y.geom.OrientedRectangle;
31  import y.view.NodeLabel;
32  import y.view.YLabel;
33  
34  import java.awt.Graphics2D;
35  import java.util.Map;
36  
37  /**
38   * Decorates a label painter to prevent selection box painting.
39   */
40  class UmlClassLabelPainter implements YLabel.Painter {
41    private final YLabel.Painter painter;
42  
43    public UmlClassLabelPainter() {
44      this(defaultPainter());
45    }
46  
47    public UmlClassLabelPainter(final YLabel.Painter painter) {
48      this.painter = painter;
49    }
50  
51    public void paint(final YLabel label, final Graphics2D gfx) {
52      if (painter != null) {
53        painter.paint(label, gfx);
54      }
55    }
56  
57    public void paintContent(
58        final YLabel label,
59        final Graphics2D gfx,
60        final double x,
61        final double y,
62        final double width,
63        final double height
64    ) {
65      if (painter != null) {
66        painter.paintContent(label, gfx, x, y, width, height);
67      }
68    }
69  
70    public void paintBox(
71        final YLabel label,
72        final Graphics2D gfx,
73        final double x,
74        final double y,
75        final double width,
76        final double height
77    ) {
78      // Do not draw the selection box.
79    }
80  
81    public OrientedRectangle getTextBox(final YLabel label) {
82      if (painter != null) {
83        return painter.getTextBox(label);
84      } else {
85        return null;
86      }
87    }
88  
89    public OrientedRectangle getIconBox(final YLabel label) {
90      if (painter != null) {
91        return painter.getIconBox(label);
92      } else {
93        return null;
94      }
95    }
96  
97    static YLabel.Painter defaultPainter() {
98      final YLabel.Factory factory = NodeLabel.getFactory();
99      final Map configuration = factory.createDefaultConfigurationMap();
100     final Object painter = configuration.get(YLabel.Painter.class);
101     if (painter instanceof YLabel.Painter) {
102       return (YLabel.Painter) painter;
103     } else {
104       return null;
105     }
106   }
107 }
108