blob: e04176434ef8037ad783b68408cb1d26790d98bd [file] [log] [blame]
/*******************************************************************************
* 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.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.draw2d.geometry.Dimension;
/**
* Figures using a DelegatingLayout as their layout manager give location
* responsibilities to their children. The children of a Figure using a
* DelegatingLayout should have a {@link Locator Locator} as a constraint whose
* {@link Locator#relocate(IFigure target) relocate} method is responsible for
* placing the child.
*/
public class DelegatingLayout extends AbstractLayout {
private Map constraints = new HashMap();
/**
* Calculates the preferred size of the given Figure. For the
* DelegatingLayout, this is the largest width and height values of the
* passed Figure's children.
*
* @param parent
* the figure whose preferred size is being calculated
* @param wHint
* the width hint
* @param hHint
* the height hint
* @return the preferred size
* @since 2.0
*/
protected Dimension calculatePreferredSize(IFigure parent, int wHint,
int hHint) {
List children = parent.getChildren();
Dimension d = new Dimension();
for (int i = 0; i < children.size(); i++) {
IFigure child = (IFigure) children.get(i);
d.union(child.getPreferredSize());
}
return d;
}
/**
* @see org.eclipse.draw2d.LayoutManager#getConstraint(org.eclipse.draw2d.IFigure)
*/
public Object getConstraint(IFigure child) {
return constraints.get(child);
}
/**
* Lays out the given figure's children based on their {@link Locator}
* constraint.
*
* @param parent
* the figure whose children should be layed out
*/
public void layout(IFigure parent) {
List children = parent.getChildren();
for (int i = 0; i < children.size(); i++) {
IFigure child = (IFigure) children.get(i);
Locator locator = (Locator) constraints.get(child);
if (locator != null) {
locator.relocate(child);
}
}
}
/**
* Removes the locator for the given figure.
*
* @param child
* the child being removed
*/
public void remove(IFigure child) {
constraints.remove(child);
}
/**
* Sets the constraint for the given figure.
*
* @param figure
* the figure whose contraint is being set
* @param constraint
* the new constraint
*/
public void setConstraint(IFigure figure, Object constraint) {
super.setConstraint(figure, constraint);
if (constraint != null)
constraints.put(figure, constraint);
}
}