/******************************************************************************* * Copyright (c) 2000, 2006 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.ui.internal; import java.util.ArrayList; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.ui.IMemento; /** * DetachedPlaceHolder is the placeholder for detached views. * */ public class DetachedPlaceHolder extends PartPlaceholder implements ILayoutContainer { ArrayList children = new ArrayList(); Rectangle bounds; /** * DetachedPlaceHolder constructor comment. * @param id java.lang.String * @param bounds the size of the placeholder */ public DetachedPlaceHolder(String id, Rectangle bounds) { super(id); this.bounds = bounds; } /** * Add a child to the container. */ public void add(LayoutPart newPart) { if (!(newPart instanceof PartPlaceholder)) { return; } children.add(newPart); } /** * Return true if the container allows its * parts to show a border if they choose to, * else false if the container does not want * its parts to show a border. * @return boolean */ public boolean allowsBorder() { return false; } public Rectangle getBounds() { return bounds; } /** * Returns a list of layout children. */ public LayoutPart[] getChildren() { LayoutPart result[] = new LayoutPart[children.size()]; children.toArray(result); return result; } /** * Remove a child from the container. */ public void remove(LayoutPart part) { children.remove(part); } /** * Replace one child with another */ public void replace(LayoutPart oldPart, LayoutPart newPart) { remove(oldPart); add(newPart); } /** * Restore the state from the memento. * @param memento */ public void restoreState(IMemento memento) { // Read the bounds. Integer bigInt; bigInt = memento.getInteger(IWorkbenchConstants.TAG_X); int x = bigInt.intValue(); bigInt = memento.getInteger(IWorkbenchConstants.TAG_Y); int y = bigInt.intValue(); bigInt = memento.getInteger(IWorkbenchConstants.TAG_WIDTH); int width = bigInt.intValue(); bigInt = memento.getInteger(IWorkbenchConstants.TAG_HEIGHT); int height = bigInt.intValue(); bounds = new Rectangle(x, y, width, height); // Restore the placeholders. IMemento childrenMem[] = memento .getChildren(IWorkbenchConstants.TAG_VIEW); for (int i = 0; i < childrenMem.length; i++) { PartPlaceholder holder = new PartPlaceholder(childrenMem[i] .getString(IWorkbenchConstants.TAG_ID)); holder.setContainer(this); children.add(holder); } } /** * Save state to the memento. * @param memento */ public void saveState(IMemento memento) { // Save the bounds. memento.putInteger(IWorkbenchConstants.TAG_X, bounds.x); memento.putInteger(IWorkbenchConstants.TAG_Y, bounds.y); memento.putInteger(IWorkbenchConstants.TAG_WIDTH, bounds.width); memento.putInteger(IWorkbenchConstants.TAG_HEIGHT, bounds.height); // Save the views. for (int i = 0; i < children.size(); i++) { IMemento childMem = memento .createChild(IWorkbenchConstants.TAG_VIEW); LayoutPart child = (LayoutPart) children.get(i); childMem.putString(IWorkbenchConstants.TAG_ID, child.getID()); } } public void findSashes(LayoutPart part, PartPane.Sashes sashes) { ILayoutContainer container = getContainer(); if (container != null) { container.findSashes(this, sashes); } } /* (non-Javadoc) * @see org.eclipse.ui.internal.ILayoutContainer#allowsAutoFocus() */ public boolean allowsAutoFocus() { return false; } }