blob: 9bf3fc6a07b5e209c1306da1ca628e10e51c416c [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);
}
/**
* the parent figure of TRGroup should be table figure. If so, return the
* corresponding table layout.
*
* @return
*/
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;
}
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);
}
/**
* @param tableLayout
* @param groupLayout
* @return
*/
// private Rectangle getTRRect(CSSTableLayout2 tableLayout, CSSTRGroupLayout
// groupLayout)
// {
// TableRowGroupInfo groupInfo = null;
// if (groupLayout != null)
// {
// groupInfo = tableLayout.getGroupInfo(groupLayout.getCSSFigure());
// }
// if (groupInfo != null)
// {
// // This TR is in tr group
// int[] rowHeights = tableLayout.getRowHeights();
// int vspacing = tableLayout.getVSpacing();
// int rowwidth = tableLayout.getRowWidth();
// int grouprowindex = groupInfo.getRowIndex();
// TableRowInfo rowinfo = tableLayout.getRowInfo(this.getCSSFigure());
// ICSSFigure figure = rowinfo.getFigure();
//
// int y = 0;
// int rowindex = rowinfo.getRowIndex();
// for (int row = grouprowindex; row < rowindex; row++)
// {
// y += rowHeights[row];
// y += vspacing;
// }
// int height = rowHeights[rowindex];
// Rectangle rect = new Rectangle(0, y, rowwidth, height);
// return rect;
// }
// else
// {
// TableRowInfo rowinfo = tableLayout.getRowInfo(this.getCSSFigure());
// int rowIndex = rowinfo.getRowIndex();
// int y = (rowIndex+1) * tableLayout.getVSpacing();
// int rowHeights[] = tableLayout.getRowHeights();
// for (int k=0; k<rowIndex; k++)
// {
// y += rowHeights[k];
// }
// int height = rowHeights[rowIndex];
// 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;
}
}