1 19 20 21 package ca.mcgill.sable.graph.editparts; 22 23 import java.beans.PropertyChangeEvent ; 24 import java.beans.PropertyChangeListener ; 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 { 42 43 private Object data; 44 45 46 public SimpleNodeEditPart() { 47 super(); 48 } 49 50 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; 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)); 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 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 121 public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart arg0) { 122 return new ChopboxAnchor(getFigure()); 123 } 124 125 128 public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart arg0) { 129 return new ChopboxAnchor(getFigure()); 130 } 131 132 135 public ConnectionAnchor getSourceConnectionAnchor(Request arg0) { 136 return new ChopboxAnchor(getFigure()); 137 } 138 139 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 event){ 159 if (event.getPropertyName().equals(Element.DATA)){ 160 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 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 204 public Object getData() { 205 return data; 206 } 207 208 211 public void setData(Object obj) { 212 data = obj; 213 } 214 215 216 219 public boolean isBottomLevel() { 220 return bottomLevel; 221 } 222 223 226 public boolean isExpanded() { 227 return expanded; 228 } 229 230 233 public boolean isTopLevel() { 234 return topLevel; 235 } 236 237 240 public void setBottomLevel(boolean b) { 241 bottomLevel = b; 242 } 243 244 247 public void setExpanded(boolean b) { 248 expanded = b; 249 } 250 251 254 public void setTopLevel(boolean b) { 255 topLevel = b; 256 } 257 258 } 259 | Popular Tags |