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.rendering;
29  
30  import demo.view.DemoBase;
31  import demo.view.DemoDefaults;
32  
33  import y.view.Drawable;
34  import y.view.Graph2D;
35  
36  import java.awt.Color;
37  import java.awt.Graphics2D;
38  import java.awt.Rectangle;
39  import java.awt.EventQueue;
40  import java.util.Locale;
41  
42  /**
43   * This demo shows how to add objects of type {@link Drawable} to 
44   * a {@link y.view.Graph2DView} and how to implement such a
45   * <code>Drawable</code> object.
46   * <code>Drawable</code>s represent graphical objects that can be displayed 
47   * by a <code>Graph2DView</code>. The main purpose of <code>Drawable</code>s is
48   * to highlight certain regions of the displayed graph.
49   * <br>
50   * The <code>Drawable</code> implemented in this demo draws itself as a box 
51   * drawn underneath the displayed graph. The size and location of the box changes 
52   * dynamically as the bounding box of the graph changes.
53   * @see <a href="http://docs.yworks.com/yfiles/doc/api/index.html#/dguide/mvc_view#drawables" target="_blank">Section View Implementations</a> in the yFiles for Java Developer's Guide
54   */
55  public class DrawablesDemo extends DemoBase {
56    public DrawablesDemo() {
57      //add the drawable
58      view.addBackgroundDrawable( new BoundingBox() );
59      
60      createInitialGraph();
61      view.fitContent();
62    }
63  
64    protected void createInitialGraph() {
65      Graph2D graph = view.getGraph2D();
66      graph.createEdge(graph.createNode(100,100,"1"), graph.createEdge(graph.createNode(100,200,"2"), graph.createNode(200,100,"3")).source());
67      
68      
69    }
70  
71    /**
72     * Represents a graphical bounding box of the displayed graph.
73     */
74    class BoundingBox implements Drawable {
75      public Rectangle getBounds() {
76        Rectangle r = view.getGraph2D().getBoundingBox();
77        if ( r.getWidth() > 0.0 ) {
78          r.setFrame( r.getX() - 30, r.getY() - 30, r.getWidth() + 60, r.getHeight() + 60 );
79        }
80        return r;
81      }
82  
83      public void paint( Graphics2D gfx ) {
84        Rectangle r = getBounds();
85        gfx.setColor( DemoDefaults.DEFAULT_CONTRAST_COLOR );
86        gfx.fill( r );
87        gfx.setColor( Color.black );
88        gfx.draw( r );
89      }
90    }
91  
92    public static void main(String[] args) {
93      EventQueue.invokeLater(new Runnable() {
94        public void run() {
95          Locale.setDefault(Locale.ENGLISH);
96          initLnF();
97          (new DrawablesDemo()).start("Drawables Demo");
98        }
99      });
100   }
101 
102 
103 }
104 
105     
106 
107       
108