| /******************************************************************************* |
| * Copyright (c) 2000, 2011 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Jesper Kamstrup Linnet (eclipse@kamstrup-linnet.dk) - initial API and implementation |
| * (report 36180: Callers/Callees view) |
| * Stephan Herrmann (stephan@cs.tu-berlin.de): |
| * - bug 75800: [call hierarchy] should allow searches for fields |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.ui.callhierarchy; |
| |
| import java.util.List; |
| |
| import org.eclipse.swt.dnd.DND; |
| import org.eclipse.swt.dnd.TransferData; |
| |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.StructuredViewer; |
| |
| import org.eclipse.jdt.core.IMember; |
| |
| import org.eclipse.jdt.internal.corext.callhierarchy.CallHierarchy; |
| |
| import org.eclipse.jdt.internal.ui.dnd.ViewerInputDropAdapter; |
| |
| class CallHierarchyTransferDropAdapter extends ViewerInputDropAdapter { |
| |
| private CallHierarchyViewPart fCallHierarchyViewPart; |
| |
| public CallHierarchyTransferDropAdapter(CallHierarchyViewPart viewPart, StructuredViewer viewer) { |
| super(viewer); |
| fCallHierarchyViewPart= viewPart; |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| protected void doInputView(Object inputElements) { |
| IMember[] newElements= (IMember[])inputElements; |
| IMember[] oldInput= fCallHierarchyViewPart.getInputElements(); |
| boolean noInput= oldInput != null && oldInput.length > 0; |
| if (getCurrentOperation() == DND.DROP_LINK || !noInput) { |
| fCallHierarchyViewPart.setInputElements(newElements); |
| return; |
| } |
| if (newElements != null && newElements.length > 0) { |
| fCallHierarchyViewPart.addInputElements(newElements); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.internal.ui.dnd.ViewerInputDropAdapter#performDrop(java.lang.Object) |
| * @since 3.7 |
| */ |
| @Override |
| public boolean performDrop(Object data) { |
| setSelectionFeedbackEnabled(false); |
| setExpandEnabled(false); |
| |
| if (getCurrentTarget() != null) |
| return super.performDrop(data); |
| |
| Object input= getInputElement(getSelection()); |
| if (input != null) { |
| doInputView(input); |
| return true; |
| } |
| return super.performDrop(data); |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| protected Object getInputElement(ISelection selection) { |
| if (selection instanceof IStructuredSelection) { |
| List<?> elements= ((IStructuredSelection) selection).toList(); |
| if (CallHierarchy.arePossibleInputElements(elements)) { |
| return elements.toArray(new IMember[elements.size()]); |
| } |
| } |
| return null; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.internal.ui.dnd.ViewerInputDropAdapter#determineOperation(java.lang.Object, int, org.eclipse.swt.dnd.TransferData, int) |
| * @since 3.7 |
| */ |
| @Override |
| protected int determineOperation(Object target, int operation, TransferData transferType, int operations) { |
| setSelectionFeedbackEnabled(false); |
| setExpandEnabled(false); |
| |
| initializeSelection(); |
| |
| if (target != null) { |
| return super.determineOperation(target, operation, transferType, operations); |
| } else if (getInputElement(getSelection()) != null) { |
| setSelectionFeedbackEnabled(false); |
| setExpandEnabled(false); |
| return operation == DND.DROP_DEFAULT || operation == DND.DROP_MOVE ? DND.DROP_LINK : operation; |
| } else { |
| return DND.DROP_NONE; |
| } |
| } |
| } |