| /******************************************************************************* |
| * 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); |
| } |
| |
| } |