/******************************************************************************* * Copyright (c) 2000, 2005 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.draw2d; import java.util.ArrayList; import java.util.List; /** * A figure capable of holding any number of layers. Only layers can be added to this * figure. Layers are added to this figure with thier respective keys, which are used to * identify them. */ public class LayeredPane extends Layer { private List layerKeys = new ArrayList(); /** * Constructs a new layered pane with no layers in it. */ public LayeredPane() { setLayoutManager(new StackLayout()); } /** * Adds the given layer figure, identifiable with the given key, at the specified index. * While adding the layer, it informs the surrounding layers of the addition. * * @param figure the layer * @param layerKey the layer's key * @param index the index where the layer should be added * @since 2.0 */ public void add(IFigure figure, Object layerKey, int index) { if (index == -1) index = layerKeys.size(); super.add(figure, null, index); layerKeys.add(index, layerKey); } /** * Adds the given layer, identifiable with the given key, under the <i>after</i> layer * provided in the input. * * @param layer the layer * @param key the layer's key * @param after the layer under which the input layer should be added * @since 2.0 */ public void addLayerAfter(Layer layer, Object key, Object after) { int index = layerKeys.indexOf(after); add(layer, key, ++index); } /** * Adds the given layer, identifiable with the given key, above the <i>before</i> layer * provided in the input. * * @param layer the layer * @param key the layer's key * @param before the layer above which the input layer should be added * @since 2.0 */ public void addLayerBefore(Layer layer, Object key, Object before) { int index = layerKeys.indexOf(before); add(layer, key, index); } /** * Returns the layer identified by the key given in the input. * * @param key the key to identify the desired layer * @return the desired layer * @since 2.0 */ public Layer getLayer(Object key) { int index = layerKeys.indexOf(key); if (index == -1) return null; return (Layer)getChildren().get(index); } /** * Returns the layer at the specified index in this pane. * * @param index the index of the desired layer * @return the desired layer * @since 2.0 */ protected Layer getLayer(int index) { return (Layer)getChildren().get(index); } /** * @see org.eclipse.draw2d.IFigure#remove(org.eclipse.draw2d.IFigure) */ public void remove(IFigure figure) { int index = getChildren().indexOf(figure); if (index != -1) layerKeys.remove(index); super.remove(figure); } /** * Removes the layer identified by the given key from this layered pane. * * @param key the key of the layer to be removed * @since 2.0 */ public void removeLayer(Object key) { removeLayer(layerKeys.indexOf(key)); } /** * Removes the given layer from this layered pane. * * @deprecated call {@link IFigure#remove(IFigure)} instead * @param layer the layer to be removed * @since 2.0 */ public void removeLayer(IFigure layer) { remove(layer); } /** * Removes the layer at the specified index from the list of layers in this layered pane. * It collapses the layers, occupying the space vacated by the removed layer. * * @param index the index of the layer to be removed * @since 2.0 */ protected void removeLayer(int index) { Layer removeLayer = getLayer(index); remove(removeLayer); } }