blob: 12590c12c9530021c4cb4d1ec0b1197afa0c609f [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.table;
import java.util.List;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LayoutManager;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.jst.pagedesigner.css2.layout.CSSBlockFlowLayout;
import org.eclipse.jst.pagedesigner.css2.layout.CSSFigure;
import org.eclipse.jst.pagedesigner.css2.layout.FlowFigure;
/**
* @author mengbo
* @version 1.5
*/
public class CSSTRLayout extends CSSBlockFlowLayout {
/**
* @param cssfigure
*/
public CSSTRLayout(CSSFigure cssfigure) {
super(cssfigure);
}
/**
* @return the parent figure of TRGroup should be table figure. If so, return the
* corresponding table layout.
*/
public CSSTableLayout2 getTableLayoutContext() {
IFigure parent = getCSSFigure().getParent();
if (parent != null) {
LayoutManager parentLayout = parent.getLayoutManager();
if (parentLayout instanceof CSSTableLayout2) {
return (CSSTableLayout2) parentLayout;
} else if (parentLayout instanceof CSSTRGroupLayout) {
return ((CSSTRGroupLayout) parentLayout)
.getTableLayoutContext();
}
}
return null;
}
/**
* @return the group layout or null
*/
public CSSTRGroupLayout getTRGroupLayout() {
IFigure parent = getCSSFigure().getParent();
if (parent != null) {
LayoutManager parentLayout = parent.getLayoutManager();
if (parentLayout instanceof CSSTRGroupLayout) {
return ((CSSTRGroupLayout) parentLayout);
}
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.layout.CSSBlockFlowLayout#postValidate()
*/
public void postValidate() {
CSSTableLayout2 tableLayout = getTableLayoutContext();
if (tableLayout == null) {
// we are not in table? treat as block.
super.postValidate();
} else {
Rectangle r = getTRRect(tableLayout, getTRGroupLayout());
if (r != null) {
_blockBox.setXYWidthHeight(r);
getCSSFigure().setBounds(r);
List list = getCSSFigure().getChildren();
for (int i = 0; i < list.size(); i++) {
((FlowFigure) list.get(i)).postValidate();
}
} else {
super.postValidate();
}
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.layout.CSSBlockFlowLayout#endBlock()
*/
protected void endBlock() {
if (this.getTableLayoutContext() == null) {
super.endBlock();
} else {
layoutLines();
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.layout.CSSBlockFlowLayout#useLocalCoordinates()
*/
public boolean useLocalCoordinates() {
return this.getTableLayoutContext() == null;
}
private Rectangle getTRRect(CSSTableLayout2 tableLayout,
CSSTRGroupLayout groupLayout) {
TableRowInfo rowinfo = tableLayout.getRowInfo(this.getCSSFigure());
int rowIndex = rowinfo.getRowIndex();
int y = (rowIndex + 1) * tableLayout.getVSpacing();
for (int k = 0; k < rowIndex; k++) {
y += tableLayout.getRowHeights()[k];
}
if (tableLayout.getCaptionInfo() != null
&& "top".equalsIgnoreCase(tableLayout.getCaptionInfo().getAlign())) //$NON-NLS-1$
{
y += tableLayout.getCaptionSize().height;
}
int height = tableLayout.getRowHeights()[rowIndex];
//ICSSFigure figure = rowinfo.getFigure();
return new Rectangle(tableLayout.getRowX(), y, tableLayout
.getRowWidth(), height);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.layout.CSSLayout#handlingBorderForBlock()
*/
public boolean handlingBorderForBlock() {
return false;
}
}