blob: f9f4b280e16d3ee268c6a06fa236173a227e6358 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.handles;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.draw2d.Connection;
import org.eclipse.draw2d.Cursors;
/**
* The base implementation for handles used with editparts whose figure is a
* {@link org.eclipse.draw2d.Connection}. This class adds an additional listener
* to the owner's connection figure to receive notification whenever the owner's
* connection's points are changed. Changing the points of a connection does not
* fire "figure moved", it only fires "points" property as changing.
*/
public abstract class ConnectionHandle extends SquareHandle implements
PropertyChangeListener {
private boolean fixed = false;
/**
* Creates a new ConnectionHandle.
*/
public ConnectionHandle() {
setCursor(Cursors.CROSS);
}
/**
* Creates a new handle with the given fixed setting. If the handle is
* fixed, it cannot be dragged.
*
* @param fixed
* <code>true</code> if the handle cannot be dragged.
*/
public ConnectionHandle(boolean fixed) {
setFixed(fixed);
if (fixed)
setCursor(Cursors.NO);
else
setCursor(Cursors.CROSS);
}
/**
* Adds this as a {@link org.eclipse.draw2d.FigureListener} to the owner's
* {@link org.eclipse.draw2d.Figure}.
*/
public void addNotify() {
super.addNotify();
getConnection().addPropertyChangeListener(Connection.PROPERTY_POINTS,
this);
}
/**
* Convenience method to return the owner's figure typed as
* <code>Connection</code>.
*
* @return the owner's connection
*/
public Connection getConnection() {
return (Connection) getOwnerFigure();
}
/**
* Returns true if the handle cannot be dragged.
*
* @return <code>true</code> if the handle cannot be dragged
*/
protected boolean isFixed() {
return fixed;
}
/**
* @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
*/
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(Connection.PROPERTY_POINTS))
revalidate();
}
/**
* Extended to remove a listener.
*
* @see org.eclipse.draw2d.IFigure#removeNotify()
*/
public void removeNotify() {
getConnection().removePropertyChangeListener(
Connection.PROPERTY_POINTS, this);
super.removeNotify();
}
/**
* Sets whether the handle is fixed and cannot be moved
*
* @param fixed
* <code>true</code> if the handle should be unmovable
*/
public void setFixed(boolean fixed) {
this.fixed = fixed;
if (fixed)
setCursor(Cursors.NO);
else
setCursor(Cursors.CROSS);
}
}