package org.eclipse.uml2.diagram.sequence.figures; import java.util.HashMap; import java.util.Map; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Layer; import org.eclipse.draw2d.LayeredPane; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.StackLayout; import org.eclipse.uml2.diagram.common.layered.MultiLayeredContainer; public class MultiLayeredContentPane extends LayeredPane implements MultiLayeredContainer { private final Layer myDefaultLayerContentPane; private final Map<String, Layer> myLayerKeyToContentPane = new HashMap<String, Layer>(3); public MultiLayeredContentPane () { setBorder(new MarginBorder(5)); setOpaque(false); setLayoutManager(new DebugStackLayout()); //setBackgroundColor(ColorConstants.yellow); addLayer(BACKGROUND_LAYER); myDefaultLayerContentPane = addLayer(MIDDLE_LAYER); addLayer(FOREGROUND_LAYER); } private Layer addLayer(String key) { Layer layer = new LayerWithKey(key); layer.setOpaque(false); if (MIDDLE_LAYER.equals(key)){ layer.setOpaque(true); } add(layer, key); Layer contentPane = ShadowHelper.addChildrenShadowLayer(layer, key); contentPane.setLayoutManager(new InteractionContentsLayout()); myLayerKeyToContentPane.put(key, contentPane); return contentPane; } protected void paintFigure(Graphics graphics) { // } public Layer getLayerContentPane(String key) { return myLayerKeyToContentPane.get(key); } public Layer getDefaultLayerContentPane() { return myDefaultLayerContentPane; } private static class LayerWithKey extends Layer { private final String myDebugKey; public LayerWithKey(String debugKey){ myDebugKey = debugKey; } @Override public String toString() { return "Layer: [" + myDebugKey + "]"; } } private static class DebugStackLayout extends StackLayout { @Override public void layout(IFigure figure) { super.layout(figure); } } }