Skip to main content
summaryrefslogblamecommitdiffstats
blob: 6cce9545a8b1984ae6cd87e44833054099221e89 (plain) (tree)



















































































































































                                                                                    
/*******************************************************************************
 * Copyright (c) 2006 Sybase, Inc. 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:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.pagedesigner.css2.layout;

import java.util.ArrayList;
import java.util.List;

/**
 * A FlowBox that can contain other BlockInfos. The contained BlockInfos are
 * called <i>fragments </i>.
 * 
 * @author mengbo
 * @since 2.1
 */
public abstract class CompositeBox extends FlowBox {

	/**
	 * The contained fragments.
	 */
	protected List _fragments = new ArrayList();

	int _recommendedWidth;

	int _recommendedHeight;

	/**
	 * Adds the specified FlowBox. Updates the width, height, and ascent
	 * properties.
	 * 
	 * @param block
	 *            the FlowBox being added
	 */
	public void add(FlowBox block) {
		// The order is critical.see the first "if" block in the unionInfo()
		// method.
		unionInfo(block);
		_fragments.add(block);
	}

	/**
	 * Removes all owned fragments and invalidates this CompositeBox.
	 */
	public void clear() {
		_fragments.clear();
		resetInfo();
	}

	/**
	 * Overridden to ensure that the CompositeBox is valid.
	 * 
	 * @see FlowBox#getBounds()
	 */
	// public Rectangle getBounds() {
	// validate();
	// return this;
	// }
	/**
	 * @return the List of fragments
	 */
	public List getFragments() {
		return _fragments;
	}

	/**
	 * Returns the recommended width for this CompositeBox.
	 * 
	 * @return the recommended width
	 */
	public int getRecommendedWidth() {
		return _recommendedWidth;
	}

	/**
	 * Returns the recommended height for this compositebox.
	 * 
	 * @return
	 */
	public int getRecommendedHeight() {
		return _recommendedHeight;
	}

	// public int getInnerTop() {
	// validate();
	// return y;
	// }

	/**
	 * resets fields before unioning the data from the fragments.
	 */
	protected void resetInfo() {
		_width = _height = 0;
	}

	/**
	 * Sets the recommended width for this CompositeBox.
	 * 
	 * @param w
	 *            the width
	 */
	public void setRecommendedWidth(int w) {
		_recommendedWidth = w;
	}

	public void setRecommendedHeight(int h) {
		_recommendedHeight = h;
	}

	/**
	 * unions the fragment's width, height, and ascent into this composite.
	 * 
	 * @param box
	 *            the fragment
	 */
	protected void unionInfo(FlowBox box) {
		int right = Math.max(_x + _width, box._x + box._width);
		int bottom = Math.max(_y + _height, box._y + box._height);
		_x = Math.min(_x, box._x);
		_y = Math.min(_y, box._y);
		_width = right - _x;
		_height = bottom - _y;
	}

	public int getContentWidth() {
		return getWidth() - getBorderPaddingWidth();
	}

	public int getContentHeight() {
		return getHeight() - getBorderPaddingHeight();
	}

	public int getRecommendedContentWidth() {
		return Math.max(0, getRecommendedWidth() - getBorderPaddingWidth());
	}
	//
	// public int getRecommendedContentHeight()
	// {
	// return Math.max(0, getRecommendedHeight() - getBorderPaddingHeight());
	// }
}

Back to the top