package org.csstudio.sds.ui.internal.editor;
import java.util.List;
import org.csstudio.sds.model.AbstractWidgetModel;
import org.csstudio.sds.ui.internal.actions.WidgetModelTransfer;
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.gef.requests.CreationFactory;
import org.eclipse.swt.dnd.DND;
public class LibraryElementDropTargetListener extends
AbstractTransferDropTargetListener {
public LibraryElementDropTargetListener(EditPartViewer viewer) {
super(viewer, WidgetModelTransfer.getInstance());
}
List<AbstractWidgetModel> widgets;
@Override
protected Request createTargetRequest() {
CreateRequest request = new CreateRequest();
CreationFactory creationFactory = new CreationFactory() {
@Override
public Object getObjectType() {
return "List_AbstractWidgetModel";
}
@Override
public Object getNewObject() {
return widgets;
}
};
request.setFactory(creationFactory);
return request;
}
@Override
protected void updateTargetRequest() {
((CreateRequest) getTargetRequest())
.setLocation(getDropLocation());
}
@Override
protected void handleDragOver() {
getCurrentEvent().detail = DND.DROP_COPY;
super.handleDragOver();
}
@SuppressWarnings("unchecked")
@Override
protected void handleDrop() {
widgets = (List<AbstractWidgetModel>) getCurrentEvent().data;
getCurrentEvent().detail = DND.DROP_COPY;
super.handleDrop();
}
}