AbstractHandle.java
/*
* @(#)AbstractHandle.java
*
* Project: JHotdraw - a GUI framework for technical drawings
* http://www.jhotdraw.org
* http://jhotdraw.sourceforge.net
* Copyright: © by the original author(s) and all contributors
* License: Lesser GNU Public License (LGPL)
* http://www.opensource.org/licenses/lgpl-license.html
*/
package CH.ifa.draw.standard;
import CH.ifa.draw.framework.*;
import CH.ifa.draw.util.Undoable;
import java.awt.*;
/**
* AbstractHandle provides defaulf implementation for the Handle interface.
*
* @see Figure
* @see Handle
*
* @version <$CURRENT_VERSION$>
*/
public abstract class AbstractHandle implements Handle {
/**
* The standard size of a handle.
*/
public static final int HANDLESIZE = 8;
private Figure fOwner;
private Undoable myUndoableActivity;
/**
* Initializes the owner of the figure.
*/
public AbstractHandle(Figure owner) {
fOwner = owner;
}
/**
* Locates the handle on the figure. The handle is drawn
* centered around the returned point.
*/
public abstract Point locate();
/**
* @ deprecated As of version 4.1,
* use invokeStart(x, y, drawingView)
* Tracks the start of the interaction. The default implementation
* does nothing.
* @param x the x position where the interaction started
* @param y the y position where the interaction started
*/
public void invokeStart(int x, int y, Drawing drawing) { }
/**
* @param x the x position where the interaction started
* @param y the y position where the interaction started
* @param view the handles container
*/
public void invokeStart(int x, int y, DrawingView view) {
invokeStart(x, y, view.drawing());
}
/**
* @ deprecated As of version 4.1,
* use invokeStep(x, y, anchorX, anchorY, drawingView)
*
* Tracks a step of the interaction.
* @param dx x delta of this step
* @param dy y delta of this step
*/
public void invokeStep(int dx, int dy, Drawing drawing) { }
/**
* Tracks a step of the interaction.
* @param x the current x position
* @param y the current y position
* @param anchorX the x position where the interaction started
* @param anchorY the y position where the interaction started
*/
public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) {
invokeStep(x-anchorX, y-anchorY, view.drawing());
}
/**
* Tracks the end of the interaction.
* @param x the current x position
* @param y the current y position
* @param anchorX the x position where the interaction started
* @param anchorY the y position where the interaction started
*/
public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) {
invokeEnd(x-anchorX, y-anchorY, view.drawing());
}
/**
* @deprecated As of version 4.1,
* use invokeEnd(x, y, anchorX, anchorY, drawingView).
*
* Tracks the end of the interaction.
*/
public void invokeEnd(int dx, int dy, Drawing drawing) { }
/**
* Gets the handle's owner.
*/
public Figure owner() {
return fOwner;
}
/**
* Gets the display box of the handle.
*/
public Rectangle displayBox() {
Point p = locate();
return new Rectangle(
p.x - HANDLESIZE / 2,
p.y - HANDLESIZE / 2,
HANDLESIZE,
HANDLESIZE);
}
/**
* Tests if a point is contained in the handle.
*/
public boolean containsPoint(int x, int y) {
return displayBox().contains(x, y);
}
/**
* Draws this handle.
*/
public void draw(Graphics g) {
Rectangle r = displayBox();
g.setColor(Color.white);
g.fillRect(r.x, r.y, r.width, r.height);
g.setColor(Color.black);
g.drawRect(r.x, r.y, r.width, r.height);
}
public Undoable getUndoActivity() {
return myUndoableActivity;
}
public void setUndoActivity(Undoable newUndoableActivity) {
myUndoableActivity = newUndoableActivity;
}
}