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