/*******************************************************************************
* Copyright (c) 2010, 2015 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:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.e4.ui.workbench.addons.dndaddon;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
/**
*
*/
abstract class DropAgent {
protected DnDManager dndManager;
/**
* @param manager
*/
public DropAgent(DnDManager manager) {
dndManager = manager;
}
public void reactivatePart(MUIElement dragElement) {
IEclipseContext context = dndManager.getModelService().getContainingContext(dragElement);
if (context == null) {
return;
}
EPartService ps = context.get(EPartService.class);
if (ps == null) {
return;
}
MPart partToActivate = null;
if (dragElement instanceof MPart) {
partToActivate = (MPart) dragElement;
} else if (dragElement instanceof MPlaceholder) {
MPlaceholder ph = (MPlaceholder) dragElement;
if (ph.getRef() instanceof MPart) {
partToActivate = (MPart) ph.getRef();
}
} else if (dragElement instanceof MPartStack) {
MPartStack stack = (MPartStack) dragElement;
if (stack.getSelectedElement() instanceof MPart) {
partToActivate = (MPart) stack.getSelectedElement();
} else if (stack.getSelectedElement() instanceof MPlaceholder) {
MPlaceholder ph = (MPlaceholder) stack.getSelectedElement();
if (ph.getRef() instanceof MPart) {
partToActivate = (MPart) ph.getRef();
}
}
}
if (partToActivate != null) {
ps.activate(null);
ps.activate(partToActivate);
}
}
public abstract boolean canDrop(MUIElement dragElement, DnDInfo info);
public abstract boolean drop(MUIElement dragElement, DnDInfo info);
public abstract boolean track(MUIElement dragElement, DnDInfo info);
public Cursor getCursor(Display display, MUIElement dragElement, DnDInfo info) {
return display.getSystemCursor(SWT.CURSOR_HAND);
}
public Rectangle getRectangle(MUIElement dragElement, DnDInfo info) {
return null;
}
public void dragEnter(MUIElement dragElement, DnDInfo info) {
}
public void dragLeave(MUIElement dragElement, DnDInfo info) {
}
/**
* This agent is being disposed
*/
public void dispose() {
}
}