package info.limpet.stackedcharts.ui.editor.drop; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.util.TransferDropTargetListener; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.Transfer; public class ProxyDropTargetListener implements TransferDropTargetListener { private final CoreDropTargetListener[] listeners; public ProxyDropTargetListener(CoreDropTargetListener... listeners) { this.listeners = listeners; } @Override public void dragEnter(DropTargetEvent event) { for (CoreDropTargetListener listener : listeners) { if(listener.appliesTo(event)) listener.dragEnter(event); else listener.reset(); } } @Override public void dragLeave(DropTargetEvent event) { for (CoreDropTargetListener listener : listeners) { if(listener.appliesTo(event)) listener.dragLeave(event); else listener.reset(); } } @Override public void dragOperationChanged(DropTargetEvent event) { for (CoreDropTargetListener listener : listeners) { if(listener.appliesTo(event)) listener.dragOperationChanged(event); else listener.reset(); } } @Override public void dragOver(DropTargetEvent event) { boolean match = false; for (CoreDropTargetListener listener : listeners) { if(listener.appliesTo(event)) { match = true; listener.dragOver(event); } else { listener.reset(); } } if(!match) { event.detail = DND.DROP_NONE; } } @Override public void drop(DropTargetEvent event) { for (CoreDropTargetListener listener : listeners) { if (listener.appliesTo(event)) { listener.drop(event); } else { listener.reset(); } } } @Override public void dropAccept(DropTargetEvent event) { for (CoreDropTargetListener listener : listeners) { if(listener.appliesTo(event)) listener.dropAccept(event); else listener.reset(); } } @Override public boolean isEnabled(DropTargetEvent event) { return LocalSelectionTransfer.getTransfer().isSupportedType( event.currentDataType); } @Override public Transfer getTransfer() { return LocalSelectionTransfer.getTransfer(); } }