package com.baselet.gui.command;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.util.ArrayList;
import java.util.List;
import com.baselet.control.constants.Constants;
import com.baselet.diagram.DiagramHandler;
import com.baselet.diagram.io.OutputHandler;
import com.baselet.element.ElementFactorySwing;
import com.baselet.element.interfaces.GridElement;
import com.baselet.gui.CurrentGui;
/** Copies and Pastes images to the system clipboard. Requires Java 2, v1.4. */
public class ClipBoard implements Transferable {
private final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
private List<GridElement> entities;
private static ClipBoard _instance = new ClipBoard();
public static ClipBoard getInstance() {
return _instance;
}
public void copyAndZoomToDefaultLevel(List<GridElement> entities, DiagramHandler handler) {
if (entities.isEmpty()) {
return;
}
// clipboard zooms entities to 100% (to make them zoom-independent)
// therefore we need to set a DiagramHandler with 100% zoom and resize the elements
this.entities = new ArrayList<GridElement>(entities.size());
DiagramHandler dhNew = new DiagramHandler(null);
for (GridElement entitiy : entities) {
this.entities.add(ElementFactorySwing.createCopy(entitiy, dhNew));
}
DiagramHandler.zoomEntities(handler.getGridSize(), Constants.DEFAULTGRIDSIZE, this.entities);
CurrentGui.getInstance().getGui().enablePasteMenuEntry();
if (clipboard != null) { // Issue 230: copy after zooming the entities
clipboard.setContents(this, null);
}
}
public List<GridElement> paste() {
return entities;
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.imageFlavor };
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.imageFlavor.equals(flavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
if (!isDataFlavorSupported(flavor)) {
throw new UnsupportedFlavorException(flavor);
}
return OutputHandler.createImageForGridElements(entities, null);
}
}