Search in sources :

Example 1 with DragAndDropCommand

use of org.eclipse.wst.common.ui.internal.dnd.DragAndDropCommand in project webtools.sourceediting by eclipse.

the class DTDContentOutlineConfiguration method getTransferDropTargetListeners.

/*
		 * (non-Javadoc)
		 * 
		 * @see org.eclipse.wst.sse.ui.views.contentoutline.ContentOutlineConfiguration#getTransferDropTargetListeners(org.eclipse.jface.viewers.TreeViewer)
		 */
public TransferDropTargetListener[] getTransferDropTargetListeners(final TreeViewer treeViewer) {
    if (fTransferDropTargetListeners == null) {
        fTransferDropTargetListeners = new TransferDropTargetListener[] { new TransferDropTargetListener() {

            public void dragEnter(DropTargetEvent event) {
            }

            public void dragLeave(DropTargetEvent event) {
            }

            public void dragOperationChanged(DropTargetEvent event) {
            }

            public void dragOver(DropTargetEvent event) {
                event.feedback = DND.FEEDBACK_SELECT;
                float feedbackFloat = getHeightInItem(event);
                if (feedbackFloat > 0.75) {
                    event.feedback = DND.FEEDBACK_INSERT_AFTER;
                } else if (feedbackFloat < 0.25) {
                    event.feedback = DND.FEEDBACK_INSERT_BEFORE;
                }
                event.feedback |= DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL;
            }

            public void drop(DropTargetEvent event) {
                if (event.operations != DND.DROP_NONE && LocalSelectionTransfer.getTransfer().getSelection() instanceof IStructuredSelection) {
                    IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer.getTransfer().getSelection();
                    if (selection != null && !selection.isEmpty() && event.item != null && event.item.getData() != null) {
                        /*
							 * the command uses these numbers instead of the
							 * feedback constants (even though it converts in
							 * the other direction as well)
							 */
                        float feedbackFloat = getHeightInItem(event);
                        final DragAndDropCommand command = new DTDDragAndDropManager().createCommand(event.item.getData(), feedbackFloat, event.operations, event.detail, selection.toList());
                        if (command != null && command.canExecute()) {
                            SafeRunnable.run(new SafeRunnable() {

                                public void run() throws Exception {
                                    command.execute();
                                }
                            });
                        }
                    }
                }
            }

            public void dropAccept(DropTargetEvent event) {
            }

            private float getHeightInItem(DropTargetEvent event) {
                if (event.item == null)
                    return .5f;
                if (event.item instanceof TreeItem) {
                    TreeItem treeItem = (TreeItem) event.item;
                    Control control = treeItem.getParent();
                    Point point = control.toControl(new Point(event.x, event.y));
                    Rectangle bounds = treeItem.getBounds();
                    return (float) (point.y - bounds.y) / (float) bounds.height;
                } else if (event.item instanceof TableItem) {
                    TableItem tableItem = (TableItem) event.item;
                    Control control = tableItem.getParent();
                    Point point = control.toControl(new Point(event.x, event.y));
                    Rectangle bounds = tableItem.getBounds(0);
                    return (float) (point.y - bounds.y) / (float) bounds.height;
                } else {
                    return 0.0F;
                }
            }

            public Transfer getTransfer() {
                return LocalSelectionTransfer.getTransfer();
            }

            public boolean isEnabled(DropTargetEvent event) {
                return getTransfer().isSupportedType(event.currentDataType);
            }
        } };
    }
    return fTransferDropTargetListeners;
}
Also used : Control(org.eclipse.swt.widgets.Control) TreeItem(org.eclipse.swt.widgets.TreeItem) SafeRunnable(org.eclipse.jface.util.SafeRunnable) TableItem(org.eclipse.swt.widgets.TableItem) TransferDropTargetListener(org.eclipse.jface.util.TransferDropTargetListener) Rectangle(org.eclipse.swt.graphics.Rectangle) LocalSelectionTransfer(org.eclipse.jface.util.LocalSelectionTransfer) Transfer(org.eclipse.swt.dnd.Transfer) DTDDragAndDropManager(org.eclipse.wst.dtd.ui.internal.dnd.DTDDragAndDropManager) DropTargetEvent(org.eclipse.swt.dnd.DropTargetEvent) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) Point(org.eclipse.swt.graphics.Point) DragAndDropCommand(org.eclipse.wst.common.ui.internal.dnd.DragAndDropCommand)

Aggregations

LocalSelectionTransfer (org.eclipse.jface.util.LocalSelectionTransfer)1 SafeRunnable (org.eclipse.jface.util.SafeRunnable)1 TransferDropTargetListener (org.eclipse.jface.util.TransferDropTargetListener)1 IStructuredSelection (org.eclipse.jface.viewers.IStructuredSelection)1 DropTargetEvent (org.eclipse.swt.dnd.DropTargetEvent)1 Transfer (org.eclipse.swt.dnd.Transfer)1 Point (org.eclipse.swt.graphics.Point)1 Rectangle (org.eclipse.swt.graphics.Rectangle)1 Control (org.eclipse.swt.widgets.Control)1 TableItem (org.eclipse.swt.widgets.TableItem)1 TreeItem (org.eclipse.swt.widgets.TreeItem)1 DragAndDropCommand (org.eclipse.wst.common.ui.internal.dnd.DragAndDropCommand)1 DTDDragAndDropManager (org.eclipse.wst.dtd.ui.internal.dnd.DTDDragAndDropManager)1