blob: 29042b641fa949abc4a8dc47b64be72942f5dcb5 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}