/* GNU GENERAL LICENSE Copyright (C) 2006 The Lobo Project. Copyright (C) 2014 - 2017 Lobo Evolution This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either verion 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General License for more details. You should have received a copy of the GNU General Public along with this program. If not, see <http://www.gnu.org/licenses/>. Contact info: lobochief@users.sourceforge.net; ivan.difrancesco@yahoo.it */ /* * Created on Dec 3, 2005 */ package org.lobobrowser.html.renderer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.lobobrowser.html.domimpl.HTMLTableElementImpl; import org.lobobrowser.html.style.CSSValuesProperties; import org.lobobrowser.html.style.HtmlLength; import org.lobobrowser.html.style.HtmlValues; import org.lobobrowser.w3c.html.HTMLTableElement; /** * The Class VirtualCell. */ public class VirtualCell implements CSSValuesProperties{ /** The Constant logger. */ private static final Logger logger = LogManager.getLogger(VirtualCell.class); /** The actual cell. */ private final RTableCell actualCell; /** The is top left. */ private final boolean isTopLeft; /** The column. */ private int column; /** The row. */ private int row; /** * Instantiates a new virtual cell. * * @param cell * the cell * @param isTopLeft * the is top left */ public VirtualCell(RTableCell cell, boolean isTopLeft) { actualCell = cell; this.isTopLeft = isTopLeft; } /** Checks if is top left. * * @return true, if is top left */ public boolean isTopLeft() { return this.isTopLeft; } /** Gets the column. * * @return the column */ public int getColumn() { return column; } /** Sets the column. * * @param column * the new column */ public void setColumn(int column) { this.column = column; } /** Gets the row. * * @return the row */ public int getRow() { return row; } /** Sets the row. * * @param row * the new row */ public void setRow(int row) { this.row = row; } /** Gets the actual cell. * * @return the actual cell */ public RTableCell getActualCell() { return actualCell; } /** Gets the height length. * * @return the height length */ public HtmlLength getHeightLength() { // TODO: Does not consider cellpadding and border RTableCell cell = this.actualCell; String heightText = cell.getHeightText(); HtmlLength length; try { if (INHERIT.equals(heightText)) { Object parent = cell.getParent().getModelNode(); if (parent instanceof HTMLTableElement) { HTMLTableElementImpl el = (HTMLTableElementImpl) parent; heightText = el.getCurrentStyle().getHeight(); } } length = heightText == null ? null : new HtmlLength(heightText); } catch (Exception err) { err.printStackTrace(); length = null; } if (length != null) { length.divideBy(cell.getRowSpan()); } return length; } /** Gets the width length. * * @return the width length */ public HtmlLength getWidthLength() { RTableCell cell = this.actualCell; String widthText = cell.getWidthText(); HtmlLength length; try { if (INHERIT.equals(widthText)) { Object parent = cell.getParent().getModelNode(); if (parent instanceof HTMLTableElement) { HTMLTableElementImpl el = (HTMLTableElementImpl) parent; widthText = el.getCurrentStyle().getWidth(); } } length = widthText == null ? null : new HtmlLength(widthText); } catch (Exception err) { length = null; } if (length != null) { length.divideBy(cell.getColSpan()); } return length; } }