KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ca > mcgill > sable > graph > editparts > SimpleNodeEditPart


1 /* Soot - a J*va Optimization Framework
2  * Copyright (C) 2005 Jennifer Lhotak
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */

19
20
21 package ca.mcgill.sable.graph.editparts;
22
23 import java.beans.PropertyChangeEvent JavaDoc;
24 import java.beans.PropertyChangeListener JavaDoc;
25
26 import org.eclipse.draw2d.*;
27 import org.eclipse.gef.*;
28 import org.eclipse.gef.editparts.*;
29 import org.eclipse.draw2d.graph.*;
30 import java.util.*;
31 import ca.mcgill.sable.graph.model.*;
32 import ca.mcgill.sable.graph.figures.*;
33 import org.eclipse.draw2d.geometry.*;
34 import org.eclipse.swt.graphics.RGB;
35 import org.eclipse.swt.widgets.Display;
36 import ca.mcgill.sable.graph.editpolicies.*;
37 import ca.mcgill.sable.graph.*;
38
39 public class SimpleNodeEditPart
40     extends AbstractGraphicalEditPart
41     implements NodeEditPart, PropertyChangeListener JavaDoc {
42
43     private Object JavaDoc data;
44     
45
46     public SimpleNodeEditPart() {
47         super();
48     }
49
50     /* (non-Javadoc)
51      * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
52      */

53     protected IFigure createFigure() {
54         RectangleFigure rect = new RectangleFigure();
55         ToolbarLayout layout = new ToolbarLayout();
56         layout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER);
57         rect.setLayoutManager(layout);
58         
59         Label label = new Label();
60         label.getInsets().top = 1;
61         label.getInsets().bottom = 1;
62         label.getInsets().right = 1;
63         label.getInsets().left = 1;
64         rect.add(label);
65         
66         return rect;
67     }
68
69     public void contributeNodesToGraph(DirectedGraph graph, HashMap map){
70         Node node = new Node(this);
71         node.width = getFigure().getBounds().width;//getNode().getWidth();
72
node.height = getFigure().getBounds().height;
73         graph.nodes.add(node);
74         map.put(this, node);
75     }
76     
77     public void contributeEdgesToGraph(DirectedGraph graph, HashMap map) {
78         List outgoing = getSourceConnections();
79         for (int i = 0; i < outgoing.size(); i++){
80             EdgeEditPart edge = (EdgeEditPart)outgoing.get(i);
81             edge.contributeToGraph(graph, map);
82         }
83     }
84     
85     public void applyGraphResults(DirectedGraph graph, HashMap map){
86         Node node = (Node)map.get(this);
87         if (node != null){
88             getFigure().setBounds(new Rectangle(node.x+10, node.y, node.width, node.height));//getFigure().getBounds().height));//getFigure().getBounds().height));
89
List outgoing = getSourceConnections();
90             for (int i = 0; i < outgoing.size(); i++){
91                 EdgeEditPart edge = (EdgeEditPart)outgoing.get(i);
92                 edge.applyGraphResults(graph, map);
93             }
94         }
95     
96     }
97     
98     
99     
100     public SimpleNode getNode(){
101         return (SimpleNode)getModel();
102     }
103     
104     /* (non-Javadoc)
105      * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies()
106      */

107     protected void createEditPolicies() {
108     }
109
110     public List getModelSourceConnections(){
111         return getNode().getOutputs();
112     }
113     
114     public List getModelTargetConnections(){
115         return getNode().getInputs();
116     }
117     
118     /* (non-Javadoc)
119      * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
120      */

121     public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart arg0) {
122         return new ChopboxAnchor(getFigure());
123     }
124
125     /* (non-Javadoc)
126      * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
127      */

128     public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart arg0) {
129         return new ChopboxAnchor(getFigure());
130     }
131
132     /* (non-Javadoc)
133      * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request)
134      */

135     public ConnectionAnchor getSourceConnectionAnchor(Request arg0) {
136         return new ChopboxAnchor(getFigure());
137     }
138
139     /* (non-Javadoc)
140      * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.Request)
141      */

142     public ConnectionAnchor getTargetConnectionAnchor(Request arg0) {
143         return new ChopboxAnchor(getFigure());
144     }
145
146     public void activate(){
147         super.activate();
148         getNode().addPropertyChangeListener(this);
149     }
150     
151     public void deactivate(){
152         super.deactivate();
153         getNode().removePropertyChangeListener(this);
154     }
155     
156     
157     
158     public void propertyChange(PropertyChangeEvent JavaDoc event){
159         if (event.getPropertyName().equals(Element.DATA)){
160             //System.out.println("new val: "+event.getNewValue());
161
setData(event.getNewValue());
162             refreshVisuals();
163         }
164         else if (event.getPropertyName().equals(Element.INPUTS)){
165             refreshTargetConnections();
166         }
167         else if (event.getPropertyName().equals(Element.OUTPUTS)){
168             refreshSourceConnections();
169         }
170         
171     }
172     
173     public List getModelChildren(){
174         return getNode().getChildren();
175     }
176     
177     protected void refreshVisuals(){
178         Iterator it = getFigure().getChildren().iterator();
179         while (it.hasNext()){
180             Object JavaDoc next = it.next();
181             if (next instanceof Label){
182                 ((Label)next).setText(getData().toString());
183                 if (getData() != null){
184                     getFigure().setSize((getData().toString().length()*7)+10, ((((Label)next).getBounds().height/2)+10));
185                     getFigure().revalidate();
186                     ((GraphEditPart)getParent()).getFigure().revalidate();
187                 }
188             }
189         }
190     }
191
192     private boolean expanded;
193     private boolean topLevel;
194     private boolean bottomLevel;
195     
196     public void switchToComplex(){
197         GraphPlugin.getDefault().getGenerator().expandGraph(getNode());
198         
199     }
200
201     /**
202      * @return
203      */

204     public Object JavaDoc getData() {
205         return data;
206     }
207
208     /**
209      * @param string
210      */

211     public void setData(Object JavaDoc obj) {
212         data = obj;
213     }
214     
215     
216     /**
217      * @return
218      */

219     public boolean isBottomLevel() {
220         return bottomLevel;
221     }
222
223     /**
224      * @return
225      */

226     public boolean isExpanded() {
227         return expanded;
228     }
229
230     /**
231      * @return
232      */

233     public boolean isTopLevel() {
234         return topLevel;
235     }
236
237     /**
238      * @param b
239      */

240     public void setBottomLevel(boolean b) {
241         bottomLevel = b;
242     }
243
244     /**
245      * @param b
246      */

247     public void setExpanded(boolean b) {
248         expanded = b;
249     }
250
251     /**
252      * @param b
253      */

254     public void setTopLevel(boolean b) {
255         topLevel = b;
256     }
257
258 }
259
Popular Tags