Package org.eclipse.jst.pagedesigner.css2.layout.table

Source Code of org.eclipse.jst.pagedesigner.css2.layout.table.CSSTRGroupLayout

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

Related Classes of org.eclipse.jst.pagedesigner.css2.layout.table.CSSTRGroupLayout

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.