blob: f565712a9864e3b7ea3f56807d757dc568f09a07 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 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:
* Wind River - Pawel Piech - Initial Implementation - Drag/Drop to Expressions View (Bug 184057)
* IBM Corporation - further implementation and documentation
*******************************************************************************/
package org.eclipse.debug.internal.ui.views.variables;
import org.eclipse.core.runtime.Assert;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.util.TransferDragSourceListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.dnd.DragSourceAdapter;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.Transfer;
/**
* Drag adapter for the variables view and expressions view. Allows selected variables and
* expressions to be dragged.
*
* @see org.eclipse.debug.internal.ui.views.expression.ExpressionDropAdapter
* @since 3.4
*/
public class SelectionDragAdapter extends DragSourceAdapter implements TransferDragSourceListener {
/**
* The associated viewer for the adapter
*/
private TreeModelViewer fViewer;
/**
* Constructor, takes the viewer that contains the selection provider
* @param view the associated view, <b>must</b> implement <code>ISelectionProvider</code>
*/
public SelectionDragAdapter(TreeModelViewer viewer) {
Assert.isNotNull(viewer);
fViewer = viewer;
}
/* (non-Javadoc)
* @see org.eclipse.jface.util.TransferDragSourceListener#getTransfer()
*/
public Transfer getTransfer() {
return LocalSelectionTransfer.getTransfer();
}
/* (non-Javadoc)
* @see org.eclipse.swt.dnd.DragSourceAdapter#dragStart(org.eclipse.swt.dnd.DragSourceEvent)
*/
public void dragStart(DragSourceEvent event) {
ISelection selection = fViewer.getSelection();
LocalSelectionTransfer.getTransfer().setSelection(selection);
LocalSelectionTransfer.getTransfer().setSelectionSetTime(event.time & 0xFFFFFFFFL);
event.doit = !selection.isEmpty();
}
/* (non-Javadoc)
* @see org.eclipse.swt.dnd.DragSourceAdapter#dragSetData(org.eclipse.swt.dnd.DragSourceEvent)
*/
public void dragSetData(DragSourceEvent event) {
// For consistency set the data to the selection even though
// the selection is provided by the LocalSelectionTransfer
// to the drop target adapter.
event.data = LocalSelectionTransfer.getTransfer().getSelection();
}
/* (non-Javadoc)
* @see org.eclipse.swt.dnd.DragSourceAdapter#dragFinished(org.eclipse.swt.dnd.DragSourceEvent)
*/
public void dragFinished(DragSourceEvent event) {
LocalSelectionTransfer.getTransfer().setSelection(null);
LocalSelectionTransfer.getTransfer().setSelectionSetTime(0);
}
}