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

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

/*******************************************************************************
* 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 org.eclipse.draw2d.LayoutManager;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.jst.pagedesigner.css2.ICSSStyle;
import org.eclipse.jst.pagedesigner.css2.layout.ICSSFigure;
import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID;
import org.eclipse.jst.pagedesigner.css2.value.Length;
import org.eclipse.jst.pagedesigner.utils.IntFlexArray;

/**
* @author mengbo
* @version 1.5
*/
public class TableCellInfo extends TableItemInfo {
  int _rowSpan = 1;

  int _colSpan = 1;

  int _colIndex;

  int _rowIndex;

  int _cellWidth = 0;

  int _cellHeight = 0;

  /**
   * @param childfigure
   */
  public TableCellInfo(ICSSFigure childfigure) {
    super(childfigure);
  }

  /**
   * @return column span
   */
  public int getColSpan() {
    return _colSpan;
  }

  /**
   * @return row span
   */
  public int getRowSpan() {
    return _rowSpan;
  }

  /**
   * @return the row index
   */
  public int getRowIndex() {
    return _rowIndex;
  }

  /**
   * @return the column index
   */
  public int getColumnIndex() {
    return _colIndex;
  }

  /**
   * @return the minimum cell dimensions
   */
  public Dimension getMinCWDimension() {
    return getFigure().getPreferredSize(_cellWidth, _cellHeight);
  }

  /**
   * @return the max cell dimensions
   */
  public Dimension getMaxCWDimension() {
    ICSSFigure figure = getFigure();
    LayoutManager layout = figure.getLayoutManager();
    if (layout instanceof CSSTableCellLayout) {
      Dimension d = ((CSSTableCellLayout) layout).getMaxContentWidthSize(
          figure, _cellWidth, _cellHeight);
      return d;
    }

        // should not happen
        return getMinCWDimension();
  }

  /**
   * @param context
   */
  public void calculateCellInfo(TableInfoContext context) {
    ICSSStyle style = this.getStyle();
    _rowSpan = style.getRowSpan();
    _colSpan = style.getColSpan();

    // FIXME: we don't support rowspan and colspan to be 0.
    // by spec, 0 means span from current col/row to end.
    if (_rowSpan <= 0) {
      _rowSpan = 1;
    }
    if (_colSpan <= 0) {
      _colSpan = 1;
    }

    _rowIndex = context.getCurrentRow();

    IntFlexArray array = context.getIntFlexArray();
    int currentCol = context.getCurrentCol();

    // find a cell that is not occupied by cells in previous rows.
    while (array.getAt(currentCol) > 0) {
      currentCol++;
    }

    // ok, now array.getAt(currentCol) == 0
    _colIndex = currentCol;

    for (int i = 0; i < _colSpan; i++, currentCol++) {
      array.setAt(currentCol, _rowSpan);
    }
    context.setCurrentCol(currentCol);
  }

  /**
   * @param tableInfo
   * @param tablewidth
   *            table width
   */
  public void calculateWidth(TableInfo tableInfo, int tablewidth) {
    ICSSStyle style = this.getFigure().getCSSStyle();
    if (style == null) {
      _cellWidth = -1;
    } else {
      Object width = style.getStyleProperty(ICSSPropertyID.ATTR_WIDTH);
      Length recommendedWidth = (width instanceof Length) ? (Length) width
          : null;

      int rw = 0;
      if (recommendedWidth == null || recommendedWidth.getValue() <= 0) {
        rw = 0;
      } else {
        if (recommendedWidth.isPercentage()) {
          // percentage width is used for remaining width
          // distribution, so not used here.
          int colspan = this.getColSpan();
          for (int i = 0; i < colspan; i++) {
            tableInfo.setWidthPercentage(this.getColumnIndex() + i,
                recommendedWidth.getValue() / colspan);
          }
        } else {
          rw = recommendedWidth.getValue();
          if (!style.isSizeIncludeBorderPadding()) {
            rw += style.getBorderInsets().getWidth()
                + style.getPaddingInsets().getWidth();
          }
          if (this.getColSpan() == 1) {
            tableInfo.getWidthSpecified()[this.getColumnIndex()] = true;
          }
        }

      }
      _cellWidth = rw;
    }

  }

  /**
   * @param tableInfo
   * @param tableheight
   */
  public void calculateHeight(TableInfo tableInfo, int tableheight) {
    ICSSStyle style = this.getFigure().getCSSStyle();
    if (style == null) {
      _cellHeight = -1;
    } else {
      Object height = style.getStyleProperty(ICSSPropertyID.ATTR_HEIGHT);
      Length recommendedHeight = (height instanceof Length) ? (Length) height
          : null;

      int rh = 0;
      if (recommendedHeight == null || recommendedHeight.getValue() <= 0) {
        rh = 0;
      } else {
        if (recommendedHeight.isPercentage()) {
          int rowspan = this.getRowSpan();
          for (int i = 0; i < rowspan; i++) {
            tableInfo.setHeightPercentage(this.getRowIndex() + i,
                recommendedHeight.getValue() / rowspan);
          }
        } else {
          rh = recommendedHeight.getValue();
        }
        if (!style.isSizeIncludeBorderPadding()) {
          rh += style.getBorderInsets().getHeight()
              + style.getPaddingInsets().getHeight();
        }
      }
      _cellHeight = rh;
    }

  }

  /**
   * @return the height
   */
  public int getHeight() {
    return _cellHeight;
  }
}
TOP

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

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.