package org.geogebra.desktop.util; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.util.ArrayList; import javax.swing.JComponent; import javax.swing.TransferHandler; import org.geogebra.common.kernel.StringTemplate; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.desktop.gui.view.algebra.AlgebraViewD; import org.geogebra.desktop.main.AppD; /** * Transfer handler for AlgebraView. * * Exports its own data flavor, AlgebraViewFlavor. This contains an arrayList of * the labels of all selected geos in the AlgebraView * * @author gsturr * */ public class AlgebraViewTransferHandler extends TransferHandler implements Transferable { private static final long serialVersionUID = 1L; private AppD app; /** for transfering geos into AV */ public static final DataFlavor algebraViewFlavor = new DataFlavor( AlgebraViewD.class, "algebraView"); private static final DataFlavor supportedFlavors[] = { algebraViewFlavor }; private ArrayList<String> geoLabelList; /**************************************** * Constructor */ public AlgebraViewTransferHandler(AppD app) { this.app = app; } @Override public int getSourceActions(JComponent c) { return TransferHandler.COPY; } @Override public boolean canImport(JComponent comp, DataFlavor flavor[]) { return false; } @Override public Transferable createTransferable(JComponent comp) { if (geoLabelList == null) { geoLabelList = new ArrayList<String>(); } else { geoLabelList.clear(); } if (comp instanceof AlgebraViewD) { ArrayList<GeoElement> geos = app.getSelectionManager() .getSelectedGeos(); for (GeoElement geo : geos) { geoLabelList.add(geo.getLabel(StringTemplate.defaultTemplate)); } return this; } return null; } @Override public boolean importData(JComponent comp, Transferable t) { return false; } @Override public Object getTransferData(DataFlavor flavor) { if (isDataFlavorSupported(flavor)) { return geoLabelList; } return null; } @Override public DataFlavor[] getTransferDataFlavors() { return supportedFlavors; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { for (int i = 0; i < supportedFlavors.length; i++) { // System.out.println(flavor.getMimeType()); // System.out.println(supportedFlavors[i].getMimeType()); // System.out.println("------------"); if (supportedFlavors[i].equals(flavor)) { return true; } } return false; } }