| /******************************************************************************* |
| * 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); |
| } |
| |
| } |