View Javadoc

1   /*
2    * This file is a part of CAST project.
3    * (c) Copyright 2007, AGH University of Science & Technology
4    * https://caribou.iisg.agh.edu.pl/trac/cast
5    *
6    * Licensed under the Eclipse Public License, Version 1.0 (the "License").
7    * You may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    * http://www.eclipse.org/legal/epl-v10.html
10   */
11  /*
12   * File: LegendEditPart.java
13   * Created: 2007-00-00
14   * Author: cast
15   * $Id: LegendEditPart.java 3054 2009-07-27 10:23:07Z kpietak $
16   */
17  
18  package pl.edu.agh.cast.editpart;
19  
20  import java.beans.PropertyChangeEvent;
21  import java.beans.PropertyChangeListener;
22  
23  import org.eclipse.draw2d.ChopboxAnchor;
24  import org.eclipse.draw2d.ConnectionAnchor;
25  import org.eclipse.draw2d.IFigure;
26  import org.eclipse.draw2d.LayoutManager;
27  import org.eclipse.gef.ConnectionEditPart;
28  import org.eclipse.gef.NodeEditPart;
29  import org.eclipse.gef.Request;
30  import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
31  
32  import pl.edu.agh.cast.backward.figure.LegendFigure;
33  import pl.edu.agh.cast.model.visual.backward.Diagram;
34  import pl.edu.agh.cast.model.visual.backward.IDiagram;
35  import pl.edu.agh.cast.model.visual.backward.Legend;
36  
37  /**
38   * Legend {@link org.eclipse.ui.part.EditorPart}.
39   *
40   * @author AGH CAST Team
41   */
42  public class LegendEditPart extends AbstractGraphicalEditPart implements NodeEditPart, PropertyChangeListener {
43  
44  	/**
45  	 * The underlying {@link Legend} instance.
46  	 */
47  	protected Legend legend;
48  
49  	@SuppressWarnings("unused")
50  	private LayoutManager layout;
51  
52  	private LegendFigure legendFigure;
53  
54  	private ConnectionAnchor connectionAnchor;
55  
56  	/**
57  	 * Constructor.
58  	 *
59  	 * @param legend
60  	 *            the legend
61  	 * @param layout
62  	 *            layout manager
63  	 */
64  	public LegendEditPart(Legend legend, LayoutManager layout) {
65  		this.legend = legend;
66  		this.layout = layout;
67  		setModel(legend);
68  	}
69  
70  	/**
71  	 * {@inheritDoc}
72  	 *
73  	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
74  	 */
75  	@Override
76  	public IFigure createFigure() {
77  		legendFigure = new LegendFigure(legend, this);
78  		return legendFigure;
79  	}
80  
81  	/**
82  	 * {@inheritDoc}
83  	 *
84  	 * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies()
85  	 */
86  	@Override
87  	protected void createEditPolicies() {
88  	}
89  
90  	/**
91  	 * {@inheritDoc}
92  	 *
93  	 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
94  	 */
95  	public void propertyChange(PropertyChangeEvent event) {
96  		final String propName = event.getPropertyName();
97  		if (propName.equals(Diagram.NAME)) {
98  			legend.setDiagramName((String)event.getNewValue());
99  			refreshVisuals();
100 		} else if (propName.equals(Diagram.CHILD) || propName.equals(Diagram.CHILDREN)
101 		        || propName.equals(Diagram.CONNECTION)) {
102 			refreshItems();
103 		} else if (propName.equals(Legend.LOCATION)) {
104 			refreshVisuals();
105 		} else if (event.getSource() instanceof Legend) {
106 			refreshItems();
107 		}
108 	}
109 
110 	/**
111 	 * {@inheritDoc}
112 	 *
113 	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#activate()
114 	 */
115 	@Override
116 	public void activate() {
117 		super.activate();
118 		legend.addPropertyChangeListener(this);
119 		((IDiagram)this.getParent().getModel()).addPropertyChangeListener(this);
120 	}
121 
122 	/**
123 	 * {@inheritDoc}
124 	 *
125 	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#deactivate()
126 	 */
127 	@Override
128 	public void deactivate() {
129 		super.deactivate();
130 		legend.removePropertyChangeListener(this);
131 	}
132 
133 	/**
134 	 * Returns the {@link Legend} instance.
135 	 *
136 	 * @return the {@link Legend}
137 	 */
138 	public Legend getModelCasted() {
139 		return legend;
140 	}
141 
142 	/**
143 	 * {@inheritDoc}
144 	 *
145 	 * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
146 	 */
147 	@Override
148 	protected void refreshVisuals() {
149 		// update the location only if it is not (-1,-1) or when preferred
150 		// location is not set
151 		// (i.e. when opening a diagram with default locations)
152 		if (legend.getLocation().x > 0) {
153 			legendFigure.setLocation(legend.getLocation());
154 		}
155 		refreshItems();
156 	}
157 
158 	/**
159 	 * Refreshes the legend.
160 	 */
161 	public void refreshItems() {
162 		legendFigure.init();
163 	}
164 
165 	/**
166 	 * {@inheritDoc}
167 	 *
168 	 * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
169 	 */
170 	public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart arg0) {
171 		return getConnectionAnchor();
172 	}
173 
174 	/**
175 	 * {@inheritDoc}
176 	 *
177 	 * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request)
178 	 */
179 	public ConnectionAnchor getSourceConnectionAnchor(Request arg0) {
180 		return getConnectionAnchor();
181 	}
182 
183 	/**
184 	 * {@inheritDoc}
185 	 *
186 	 * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
187 	 */
188 	public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart arg0) {
189 		return getConnectionAnchor();
190 	}
191 
192 	/**
193 	 * {@inheritDoc}
194 	 *
195 	 * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.Request)
196 	 */
197 	public ConnectionAnchor getTargetConnectionAnchor(Request arg0) {
198 		return getConnectionAnchor();
199 	}
200 
201 	private ConnectionAnchor getConnectionAnchor() {
202 		if (connectionAnchor == null) {
203 			connectionAnchor = new ChopboxAnchor(legendFigure);
204 		}
205 		return connectionAnchor;
206 
207 	}
208 
209 }