Skip to main content
summaryrefslogtreecommitdiffstats
blob: 75d6a0e9f38ba933dc88b3e3205bd8fa90c6159f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*******************************************************************************
 * 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;
	}

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

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

	/**
	 * @return the content width
	 */
	public int getContentWidth() {
		return getWidth() - getBorderPaddingWidth();
	}

	/**
	 * @return the content height
	 */
	public int getContentHeight() {
		return getHeight() - getBorderPaddingHeight();
	}

	/**
	 * @return the recommended content width
	 */
	public int getRecommendedContentWidth() {
		return Math.max(0, getRecommendedWidth() - getBorderPaddingWidth());
	}
	//
	// public int getRecommendedContentHeight()
	// {
	// return Math.max(0, getRecommendedHeight() - getBorderPaddingHeight());
	// }
}

Back to the top