/* * @(#)FigureSelection.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.*; import java.util.*; import java.io.*; /** * FigureSelection enables to transfer the selected figures * to a clipboard.

* Will soon be converted to the JDK 1.1 Transferable interface. * * @see Clipboard * * @version <$CURRENT_VERSION$> */ public class StandardFigureSelection implements FigureSelection, Serializable { private byte[] fData; // flattend figures, ready to be resurrected /** * The type identifier of the selection. */ public final static String TYPE = "CH.ifa.draw.Figures"; /** * Constructes the Figure selection for the vector of figures. */ public StandardFigureSelection(FigureEnumeration figures, int figureCount) { // a FigureSelection is represented as a flattened ByteStream // of figures. ByteArrayOutputStream output = new ByteArrayOutputStream(200); StorableOutput writer = new StorableOutput(output); writer.writeInt(figureCount); while (figures.hasMoreElements()) { writer.writeStorable(figures.nextFigure()); } writer.close(); fData = output.toByteArray(); } /** * Gets the type of the selection. */ public String getType() { return TYPE; } /** * Gets the data of the selection. The result is returned * as a Vector of Figures. * * @return a copy of the figure selection. */ public Object getData(String type) { if (type.equals(TYPE)) { InputStream input = new ByteArrayInputStream(fData); Vector result = new Vector(10); StorableInput reader = new StorableInput(input); int numRead = 0; try { int count = reader.readInt(); while (numRead < count) { Figure newFigure = (Figure) reader.readStorable(); result.addElement(newFigure); numRead++; } } catch (IOException e) { System.out.println(e.toString()); } return new FigureEnumerator(result); } return null; } public static FigureEnumeration duplicateFigures(FigureEnumeration toBeCloned, int figureCount) { StandardFigureSelection duplicater = new StandardFigureSelection(toBeCloned, figureCount); return (FigureEnumeration)duplicater.getData(duplicater.getType()); } }