1   /****************************************************************************
2    **
3    ** This file is part of yFiles-2.9. 
4    ** 
5    ** yWorks proprietary/confidential. Use is subject to license terms.
6    **
7    ** Redistribution of this file or of an unauthorized byte-code version
8    ** of this file is strictly forbidden.
9    **
10   ** Copyright (c) 2000-2011 by yWorks GmbH, Vor dem Kreuzberg 28, 
11   ** 72070 Tuebingen, Germany. All rights reserved.
12   **
13   ***************************************************************************/
14  package demo.view.rendering;
15  
16  import demo.view.DemoBase;
17  import y.option.EnumOptionItem;
18  import y.option.MappedListCellRenderer;
19  import y.option.OptionHandler;
20  import y.view.DefaultBackgroundRenderer;
21  import y.view.EdgeRealizer;
22  import y.view.LineType;
23  
24  import javax.swing.AbstractAction;
25  import javax.swing.Action;
26  import javax.swing.DefaultListCellRenderer;
27  import javax.swing.JToolBar;
28  import java.awt.Color;
29  import java.awt.Dimension;
30  import java.awt.EventQueue;
31  import java.awt.event.ActionEvent;
32  import java.awt.event.ActionListener;
33  import java.util.HashMap;
34  import java.util.Locale;
35  import java.util.Map;
36  
37  /**
38   * Demonstrates different modes for drawing images in the
39   * background of Graph2DView.
40   * <br/>
41   * Usage: Create some nodes and try the different background settings available
42   * via the toolbar button. Try changing the window size, zooming in and out and
43   * moving the view port by right dragging.
44   * @see <a href="http://docs.yworks.com/yfiles/doc/developers-guide/mvc_view.html#render_order">Section View Implementations</a> in the yFiles for Java Developer's Guide
45   */
46  public class BackgroundDemo extends DemoBase
47  {
48    DefaultBackgroundRenderer renderer;
49  
50    static final String[] bgImages = {
51      "resource/yWorksBig.png",
52      "resource/yWorksSmall.gif",
53      "resource/usamap.gif",
54      "resource/ySplash.jpg",
55      "resource/tile.jpg",
56      "<NONE>"
57    };
58  
59  
60    public BackgroundDemo()
61    {
62      renderer = new DefaultBackgroundRenderer(view);
63      renderer.setImageResource(getClass().getResource(bgImages[0]));
64      renderer.setMode(DefaultBackgroundRenderer.CENTERED);
65      renderer.setColor(Color.white);
66      view.setBackgroundRenderer(renderer);
67      view.setPreferredSize(new Dimension(600,400));
68  
69      view.setWorldRect(0,0,1000,1000);
70  
71      //use thicker edges 
72      EdgeRealizer er = view.getGraph2D().getDefaultEdgeRealizer();
73      er.setLineType(LineType.LINE_2);
74    }
75  
76    /**
77     * Returns ViewActionDemo toolbar plus a button to change the 
78     * background of the view.
79     */
80    protected JToolBar createToolBar()
81    {
82      JToolBar bar = super.createToolBar();
83      bar.addSeparator();
84      bar.add(createActionControl(new ChangeBackground()));
85      return bar;
86    }
87  
88    /**
89     * An action that displays a dialog that allows to change the background
90     * properties of the view.
91     */
92    class ChangeBackground extends AbstractAction
93    {
94      /** The powerful yFiles dialog generator */
95      OptionHandler op;
96      Map xlate;
97  
98      ChangeBackground()
99      {
100       super("Background");
101       xlate = new HashMap(11);
102       xlate.put(new Byte(DefaultBackgroundRenderer.FULLSCREEN),"Fullscreen");
103       xlate.put(new Byte(DefaultBackgroundRenderer.TILED),     "Tiled");
104       xlate.put(new Byte(DefaultBackgroundRenderer.BRICKED),   "Bricked");
105       xlate.put(new Byte(DefaultBackgroundRenderer.CENTERED),  "Centered");
106       xlate.put(new Byte(DefaultBackgroundRenderer.PLAIN),     "Plain");
107       xlate.put(new Byte(DefaultBackgroundRenderer.DYNAMIC),   "Dynamic");
108       
109       putValue(Action.SMALL_ICON, getIconResource("resource/properties.png"));
110     }
111 
112     public void actionPerformed(ActionEvent e)
113     {
114       if(op == null)
115       {
116         op = new OptionHandler("Background");
117         op.addEnum("Mode",
118                    xlate.keySet().toArray(),
119                    new Byte(renderer.getMode()),
120                    new MappedListCellRenderer(xlate));
121         op.addColor("Color",renderer.getColor());
122         op.addEnum("Image",bgImages,0)
123           // disable unwanted I18N
124           .setAttribute(EnumOptionItem.ATTRIBUTE_RENDERER,
125                         new DefaultListCellRenderer());
126       }
127 
128       final ActionListener actionListener = new ActionListener() {
129         public void actionPerformed(ActionEvent e) {
130           renderer.setMode(((Byte)op.get("Mode")).byteValue());
131           renderer.setColor((Color)op.get("Color"));
132           String imageSrc = op.getString("Image");
133           if("<NONE>".equals(imageSrc)) {
134             renderer.setImage(null);
135           } else {
136             renderer.setImageResource(this.getClass().getResource(imageSrc));
137           }
138           view.updateView();
139         }
140       };
141 
142       OptionSupport.showDialog(op, actionListener, false, view.getFrame());
143     }
144   }
145 
146   public static void main(String[] args) {
147     EventQueue.invokeLater(new Runnable() {
148       public void run() {
149         Locale.setDefault(Locale.ENGLISH);
150         initLnF();
151         (new BackgroundDemo()).start("Background Demo");
152       }
153     });
154   }
155 }
156 
157 
158       
159