/*
* @(#)CreationTool2.java
*
* Project: JHotdraw - a GUI framework for technical drawings
* http://www.jhotdraw.org
* http://jhotdraw.sourceforge.net
* Copyright: (c) by the original author(s) and all contributors
* License: Lesser GNU Public License (LGPL)
* http://www.opensource.org/licenses/lgpl-license.html
*/
package org.jhotdraw.contrib;
import org.jhotdraw.standard.CreationTool;
import org.jhotdraw.standard.CompositeFigure;
import org.jhotdraw.framework.Figure;
import org.jhotdraw.framework.DrawingEditor;
import java.awt.event.MouseEvent;
/**
* @author Wolfram Kaiser
* @version <$CURRENT_VERSION$>
*/
public class NestedCreationTool extends CreationTool {
private CompositeFigure myContainerFigure;
public NestedCreationTool(DrawingEditor newDrawingEditor, Figure prototype) {
super(newDrawingEditor, prototype);
}
public void mouseDown(MouseEvent e, int x, int y) {
Figure figure = drawing().findFigure(e.getX(), e.getY());
if (figure != null) {
figure = figure.getDecoratedFigure();
if (figure instanceof CompositeFigure) {
setContainerFigure((CompositeFigure)figure);
super.mouseDown(e, x, y);
}
else {
toolDone();
}
}
else {
toolDone();
}
}
public void mouseMove(MouseEvent e, int x, int y) {
if ((getContainerFigure() != null) && !getContainerFigure().containsPoint(e.getX(), e.getY())) {
// here you might want to constrain the mouse movements to the size of the
// container figure: not sure whether this works...
toolDone();
}
else {
super.mouseMove(e, x, y);
}
}
public void mouseUp(MouseEvent e, int x, int y) {
if ((getContainerFigure() != null) && (getCreatedFigure() != null)
&& getContainerFigure().containsPoint(e.getX(), e.getY())) {
getContainerFigure().add(getCreatedFigure());
}
toolDone();
}
protected void setContainerFigure(CompositeFigure newContainerFigure) {
myContainerFigure = newContainerFigure;
}
public CompositeFigure getContainerFigure() {
return myContainerFigure;
}
protected void toolDone() {
setCreatedFigure(null);
setAddedFigure(null);
setContainerFigure(null);
editor().toolDone();
}
}