1   /****************************************************************************
2    **
3    ** This file is part of yFiles-2.6. 
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-2008 by yWorks GmbH, Vor dem Kreuzberg 28, 
11   ** 72070 Tuebingen, Germany. All rights reserved.
12   **
13   ***************************************************************************/
14  package demo.view.realizer;
15  
16  import demo.view.DemoBase;
17  import y.base.GraphEvent;
18  import y.base.GraphListener;
19  import y.base.Node;
20  import y.view.Graph2D;
21  import y.view.NodeRealizer;
22  import y.view.ShapeNodeRealizer;
23  import y.view.ViewMode;
24  
25  import java.awt.event.MouseEvent;
26  
27  /**
28   * This demo shows how the custom node realizer {@link StateNodeRealizer}
29   * can be used within an application.
30   * The demo allows to create nodes that have different state. 
31   * Additionally it is possible to change the state of a node by right clicking
32   * on it.
33   * A graph with its custom node realziers can be saved and loaded using the YGF
34   * format.
35   */
36  public class StateNodeRealizerDemo extends DemoBase
37  {
38  
39    public StateNodeRealizerDemo()
40    {
41      Graph2D graph = view.getGraph2D();
42  
43      view.addViewMode(new StateChangeViewMode());
44  
45      StateNodeRealizer svr = new StateNodeRealizer();
46      svr.setSize(70,70);
47      svr.setState(StateNodeRealizer.FINAL_STATE);
48      graph.setDefaultNodeRealizer(svr);
49  
50      //for each node that will be created use a reconfigured
51      //default node realizer. 
52      graph.addGraphListener(new GraphListener() {
53        public void onGraphEvent(GraphEvent ev)
54        {
55          if(ev.getType() == GraphEvent.NODE_CREATION)
56          {
57            applyNextState(((Graph2D)ev.getGraph()).getDefaultNodeRealizer());
58          }
59        }
60      });
61  
62      loadGraph( "resource/stateNodeRealizer.ygf" );
63    }
64  
65    /**
66     * This method changes state and shape of a StateNodeRealizer.
67     */
68    private void applyNextState(NodeRealizer vr)
69    {
70      if(vr instanceof StateNodeRealizer)
71      {
72        StateNodeRealizer svr = (StateNodeRealizer)vr;
73        switch(svr.getState()) {
74          case StateNodeRealizer.INITIAL_STATE:
75           svr.setState(StateNodeRealizer.TRANSITION_STATE);
76           break;
77          case StateNodeRealizer.TRANSITION_STATE:
78           svr.setState(StateNodeRealizer.FINAL_STATE);
79           break;
80          case StateNodeRealizer.FINAL_STATE:
81           svr.setState(StateNodeRealizer.INITIAL_STATE);
82           break;
83        }
84        if(svr.getShapeType() == ShapeNodeRealizer.ELLIPSE)
85        {
86          svr.setShapeType(StateNodeRealizer.CUSTOM_SHAPE);
87        }
88        else
89        {
90          svr.setShapeType(ShapeNodeRealizer.ELLIPSE);
91        }
92      }
93    }
94  
95    /**
96     * ViewMode that changes state and shape of a node when it
97     * gets right-clicked or double-clicked.
98     */
99    private class StateChangeViewMode extends ViewMode
100   {
101 
102     public void mousePressedRight(double x, double y)
103     {
104       Node hitNode = getHitInfo(x,y).getHitNode();
105       if(hitNode != null)
106       {
107         applyNextState(getGraph2D().getRealizer(hitNode));
108         getGraph2D().updateViews();
109       }
110     }
111 
112     public void mouseClicked(MouseEvent ev)
113     {
114       if(ev.getClickCount() == 2)
115       {
116         double x = translateX(ev.getX());
117         double y = translateY(ev.getY());
118         Node hitNode = getHitInfo(x,y).getHitNode();
119         if(hitNode != null)
120         {
121           applyNextState(getGraph2D().getRealizer(hitNode));
122           getGraph2D().updateViews();
123         }
124       }
125     }
126   }
127 
128 
129   public static void main(String args[])
130   {
131     StateNodeRealizerDemo demo = new StateNodeRealizerDemo();
132     demo.start("StateNodeRealizer Demo");
133   }
134 
135 }
136