package net.ms.designer.editors.enumcomponentdetail.dnd;
import net.ms.designer.editors.enumcomponentdetail.model.Table;
import net.ms.designer.editors.enumcomponentdetail.palette.EnumCreationFactory;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.Request;
import org.eclipse.gef.dnd.AbstractTransferDropTargetListener;
import org.eclipse.gef.requests.CreateRequest;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.Transfer;
public class TextTransferDropTargetListener extends
AbstractTransferDropTargetListener
{
private EnumCreationFactory factory = new EnumCreationFactory(Table.class);
public TextTransferDropTargetListener(EditPartViewer viewer, Transfer xfer) {
super(viewer, xfer);
}
protected void handleDragOperationChanged()
{
getCurrentEvent().detail = DND.DROP_COPY;
super.handleDragOperationChanged();
}
protected Request createTargetRequest()
{
CreateRequest request = new CreateRequest();
request.setFactory(factory);
return request;
}
protected void updateTargetRequest()
{
((CreateRequest) getTargetRequest()).setLocation(getDropLocation());
}
protected final CreateRequest getCreateRequest()
{
return ((CreateRequest) getTargetRequest());
}
protected void handleDragOver()
{
getCurrentEvent().detail = DND.DROP_COPY | DND.DROP_MOVE;
getCurrentEvent().feedback = DND.FEEDBACK_SCROLL | DND.FEEDBACK_EXPAND;
super.handleDragOver();
}
protected void handleDrop()
{
super.handleDrop();
selectAddedObject();
}
private void selectAddedObject()
{
Object model = getCreateRequest().getNewObject();
if (model == null)
return;
EditPartViewer viewer = getViewer();
viewer.getControl().forceFocus();
Object editpart = viewer.getEditPartRegistry().get(model);
if (editpart instanceof EditPart)
{
//Force a layout first.
getViewer().flush();
viewer.select((EditPart) editpart);
}
}
}