package org.geogebra.desktop.gui.view.algebra; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.io.IOException; import java.util.ArrayList; import javax.swing.text.JTextComponent; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.desktop.gui.GuiManagerD; import org.geogebra.desktop.main.AppD; import org.geogebra.desktop.util.AlgebraViewTransferHandler; public class AlgebraInputDropTargetListener implements DropTargetListener { private AppD app; private JTextComponent textComp; // supported data flavors private String textImport; public AlgebraInputDropTargetListener(AppD app, JTextComponent textComp) { this.app = app; this.textComp = textComp; } @Override public void dragEnter(DropTargetDragEvent dtde) { // TODO Auto-generated method stub } @Override public void dragExit(DropTargetEvent dte) { // TODO Auto-generated method stub } @Override public void dragOver(DropTargetDragEvent dtde) { // TODO Auto-generated method stub } @Override public void drop(DropTargetDropEvent dropEvent) { dropEvent.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable t = dropEvent.getTransferable(); try { // handle text if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) { textImport = (String) t .getTransferData(DataFlavor.stringFlavor); // set the text and complete the drop textComp.replaceSelection(textImport); dropEvent.dropComplete(textImport != null); } // handle algebraView flavor else if (t.isDataFlavorSupported( AlgebraViewTransferHandler.algebraViewFlavor)) { // get list of selected geo labels ArrayList<String> list = (ArrayList<String>) t.getTransferData( AlgebraViewTransferHandler.algebraViewFlavor); // exit if empty list if (list.size() == 0) { dropEvent.dropComplete(false); return; } // if only one geo, get definition string if (list.size() == 1) { GeoElement geo = app.getKernel().lookupLabel(list.get(0)); if (geo != null) { textImport = geo.getDefinitionForInputBar(); } else { dropEvent.dropComplete(false); return; } } // if more than one geo, create list string else { textImport = list.toString(); textImport = textImport.replace("]", "}"); textImport = textImport.replace("[", "{"); } // set the text and complete the drop textComp.setText(textImport); dropEvent.dropComplete(true); } // handle ggb file drop else if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { ((GuiManagerD) app.getGuiManager()).handleGGBFileDrop(t); } } catch (UnsupportedFlavorException ignored) { } catch (IOException ignored) { } } @Override public void dropActionChanged(DropTargetDragEvent dtde) { // TODO Auto-generated method stub } }