GroupFigure.java
/*
* @(#)GroupFigure.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.figures;
import java.awt.*;
import java.util.*;
import CH.ifa.draw.framework.*;
import CH.ifa.draw.standard.*;
/**
* A Figure that groups a collection of figures.
*
* @version <$CURRENT_VERSION$>
*/
public class GroupFigure extends CompositeFigure {
/*
* Serialization support.
*/
private static final long serialVersionUID = 8311226373023297933L;
private int groupFigureSerializedDataVersion = 1;
/**
* GroupFigures cannot be connected
*/
public boolean canConnect() {
return false;
}
/**
* Gets the display box. The display box is defined as the union
* of the contained figures.
*/
public Rectangle displayBox() {
FigureEnumeration fe = figures();
Rectangle r = fe.nextFigure().displayBox();
while (fe.hasMoreElements()) {
r.add(fe.nextFigure().displayBox());
}
return r;
}
public void basicDisplayBox(Point origin, Point corner) {
// do nothing
// we could transform all components proportionally
}
public FigureEnumeration decompose() {
return new FigureEnumerator(fFigures);
}
/**
* Gets the handles for the GroupFigure.
*/
public Vector handles() {
Vector handles = new Vector();
handles.addElement(new GroupHandle(this, RelativeLocator.northWest()));
handles.addElement(new GroupHandle(this, RelativeLocator.northEast()));
handles.addElement(new GroupHandle(this, RelativeLocator.southWest()));
handles.addElement(new GroupHandle(this, RelativeLocator.southEast()));
return handles;
}
/**
* Sets the attribute of all the contained figures.
*/
public void setAttribute(String name, Object value) {
super.setAttribute(name, value);
FigureEnumeration k = figures();
while (k.hasMoreElements()) {
k.nextFigure().setAttribute(name, value);
}
}
}