blob: 088dc87a0c4ef9bade9c586839e5d5e91cea17fc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2010 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.gef.editpolicies;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.AccessibleHandleProvider;
import org.eclipse.gef.Handle;
import org.eclipse.gef.LayerConstants;
/**
* A SelectionEditPolicy which manages a List of handles provided by the
* subclass. Handles are Figures which are added to the HANDLE layer, and
* generally return a DragTracker for dragging them. Handles are accessible for
* keyboard use if they return an accessible location.
* <P>
* SelectionHandlesEditPolicy implements
* {@link org.eclipse.core.runtime.IAdaptable} for accessibility support. If any
* of the managed Handles provide accesible locations, then a
* {@link org.eclipse.gef.AccessibleHandleProvider} is automatically created.
*
* @since 2.0
*/
public abstract class SelectionHandlesEditPolicy extends SelectionEditPolicy
implements IAdaptable {
/**
* the List of handles
*/
protected List handles;
/**
* Adds the handles to the handle layer.
*/
protected void addSelectionHandles() {
removeSelectionHandles();
IFigure layer = getLayer(LayerConstants.HANDLE_LAYER);
handles = createSelectionHandles();
for (int i = 0; i < handles.size(); i++)
layer.add((IFigure) handles.get(i));
}
/**
* Subclasses must implement to provide the list of handles.
*
* @return List of handles; cannot be <code>null</code>
*/
protected abstract List createSelectionHandles();
/**
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
*/
public Object getAdapter(Class key) {
if (key == AccessibleHandleProvider.class)
return new AccessibleHandleProvider() {
public List getAccessibleHandleLocations() {
List result = new ArrayList();
if (handles != null) {
for (int i = 0; i < handles.size(); i++) {
Point p = ((Handle) handles.get(i))
.getAccessibleLocation();
if (p != null)
result.add(p);
}
}
return result;
}
};
return null;
}
/**
* Implemented to remove the handles.
*
* @see org.eclipse.gef.editpolicies.SelectionEditPolicy#hideSelection()
*/
protected void hideSelection() {
removeSelectionHandles();
}
/**
* removes the selection handles from the selection layer.
*/
protected void removeSelectionHandles() {
if (handles == null)
return;
IFigure layer = getLayer(LayerConstants.HANDLE_LAYER);
for (int i = 0; i < handles.size(); i++)
layer.remove((IFigure) handles.get(i));
handles = null;
}
/**
* Implemented to add the selection handles
*
* @see org.eclipse.gef.editpolicies.SelectionEditPolicy#showSelection()
*/
protected void showSelection() {
addSelectionHandles();
}
}