blob: 6dbeb643015493c7efaac9b9ffdeb0675b9d8893 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 Oracle 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.viewer;
import java.util.List;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.editparts.LayerManager;
import org.eclipse.gef.requests.DropRequest;
import org.eclipse.jst.pagedesigner.validation.caret.IPositionMediator;
/**
* Abstract parent of all concrete client implmentation of IDropLocationStrategy's
* Clients should sub-class instead of implementing {@link IDropLocationStrategy} directly
* to avoid future API breakage
*
* @author cbateman
*
*/
public abstract class AbstractDropLocationStrategy implements IDropLocationStrategy
{
private final EditPartViewer _viewer;
/**
* @param viewer
*/
public AbstractDropLocationStrategy(EditPartViewer viewer)
{
_viewer = viewer;
}
public abstract DesignPosition calculateDesignPosition(EditPart host, Point p,
IPositionMediator validator);
public abstract List showTargetFeedback(EditPart host, DesignPosition position, DropRequest request);
/**
* @return the viewer in which this strategy may show target feedback
*/
protected final EditPartViewer getViewer()
{
return _viewer;
}
/**
* @return the figure for the feedback layer
*/
protected final IFigure getFeedbackLayer()
{
return LayerManager.Helper.find(_viewer.getRootEditPart().getContents()).getLayer(LayerConstants.FEEDBACK_LAYER);
}
/**
* Adds the specified <code>Figure</code> to the {@link LayerConstants#FEEDBACK_LAYER}.
* @param figure the feedback to add
*/
protected void addFeedback(IFigure figure) {
getFeedbackLayer().add(figure);
}
/**
* Removes the specified <code>Figure</code> to the {@link LayerConstants#FEEDBACK_LAYER}.
* @param figure the feedback to remove
*/
protected void removeFeedback(IFigure figure) {
getFeedbackLayer().remove(figure);
}
}