blob: 0a3cd405d36e5935d50709257ff8baf53acab419 [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 CSSTRGroupLayout extends CSSBlockFlowLayout {
/**
* @param cssfigure
*/
public CSSTRGroupLayout(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;
}
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.layout.CSSBlockFlowLayout#postValidate()
*/
public void postValidate() {
CSSTableLayout2 tableLayout = getTableLayoutContext();
if (tableLayout == null) {
super.postValidate();
} else {
Rectangle r = getTRGroupRect(tableLayout);
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();
}
}
}
/**
* @return
*/
private Rectangle getTRGroupRect(CSSTableLayout2 tableLayout) {
TableRowGroupInfo groupinfo = tableLayout.getGroupInfo(this
.getCSSFigure());
int rowIndex = groupinfo.getRowIndex();
int rowCount = groupinfo.getRowCount();
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 = (rowCount - 1) * tableLayout.getVSpacing();
for (int k = 0; k < rowCount; k++) {
height += tableLayout.getRowHeights()[rowIndex + k];
}
//ICSSFigure figure = groupinfo.getFigure();
return new Rectangle(tableLayout.getRowX(), y, tableLayout
.getRowWidth(), height);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.layout.CSSBlockFlowLayout#useLocalCoordinates()
*/
public boolean useLocalCoordinates() {
// if is in table, we don't use local coordinates.
return getTableLayoutContext() == null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.layout.CSSBlockFlowLayout#endBlock()
*/
protected void endBlock() {
if (getTableLayoutContext() == null) {
super.endBlock();
} else {
layoutLines();
}
}
// /* (non-Javadoc)
// * @see
// org.eclipse.jst.pagedesigner.css2.layout.FlowContainerLayout#layout()
// */
// protected void layout()
// {
// CSSTableLayout2 tableLayout = getTableLayoutContext();
// if (tableLayout == null)
// {
// // we are not in table? treat as block.
// super.layout();
// }
// else
// {
// // ok, we are in table. we need to layout our children.
// TableRowGroupInfo groupInfo =
// tableLayout.getGroupInfo(this.getCSSFigure());
// int[] rowHeights = tableLayout.getRowHeights();
// int vspacing = tableLayout.getVSpacing();
// int rowwidth = getCSSFigure().getBounds().width;// XXX: get from table
// layout?
// int grouprowindex = groupInfo.getRowIndex();
// List rows = groupInfo.getRowList();
// for (int i=0, size=rows.size(); i<size; i++)
// {
// TableRowInfo rowinfo = (TableRowInfo) rows.get(i);
// 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);
// figure.setBounds(rect);
// }
// }
// }
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.layout.CSSLayout#handlingBorderForBlock()
*/
public boolean handlingBorderForBlock() {
return false;
}
}