/*
|
* Licensed to the Apache Software Foundation (ASF) Under one or more
|
* contributor license agreements. See the NOTICE file distributed with
|
* this work for Additional information regarding copyright ownership.
|
* The ASF licenses this file to You Under the Apache License, Version 2.0
|
* (the "License"); you may not use this file except in compliance with
|
* the License. You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed Under the License is distributed on an "AS Is" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations Under the License.
|
*/
|
|
namespace HH.WMS.Utils.NPOI.SS.Formula.Eval
|
{
|
using System;
|
using HH.WMS.Utils.NPOI.SS.Formula;
|
using HH.WMS.Utils.NPOI.SS.Formula.PTG;
|
|
|
/**
|
* @author Josh Micich
|
*/
|
public abstract class AreaEvalBase : AreaEval
|
{
|
|
private int _firstColumn;
|
private int _firstRow;
|
private int _lastColumn;
|
private int _lastRow;
|
private int _nColumns;
|
private int _nRows;
|
|
protected AreaEvalBase(int firstRow, int firstColumn, int lastRow, int lastColumn)
|
{
|
_firstColumn = firstColumn;
|
_firstRow = firstRow;
|
_lastColumn = lastColumn;
|
_lastRow = lastRow;
|
|
_nColumns = _lastColumn - _firstColumn + 1;
|
_nRows = _lastRow - _firstRow + 1;
|
}
|
|
protected AreaEvalBase(AreaI ptg)
|
{
|
_firstRow = ptg.FirstRow;
|
_firstColumn = ptg.FirstColumn;
|
_lastRow = ptg.LastRow;
|
_lastColumn = ptg.LastColumn;
|
|
_nColumns = _lastColumn - _firstColumn + 1;
|
_nRows = _lastRow - _firstRow + 1;
|
}
|
|
public int FirstColumn
|
{
|
get{return _firstColumn;}
|
}
|
|
public int FirstRow
|
{
|
get { return _firstRow; }
|
}
|
|
public int LastColumn
|
{
|
get { return _lastColumn; }
|
}
|
|
public int LastRow
|
{
|
get { return _lastRow; }
|
}
|
|
|
public ValueEval GetValue(int row, int col)
|
{
|
return GetRelativeValue(row, col);
|
}
|
|
public bool Contains(int row, int col)
|
{
|
return _firstRow <= row && _lastRow >= row
|
&& _firstColumn <= col && _lastColumn >= col;
|
}
|
|
public bool ContainsRow(int row)
|
{
|
return (_firstRow <= row) && (_lastRow >= row);
|
}
|
|
public bool ContainsColumn(int col)
|
{
|
return (_firstColumn <= col) && (_lastColumn >= col);
|
}
|
|
public bool IsColumn
|
{
|
get{return _firstColumn == _lastColumn;}
|
}
|
|
public bool IsRow
|
{
|
get { return _firstRow == _lastRow; }
|
}
|
public ValueEval GetAbsoluteValue(int row, int col)
|
{
|
int rowOffsetIx = row - _firstRow;
|
int colOffsetIx = col - _firstColumn;
|
|
if (rowOffsetIx < 0 || rowOffsetIx >= _nRows)
|
{
|
throw new ArgumentException("Specified row index (" + row
|
+ ") is outside the allowed range (" + _firstRow + ".." + _lastRow + ")");
|
}
|
if (colOffsetIx < 0 || colOffsetIx >= _nColumns)
|
{
|
throw new ArgumentException("Specified column index (" + col
|
+ ") is outside the allowed range (" + _firstColumn + ".." + col + ")");
|
}
|
return GetRelativeValue(rowOffsetIx, colOffsetIx);
|
}
|
public abstract ValueEval GetRelativeValue(int relativeRowIndex, int relativeColumnIndex);
|
|
|
public int Width
|
{
|
get
|
{
|
return _lastColumn - _firstColumn + 1;
|
}
|
}
|
|
public int Height
|
{
|
get { return _lastRow - _firstRow + 1; }
|
}
|
|
/**
|
* @return whether cell at rowIndex and columnIndex is a subtotal.
|
* By default return false which means 'don't care about subtotals'
|
*/
|
public virtual bool IsSubTotal(int rowIndex, int columnIndex)
|
{
|
return false;
|
}
|
public abstract TwoDEval GetRow(int rowIndex);
|
public abstract TwoDEval GetColumn(int columnIndex);
|
|
public abstract AreaEval Offset(int relFirstRowIx, int relLastRowIx, int relFirstColIx, int relLastColIx);
|
}
|
}
|