| FadeInFadeOutDemo.java |
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.anim;
29
30 import demo.view.DemoBase;
31 import y.anim.AnimationFactory;
32 import y.anim.AnimationObject;
33 import y.anim.AnimationPlayer;
34 import y.base.GraphEvent;
35 import y.base.GraphListener;
36 import y.base.Node;
37 import y.view.Drawable;
38 import y.view.Graph2D;
39 import y.view.Graph2DView;
40 import y.view.Graph2DViewRepaintManager;
41 import y.view.NodeRealizer;
42 import y.view.ViewAnimationFactory;
43
44 import javax.swing.Action;
45 import java.awt.EventQueue;
46 import java.util.Locale;
47
48 /**
49 * Demonstrates how to visually fade-in newly created nodes and
50 * fade-out deleted nodes. This nice animation effect is triggered by a
51 * special <code>GraphListener</code> implementation.
52 * Note that this demo makes use of the yFiles class <code>
53 * Graph2DViewRepaintManager</code> to increase the speed
54 * of the animation effect.
55 *
56 * @see <a href="http://docs.yworks.com/yfiles/doc/api/index.html#/dguide/animation" target="_blank">Section Animations for Graph Elements</a> in the yFiles for Java Developer's Guide
57 */
58 public class FadeInFadeOutDemo extends DemoBase {
59 private static final long PREFERRED_DURATION = 500;
60
61 /**
62 * Creates a new FadeInFadeOutDemo and initializes the AnimationPlayer for
63 * the fade effects.
64 */
65 public FadeInFadeOutDemo() {
66 view.getGraph2D().addGraphListener(new FadeHandler(view));
67 }
68
69 protected Action createLoadAction() {
70 //Overridden method to disable the Load menu in the demo
71 return null;
72 }
73
74 protected Action createSaveAction() {
75 //Overridden method to disable the Save menu in the demo
76 return null;
77 }
78
79 public static void main(String[] args) {
80 EventQueue.invokeLater(new Runnable() {
81 public void run() {
82 Locale.setDefault(Locale.ENGLISH);
83 initLnF();
84 (new FadeInFadeOutDemo()).start("Fade Demo");
85 }
86 });
87 }
88
89 /**
90 * Triggers fading effects on node creation and node removal.
91 */
92 private static final class FadeHandler implements GraphListener {
93 private AnimationPlayer player;
94 private ViewAnimationFactory factory;
95
96 public FadeHandler(Graph2DView view) {
97 factory = new ViewAnimationFactory(new Graph2DViewRepaintManager(view));
98 player = factory.createConfiguredPlayer();
99 }
100
101 public void onGraphEvent(final GraphEvent e) {
102 final Graph2D graph = (Graph2D) e.getGraph();
103 switch (e.getType()) {
104 case GraphEvent.NODE_CREATION:
105 case GraphEvent.NODE_REINSERTION: {
106 final NodeRealizer nr = graph.getRealizer((Node) e.getData());
107 nr.setVisible(false);
108 player.animate(factory.fadeIn(nr, PREFERRED_DURATION));
109 break;
110 }
111 case GraphEvent.PRE_NODE_REMOVAL: {
112 final NodeRealizer nr = graph.getRealizer((Node) e.getData());
113
114 // let's create a drawable, so the animation can run no matter
115 // if the node is in the graph or not
116 final Drawable dnr = ViewAnimationFactory.createDrawable(nr);
117 nr.setVisible(false);
118
119 final AnimationObject fadeOut = factory.fadeOut(dnr, PREFERRED_DURATION);
120
121 // let's start the animation with some delay so edges "vanish"
122 // before nodes
123 player.animate(
124 AnimationFactory.createSequence(
125 AnimationFactory.createPause(100), fadeOut));
126 break;
127 }
128 }
129 }
130 }
131 }
132