blob: 985a49925e1849dcf81536a9cdaad67270ee9adc [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 org.eclipse.draw2d.geometry.Dimension;
/**
* Provides generic support for LayoutManagers.
*/
public abstract class AbstractLayout implements LayoutManager {
/**
* The cached preferred size.
*/
protected Dimension preferredSize;
/**
* Whether or not this layout pays attention to visiblity of figures when
* calculating its bounds. By default, false.
*/
protected boolean isObservingVisibility = false;
/**
* This method is now {@link #calculatePreferredSize(IFigure, int, int)}.
*
* @param container
* the figure
*/
protected final void calculatePreferredSize(IFigure container) {
}
/**
* Calculates the preferred size of the given figure, using width and height
* hints.
*
* @param container
* The figure
* @param wHint
* The width hint
* @param hHint
* The height hint
* @return The preferred size
*/
protected abstract Dimension calculatePreferredSize(IFigure container,
int wHint, int hHint);
/**
* Returns the preferred size of the figure's border.
*
* @param container
* The figure that the border is on
* @return The border's preferred size
*/
protected Dimension getBorderPreferredSize(IFigure container) {
if (container.getBorder() == null)
return new Dimension();
return container.getBorder().getPreferredSize(container);
}
/**
* Returns the constraint for the given figure.
*
* @param child
* The figure
* @return The constraint
*/
public Object getConstraint(IFigure child) {
return null;
}
/**
* This method is now {@link #getMinimumSize(IFigure, int, int)}.
*
* @param container
* the figure
*/
public final void getMinimumSize(IFigure container) {
}
/**
* @see org.eclipse.draw2d.LayoutManager#getMinimumSize(IFigure, int, int)
*/
public Dimension getMinimumSize(IFigure container, int wHint, int hHint) {
return getPreferredSize(container, wHint, hHint);
}
/**
* Returns the preferred size of the given figure, using width and height
* hints. If the preferred size is cached, that size is returned. Otherwise,
* {@link #calculatePreferredSize(IFigure, int, int)} is called.
*
* @param container
* The figure
* @param wHint
* The width hint
* @param hHint
* The height hint
* @return The preferred size
*/
public Dimension getPreferredSize(IFigure container, int wHint, int hHint) {
if (preferredSize == null)
preferredSize = calculatePreferredSize(container, wHint, hHint);
return preferredSize;
}
/**
* This method is now {@link #getPreferredSize(IFigure, int, int)}.
*
* @param container
* the figure
*/
public final void getPreferredSize(IFigure container) {
}
/**
* @see org.eclipse.draw2d.LayoutManager#invalidate()
*/
public void invalidate() {
preferredSize = null;
}
/**
* Removes any cached information about the given figure.
*
* @param child
* the child that is invalidated
*/
protected void invalidate(IFigure child) {
invalidate();
}
/**
* Returns whether or not this layout pays attention to visiblity when
* calculating its bounds.
*
* @return true if invisible figures should not contribute to this layout's
* bounds.
*/
public boolean isObservingVisibility() {
return isObservingVisibility;
}
/**
* Removes the given figure from this LayoutManager's list of figures.
*
* @param child
* The figure to remove
*/
public void remove(IFigure child) {
invalidate();
}
/**
* Sets the constraint for the given figure.
*
* @param child
* the child
* @param constraint
* the child's new constraint
*/
public void setConstraint(IFigure child, Object constraint) {
invalidate(child);
}
/**
* Sets isObservingVisibility to the given value.
*
* @param newValue
* <code>true</code> if visibility should be observed
*/
public void setObserveVisibility(boolean newValue) {
if (isObservingVisibility == newValue)
return;
isObservingVisibility = newValue;
}
}