blob: d7b8b0b099c09f6e9080c649ae969436aa397dcf [file] [log] [blame]
/*******************************************************************************
* 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.List;
import org.eclipse.draw2d.PositionConstants;
/**
* A <code>FlowFigure</code> represented by a single {@link BlockBox}fragment
* containing one or more lines. A BlockFlow is a creator of LineBoxes, which
* its children require during layout. A BlockFlow can be thought of as a
* paragraph.
* <P>
* BlockFlows should be nested inside other BlockFlows, but it is also valid to
* place them in InlineFlows. {@link FlowPage}can be used as a "root" block and
* can be added to normal draw2d Figures.
* <P>
* Only {@link FlowFigure}s can be added to a BlockFlow.
*/
/*package*/ class BlockFlow extends FlowFigure {
final BlockBox _blockBox;
private int _aligment;
/**
* Constructs a new BlockFlow.
*/
public BlockFlow() {
setLayoutManager(createDefaultFlowLayout());
_blockBox = createBlockBox();
}
BlockBox createBlockBox() {
return new BlockBox();
}
/**
* @return the default flow layout
*
*/
protected FlowFigureLayout createDefaultFlowLayout() {
return new BlockFlowLayout(this);
}
/**
* Returns the BlockBox associated with this.
*
* @return This BlockFlow's BlockBox
*/
protected BlockBox getBlockBox() {
return _blockBox;
}
/**
* Returns the horizontal aligment.
*
* @return the hotizontal aligment
*/
public int getHorizontalAligment() {
return _aligment & PositionConstants.LEFT_CENTER_RIGHT;
}
/**
* @see org.eclipse.jst.pagedesigner.css2.layout.FlowFigure#postValidate()
*/
public void postValidate() {
setBounds(getBlockBox().toRectangle().expand(getInsets()));
List v = getChildren();
for (int i = 0, n = v.size(); i < n; i++) {
((FlowFigure) v.get(i)).postValidate();
}
}
/**
* Sets the horitontal aligment of the block. Valid values are:
* <UL>
* <LI>{@link org.eclipse.draw2d.PositionConstants#LEFT}
* <LI>{@link org.eclipse.draw2d.PositionConstants#RIGHT}
* <LI>{@link org.eclipse.draw2d.PositionConstants#CENTER}
*
* @param value
* the aligment
*/
public void setHorizontalAligment(int value) {
if (!(value == PositionConstants.LEFT
|| value == PositionConstants.RIGHT || value == PositionConstants.CENTER)) {
throw new IllegalArgumentException(
"Horizontal Aligment must be one of: LEFT, CENTER, RIGHT");
}
this._aligment &= ~PositionConstants.LEFT_CENTER_RIGHT;
this._aligment |= value;
revalidate();
}
/**
* @see org.eclipse.draw2d.Figure#useLocalCoordinates()
*/
protected boolean useLocalCoordinates() {
return true;
}
}