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