/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
package dnd;
import ilog.views.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
/**
* The <code>DropAdapter</code> class allows an <code>IlvManagerView</code>
* to be a <code>DropTarget</code> for Java drag-and-drop mechanism by implementing Java <code>DropTargetListener</code>.
* @see DragAdapter
*/
public class DropAdapter
implements DropTargetListener
{
Override
public void dragEnter (DropTargetDragEvent dtde)
{
// We accept drag only of our type.
dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
Override
public void dragOver (DropTargetDragEvent dtde)
{
// We accept drag only of our type.
dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
/**
* It implements the <code>DropTargetListener</code> method to end a drag-and-drop operation.
* @param dtde The triggered event.
*/
Override
public void drop (DropTargetDropEvent dtde)
{
// Gets the targeted view.
IlvManagerView view = (IlvManagerView)(dtde.getDropTargetContext().getComponent());
// Verifies the kind of action asked by the user.
if ((dtde.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0) {
// Gets the location of mouse pointer
IlvPoint p = new IlvPoint(dtde.getLocation().x, dtde.getLocation().y);
view.getTransformer().inverse(p);
// We parse <code>DataFlavor</code> supported by the Transferable object
// to find one we can understand.
Transferable trans = dtde.getTransferable();
DataFlavor df[] = dtde.getCurrentDataFlavors();
for (int i = 0; i < df.length; i++) {
// <code>IlvGraphic.GetGraphicObject</code> recognizes <code>DataFlavor.stringFlavor</code>.
if (DataFlavor.stringFlavor.equals(df[i])) {
// We have found the right flavor, accepts the user action.
dtde.acceptDrop(dtde.getDropAction());
IlvGraphic object = null;
try {
// Asks for the corresponding <code>IlvGraphic</code>.
object = IlvGraphic.GetGraphicObject(trans);
// Everything is OK.
if (object != null)
dtde.getDropTargetContext().dropComplete(true);
else {
dtde.getDropTargetContext().dropComplete(false);
return;
}
}
catch (Exception ex) {
System.err.println("Cannot perform drop action");
dtde.getDropTargetContext().dropComplete(false);
return;
}
// Getting the right property we will then move the
// object to the right position and add it to manager.
IlvPoint delta = ((DeltaProperty)object.getNamedProperty(DeltaProperty.NAME)).getDelta();
object.move(p.x - delta.x, p.y - delta.y);
view.getManager().addObject(object, true);
// Prevents from polluting memory space.
object.removeNamedProperty(DeltaProperty.NAME);
return;
}
}
// Found no compatible DataFlavor: reject the drop.
dtde.rejectDrop();
}
else dtde.rejectDrop();
}
// In this simple example we do not redefine the following methods:
Override
public void dropActionChanged(DropTargetDragEvent dtde)
{
}
public void dragScroll(DropTargetDragEvent dtde)
{
}
Override
public void dragExit(DropTargetEvent dte)
{
}
}