summaryrefslogtreecommitdiff
path: root/html/jpgraph/jpgraph_table.php
diff options
context:
space:
mode:
Diffstat (limited to 'html/jpgraph/jpgraph_table.php')
-rw-r--r--html/jpgraph/jpgraph_table.php1325
1 files changed, 0 insertions, 1325 deletions
diff --git a/html/jpgraph/jpgraph_table.php b/html/jpgraph/jpgraph_table.php
deleted file mode 100644
index 852d78b..0000000
--- a/html/jpgraph/jpgraph_table.php
+++ /dev/null
@@ -1,1325 +0,0 @@
-<?php
-/*=======================================================================
- // File: JPGRAPH_TABLE.PHP
- // Description: Classes to create basic tables of data
- // Created: 2006-01-25
- // Ver: $Id: jpgraph_table.php 1514 2009-07-07 11:15:58Z ljp $
- //
- // Copyright (c) Asial Corporation. All rights reserved.
- //========================================================================
- */
-
-// Style of grid lines in table
-DEFINE('TGRID_SINGLE',1);
-DEFINE('TGRID_DOUBLE',2);
-DEFINE('TGRID_DOUBLE2',3);
-
-// Type of constrain for image constrain
-DEFINE('TIMG_WIDTH',1);
-DEFINE('TIMG_HEIGHT',2);
-
-//---------------------------------------------------------------------
-// CLASS GTextTableCell
-// Description:
-// Internal class that represents each cell in the table
-//---------------------------------------------------------------------
-class GTextTableCell {
- public $iColSpan=1,$iRowSpan=1;
- public $iMarginLeft=5,$iMarginRight=5,$iMarginTop=5,$iMarginBottom=5;
- public $iVal=NULL;
- private $iBGColor='', $iFontColor='black';
- private $iFF=FF_FONT1,$iFS=FS_NORMAL,$iFSize=10;
- private $iRow=0, $iCol=0;
- private $iVertAlign = 'bottom', $iHorAlign = 'left';
- private $iMerged=FALSE,$iPRow=NULL,$iPCol=NULL;
- private $iTable=NULL;
- private $iGridColor=array('darkgray','darkgray','darkgray','darkgray');
- private $iGridWeight=array(1,1,0,0); // left,top,bottom,right;
- private $iGridStyle=array(TGRID_SINGLE,TGRID_SINGLE,TGRID_SINGLE,TGRID_SINGLE); // left,top,bottom,right;
- private $iNumberFormat=null;
- private $iIcon=null, $iIconConstrain=array();
- private $iCSIMtarget = '',$iCSIMwintarget = '', $iCSIMalt = '', $iCSIMArea = '';
-
- function __construct($aVal='',$aRow=0,$aCol=0) {
- $this->iVal = new Text($aVal);
- $this->iRow = $aRow;
- $this->iCol = $aCol;
- $this->iPRow = $aRow; // Initialiy each cell is its own parent
- $this->iPCol = $aCol;
- $this->iIconConstrain = array(-1,-1);
- }
-
- function Init($aTable) {
- $this->iTable = $aTable;
- }
-
- function SetCSIMTarget($aTarget,$aAlt='',$aWinTarget='') {
- $this->iCSIMtarget = $aTarget;
- $this->iCSIMwintarget = $aWinTarget;
- $this->iCSIMalt = $aAlt;
- }
-
- function GetCSIMArea() {
- if( $this->iCSIMtarget !== '' )
- return $this->iCSIMArea;
- else
- return '';
- }
-
- function SetImageConstrain($aType,$aVal) {
- if( !in_array($aType,array(TIMG_WIDTH, TIMG_HEIGHT)) ) {
- JpGraphError::RaiseL(27015);
- }
- $this->iIconConstrain = array($aType,$aVal);
- }
-
- function SetCountryFlag($aFlag,$aScale=1.0,$aMix=100,$aStdSize=3) {
- $this->iIcon = new IconPlot();
- $this->iIcon->SetCountryFlag($aFlag,0,0,$aScale,$aMix,$aStdSize);
- }
-
- function SetImage($aFile,$aScale=1.0,$aMix=100) {
- $this->iIcon = new IconPlot($aFile,0,0,$aScale,$aMix);
- }
-
- function SetImageFromString($aStr,$aScale=1.0,$aMix=100) {
- $this->iIcon = new IconPlot("",0,0,$aScale,$aMix);
- $this->iIcon->CreateFromString($aStr);
- }
-
- function SetRowColSpan($aRowSpan,$aColSpan) {
- $this->iRowSpan = $aRowSpan;
- $this->iColSpan = $aColSpan;
- $this->iMerged = true;
- }
-
- function SetMerged($aPRow,$aPCol,$aFlg=true) {
- $this->iMerged = $aFlg;
- $this->iPRow=$aPRow;
- $this->iPCol=$aPCol;
- }
-
- function IsMerged() {
- return $this->iMerged;
- }
-
- function SetNumberFormat($aF) {
- $this->iNumberFormat = $aF;
- }
-
- function Set($aTxt) {
- $this->iVal->Set($aTxt);
- }
-
- function SetFont($aFF,$aFS,$aFSize) {
- $this->iFF = $aFF;
- $this->iFS = $aFS;
- $this->iFSize = $aFSize;
- $this->iVal->SetFont($aFF,$aFS,$aFSize);
- }
-
- function SetFillColor($aColor) {
- $this->iBGColor=$aColor;
- }
-
- function SetFontColor($aColor) {
- $this->iFontColor=$aColor;
- }
-
- function SetGridColor($aLeft,$aTop=null,$aBottom=null,$aRight=null) {
- if( $aLeft !== null ) $this->iGridColor[0] = $aLeft;
- if( $aTop !== null ) $this->iGridColor[1] = $aTop;
- if( $aBottom !== null ) $this->iGridColor[2] = $aBottom;
- if( $aRight !== null )$this->iGridColor[3] = $aRight;
- }
-
- function SetGridStyle($aLeft,$aTop=null,$aBottom=null,$aRight=null) {
- if( $aLeft !== null ) $this->iGridStyle[0] = $aLeft;
- if( $aTop !== null ) $this->iGridStyle[1] = $aTop;
- if( $aBottom !== null ) $this->iGridStyle[2] = $aBottom;
- if( $aRight !== null )$this->iGridStyle[3] = $aRight;
- }
-
- function SetGridWeight($aLeft=null,$aTop=null,$aBottom=null,$aRight=null) {
- if( $aLeft !== null ) $this->iGridWeight[0] = $aLeft;
- if( $aTop !== null ) $this->iGridWeight[1] = $aTop;
- if( $aBottom !== null ) $this->iGridWeight[2] = $aBottom;
- if( $aRight !== null ) $this->iGridWeight[3] = $aRight;
- }
-
- function SetMargin($aLeft,$aRight,$aTop,$aBottom) {
- $this->iMarginLeft=$aLeft;
- $this->iMarginRight=$aRight;
- $this->iMarginTop=$aTop;
- $this->iMarginBottom=$aBottom;
- }
-
- function GetWidth($aImg) {
- if( $this->iIcon !== null ) {
- if( $this->iIconConstrain[0] == TIMG_WIDTH ) {
- $this->iIcon->SetScale(1);
- $tmp = $this->iIcon->GetWidthHeight();
- $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[0]);
- }
- elseif( $this->iIconConstrain[0] == TIMG_HEIGHT ) {
- $this->iIcon->SetScale(1);
- $tmp = $this->iIcon->GetWidthHeight();
- $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[1]);
- }
- $tmp = $this->iIcon->GetWidthHeight();
- $iwidth = $tmp[0];
- }
- else {
- $iwidth=0;
- }
- if( $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 0 ) {
- $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetWidth($aImg);
- }
- elseif( $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 90 ) {
- $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetFontHeight($aImg)+2;
- }
- else {
- $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetWidth($aImg)+2;
- }
-
- $pcolspan = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iColSpan;
- return round(max($iwidth,$pwidth)/$pcolspan) + $this->iMarginLeft + $this->iMarginRight;
- }
-
- function GetHeight($aImg) {
- if( $this->iIcon !== null ) {
- if( $this->iIconConstrain[0] == TIMG_WIDTH ) {
- $this->iIcon->SetScale(1);
- $tmp = $this->iIcon->GetWidthHeight();
- $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[0]);
- }
- elseif( $this->iIconConstrain[0] == TIMG_HEIGHT ) {
- $this->iIcon->SetScale(1);
- $tmp = $this->iIcon->GetWidthHeight();
- $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[1]);
- }
- $tmp = $this->iIcon->GetWidthHeight();
- $iheight = $tmp[1];
- }
- else {
- $iheight = 0;
- }
- if( $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 0 ) {
- $pheight = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetHeight($aImg);
- }
- else {
- $pheight = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetHeight($aImg)+1;
- }
- $prowspan = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iRowSpan;
- return round(max($iheight,$pheight)/$prowspan) + $this->iMarginTop + $this->iMarginBottom;
- }
-
- function SetAlign($aHorAlign='left',$aVertAlign='bottom') {
- $aHorAlign = strtolower($aHorAlign);
- $aVertAlign = strtolower($aVertAlign);
- $chk = array('left','right','center','bottom','top','middle');
- if( !in_array($aHorAlign,$chk) || !in_array($aVertAlign,$chk) ) {
- JpGraphError::RaiseL(27011,$aHorAlign,$aVertAlign);
- }
- $this->iVertAlign = $aVertAlign;
- $this->iHorAlign = $aHorAlign;
- }
-
- function AdjustMarginsForGrid() {
- if( $this->iCol > 0 ) {
- switch( $this->iGridStyle[0] ) {
- case TGRID_SINGLE: $wf=1; break;
- case TGRID_DOUBLE: $wf=3; break;
- case TGRID_DOUBLE2: $wf=4; break;
- }
- $this->iMarginLeft += $this->iGridWeight[0]*$wf;
- }
- if( $this->iRow > 0 ) {
- switch( $this->iGridStyle[1] ) {
- case TGRID_SINGLE: $wf=1; break;
- case TGRID_DOUBLE: $wf=3; break;
- case TGRID_DOUBLE2: $wf=4; break;
- }
- $this->iMarginTop += $this->iGridWeight[1]*$wf;
- }
- if( $this->iRow+$this->iRowSpan-1 < $this->iTable->iSize[0]-1 ) {
- switch( $this->iGridStyle[2] ) {
- case TGRID_SINGLE: $wf=1; break;
- case TGRID_DOUBLE: $wf=3; break;
- case TGRID_DOUBLE2: $wf=4; break;
- }
- $this->iMarginBottom += $this->iGridWeight[2]*$wf;
- }
- if( $this->iCol+$this->iColSpan-1 < $this->iTable->iSize[1]-1 ) {
- switch( $this->iGridStyle[3] ) {
- case TGRID_SINGLE: $wf=1; break;
- case TGRID_DOUBLE: $wf=3; break;
- case TGRID_DOUBLE2: $wf=4; break;
- }
- $this->iMarginRight += $this->iGridWeight[3]*$wf;
- }
- }
-
- function StrokeVGrid($aImg,$aX,$aY,$aWidth,$aHeight,$aDir=1) {
- // Left or right grid line
- // For the right we increase the X-pos and for the right we decrease it. This is
- // determined by the direction argument.
- $idx = $aDir==1 ? 0 : 3;
-
- // We don't stroke the grid lines that are on the edge of the table since this is
- // the place of the border.
- if( ( ($this->iCol > 0 && $idx==0) || ($this->iCol+$this->iColSpan-1 < $this->iTable->iSize[1]-1 && $idx==3) )
- && $this->iGridWeight[$idx] > 0 ) {
- $x = $aDir==1 ? $aX : $aX + $aWidth-1;
- $y = $aY+$aHeight-1;
- $aImg->SetColor($this->iGridColor[$idx]);
- switch( $this->iGridStyle[$idx] ) {
- case TGRID_SINGLE:
- for( $i=0; $i < $this->iGridWeight[$idx]; ++$i )
- $aImg->Line($x+$i*$aDir,$aY, $x+$i*$aDir,$y);
- break;
-
- case TGRID_DOUBLE:
- for( $i=0; $i < $this->iGridWeight[$idx]; ++$i )
- $aImg->Line($x+$i*$aDir,$aY, $x+$i*$aDir,$y);
- $x += $this->iGridWeight[$idx]*2;
- for( $i=0; $i < $this->iGridWeight[$idx]; ++$i )
- $aImg->Line($x+$i*$aDir,$aY, $x+$i*$aDir,$y);
- break;
-
- case TGRID_DOUBLE2:
- for( $i=0; $i < $this->iGridWeight[$idx]*2; ++$i )
- $aImg->Line($x+$i*$aDir,$aY,$x+$i*$aDir,$y);
- $x += $this->iGridWeight[$idx]*3;
- for( $i=0; $i < $this->iGridWeight[$idx]; ++$i )
- $aImg->Line($x+$i*$aDir,$aY, $x+$i*$aDir,$y);
- break;
- }
- }
- }
-
- function StrokeHGrid($aImg,$aX,$aY,$aWidth,$aHeight,$aDir=1) {
- // Top or bottom grid line
- // For the left we increase the X-pos and for the right we decrease it. This is
- // determined by the direction argument.
- $idx = $aDir==1 ? 1 : 2;
-
- // We don't stroke the grid lines that are on the edge of the table since this is
- // the place of the border.
- if( ( ($this->iRow > 0 && $idx==1) || ($this->iRow+$this->iRowSpan-1 < $this->iTable->iSize[0]-1 && $idx==2) )
- && $this->iGridWeight[$idx] > 0) {
- $y = $aDir==1 ? $aY : $aY+$aHeight-1;
- $x = $aX+$aWidth-1;
- $aImg->SetColor($this->iGridColor[$idx]);
- switch( $this->iGridStyle[$idx] ) {
- case TGRID_SINGLE:
- for( $i=0; $i < $this->iGridWeight[$idx]; ++$i )
- $aImg->Line($aX,$y+$i, $x,$y+$i);
- break;
-
- case TGRID_DOUBLE:
- for( $i=0; $i < $this->iGridWeight[$idx]; ++$i )
- $aImg->Line($aX,$y+$i, $x,$y+$i);
- $y += $this->iGridWeight[$idx]*2;
- for( $i=0; $i < $this->iGridWeight[$idx]; ++$i )
- $aImg->Line($aX,$y+$i, $x,$y+$i);
- break;
-
- case TGRID_DOUBLE2:
- for( $i=0; $i < $this->iGridWeight[$idx]*2; ++$i )
- $aImg->Line($aX,$y+$i, $x,$y+$i);
- $y += $this->iGridWeight[$idx]*3;
- for( $i=0; $i < $this->iGridWeight[$idx]; ++$i )
- $aImg->Line($aX,$y+$i, $x,$y+$i);
- break;
- }
- }
- }
-
- function Stroke($aImg,$aX,$aY,$aWidth,$aHeight) {
- // If this is a merged cell we only stroke if it is the parent cell.
- // The parent cell holds the merged cell block
- if( $this->iMerged && ($this->iRow != $this->iPRow || $this->iCol != $this->iPCol) ) {
- return;
- }
-
- if( $this->iBGColor != '' ) {
- $aImg->SetColor($this->iBGColor);
- $aImg->FilledRectangle($aX,$aY,$aX+$aWidth-1,$aY+$aHeight-1);
- }
-
- $coords = $aX.','.$aY.','.($aX+$aWidth-1).','.$aY.','.($aX+$aWidth-1).','.($aY+$aHeight-1).','.$aX.','.($aY+$aHeight-1);
- if( ! empty($this->iCSIMtarget) ) {
- $this->iCSIMArea = '<area shape="poly" coords="'.$coords.'" href="'.$this->iCSIMtarget.'"';
- if( ! empty($this->iCSIMwintarget) ) {
- $this->iCSIMArea .= " target=\"".$this->iCSIMwintarget."\"";
- }
- if( ! empty($this->iCSIMalt) ) {
- $this->iCSIMArea .= ' alt="'.$this->iCSIMalt.'" title="'.$this->iCSIMalt."\" ";
- }
- $this->iCSIMArea .= " />\n";
- }
-
- $this->StrokeVGrid($aImg,$aX,$aY,$aWidth,$aHeight);
- $this->StrokeVGrid($aImg,$aX,$aY,$aWidth,$aHeight,-1);
- $this->StrokeHGrid($aImg,$aX,$aY,$aWidth,$aHeight);
- $this->StrokeHGrid($aImg,$aX,$aY,$aWidth,$aHeight,-1);
-
- if( $this->iIcon !== null ) {
- switch( $this->iHorAlign ) {
- case 'left':
- $x = $aX+$this->iMarginLeft;
- $hanchor='left';
- break;
- case 'center':
- case 'middle':
- $x = $aX+$this->iMarginLeft+round(($aWidth-$this->iMarginLeft-$this->iMarginRight)/2);
- $hanchor='center';
- break;
- case 'right':
- $x = $aX+$aWidth-$this->iMarginRight-1;
- $hanchor='right';
- break;
- default:
- JpGraphError::RaiseL(27012,$this->iHorAlign);
- }
-
- switch( $this->iVertAlign ) {
- case 'top':
- $y = $aY+$this->iMarginTop;
- $vanchor='top';
- break;
- case 'center':
- case 'middle':
- $y = $aY+$this->iMarginTop+round(($aHeight-$this->iMarginTop-$this->iMarginBottom)/2);
- $vanchor='center';
- break;
- case 'bottom':
- $y = $aY+$aHeight-1-$this->iMarginBottom;
- $vanchor='bottom';
- break;
- default:
- JpGraphError::RaiseL(27012,$this->iVertAlign);
- }
- $this->iIcon->SetAnchor($hanchor,$vanchor);
- $this->iIcon->_Stroke($aImg,$x,$y);
- }
- $this->iVal->SetColor($this->iFontColor);
- $this->iVal->SetFont($this->iFF,$this->iFS,$this->iFSize);
- switch( $this->iHorAlign ) {
- case 'left':
- $x = $aX+$this->iMarginLeft;
- break;
- case 'center':
- case 'middle':
- $x = $aX+$this->iMarginLeft+round(($aWidth-$this->iMarginLeft-$this->iMarginRight)/2);
- break;
- case 'right':
- $x = $aX+$aWidth-$this->iMarginRight-1;
- break;
- default:
- JpGraphError::RaiseL(27012,$this->iHorAlign);
- }
- // A workaround for the shortcomings in the TTF font handling in GD
- // The anchor position for rotated text (=90) is to "short" so we add
- // an offset based on the actual font size
- if( $this->iVal->dir != 0 && $this->iVal->font_family >= 10 ) {
- $aY += 4 + round($this->iVal->font_size*0.8);
- }
- switch( $this->iVertAlign ) {
- case 'top':
- $y = $aY+$this->iMarginTop;
- break;
- case 'center':
- case 'middle':
- $y = $aY+$this->iMarginTop+round(($aHeight-$this->iMarginTop-$this->iMarginBottom)/2);
- //$y -= round($this->iVal->GetFontHeight($aImg)/2);
- $y -= round($this->iVal->GetHeight($aImg)/2);
- break;
- case 'bottom':
- //$y = $aY+$aHeight-1-$this->iMarginBottom-$this->iVal->GetFontHeight($aImg);
- $y = $aY+$aHeight-$this->iMarginBottom-$this->iVal->GetHeight($aImg);
- break;
- default:
- JpGraphError::RaiseL(27012,$this->iVertAlign);
- }
- $this->iVal->SetAlign($this->iHorAlign,'top');
- if( $this->iNumberFormat !== null && is_numeric($this->iVal->t) ) {
- $this->iVal->t = sprintf($this->iNumberFormat,$this->iVal->t);
- }
- $this->iVal->Stroke($aImg,$x,$y);
- }
-}
-
-//---------------------------------------------------------------------
-// CLASS GTextTable
-// Description:
-// Graphic text table
-//---------------------------------------------------------------------
-class GTextTable {
- public $iCells = array(), $iSize=array(0,0); // Need to be public since they are used by the cell
- private $iWidth=0, $iHeight=0;
- private $iColWidth=NULL,$iRowHeight=NULL;
- private $iImg=NULL;
- private $iXPos=0, $iYPos=0;
- private $iScaleXPos=null,$iScaleYPos=null;
- private $iBGColor='';
- private $iBorderColor='black',$iBorderWeight=1;
- private $iInit=false;
- private $iYAnchor='top',$iXAnchor='left';
- /*-----------------------------------------------------------------
- * First and second phase constructors
- *-----------------------------------------------------------------
- */
- function __construct() {
- // Empty
- }
-
- function Init($aRows=0,$aCols=0,$aFillText='') {
- $this->iSize[0] = $aRows;
- $this->iSize[1] = $aCols;
- for($i=0; $i < $this->iSize[0]; ++$i) {
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$i][$j] = new GTextTableCell($aFillText,$i,$j);
- $this->iCells[$i][$j]->Init($this);
- }
- }
- $this->iInit=true;
- }
-
- /*-----------------------------------------------------------------
- * Outer border of table
- *-----------------------------------------------------------------
- */
- function SetBorder($aWeight=1,$aColor='black') {
- $this->iBorderColor=$aColor;
- $this->iBorderWeight = $aWeight;
- }
-
-
- /*-----------------------------------------------------------------
- * Position in graph of table
- *-----------------------------------------------------------------
- */
- function SetPos($aX,$aY) {
- $this->iXPos = $aX;
- $this->iYPos = $aY;
- }
-
- function SetScalePos($aX,$aY) {
- $this->iScaleXPos = $aX;
- $this->iScaleYPos = $aY;
- }
-
- function SetAnchorPos($aXAnchor,$aYAnchor='top') {
- $this->iXAnchor = $aXAnchor;
- $this->iYAnchor = $aYAnchor;
- }
-
- /*-----------------------------------------------------------------
- * Setup country flag in a cell
- *-----------------------------------------------------------------
- */
- function SetCellCountryFlag($aRow,$aCol,$aFlag,$aScale=1.0,$aMix=100,$aStdSize=3) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetCountryFlag($aFlag,$aScale,$aMix,$aStdSize);
-
- }
-
- /*-----------------------------------------------------------------
- * Setup image in a cell
- *-----------------------------------------------------------------
- */
- function SetCellImage($aRow,$aCol,$aFile,$aScale=1.0,$aMix=100) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetImage($aFile,$aScale,$aMix);
- }
-
- function SetRowImage($aRow,$aFile,$aScale=1.0,$aMix=100) {
- $this->_chkR($aRow);
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->SetImage($aFile,$aScale,$aMix);
- }
- }
-
- function SetColImage($aCol,$aFile,$aScale=1.0,$aMix=100) {
- $this->_chkC($aCol);
- for($j=0; $j < $this->iSize[0]; ++$j) {
- $this->iCells[$j][$aCol]->SetImage($aFile,$aScale,$aMix);
- }
- }
-
- function SetImage($aFileR1,$aScaleC1=null,$aMixR2=null,$aC2=null,$aFile=null,$aScale=1.0,$aMix=100) {
- if( $aScaleC1 !== null && $aMixR2!==null && $aC2!==null && $aFile!==null ) {
- $this->_chkR($aArgR1); $this->_chkC($aC1);
- $this->_chkR($aR2); $this->_chkC($aC2);
- }
- else {
- if( $aScaleC1 !== null ) $aScale = $aScaleC1;
- if( $aMixR2 !== null ) $aMix = $aMixR2;
- $aFile = $aFileR1;
- $aMixR2 = $this->iSize[0]-1; $aFileR1 = 0;
- $aC2 = $this->iSize[1]-1; $aScaleC1 = 0;
- }
- for($i=$aArgR1; $i <= $aR2; ++$i) {
- for($j=$aC1; $j <= $aC2; ++$j) {
- $this->iCells[$i][$j]->SetImage($aFile,$aScale,$aMix);
- }
- }
- }
-
- function SetCellImageConstrain($aRow,$aCol,$aType,$aVal) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetImageConstrain($aType,$aVal);
- }
-
- /*-----------------------------------------------------------------
- * Generate a HTML version of the table
- *-----------------------------------------------------------------
- */
- function toString() {
- $t = '<table border=1 cellspacing=0 cellpadding=0>';
- for($i=0; $i < $this->iSize[0]; ++$i) {
- $t .= '<tr>';
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $t .= '<td>';
- if( $this->iCells[$i][$j]->iMerged )
- $t .= 'M ';
- $t .= 'val='.$this->iCells[$i][$j]->iVal->t;
- $t .= ' (cs='.$this->iCells[$i][$j]->iColSpan.
- ', rs='.$this->iCells[$i][$j]->iRowSpan.')';
- $t .= '</td>';
- }
- $t .= '</tr>';
- }
- $t .= '</table>';
- return $t;
- }
-
- /*-----------------------------------------------------------------
- * Specify data for table
- *-----------------------------------------------------------------
- */
- function Set($aArg1,$aArg2=NULL,$aArg3=NULL) {
- if( $aArg2===NULL && $aArg3===NULL ) {
- if( is_array($aArg1) ) {
- if( is_array($aArg1[0]) ) {
- $m = count($aArg1);
- // Find the longest row
- $n=0;
- for($i=0; $i < $m; ++$i)
- $n = max(count($aArg1[$i]),$n);
- for($i=0; $i < $m; ++$i) {
- for($j=0; $j < $n; ++$j) {
- if( isset($aArg1[$i][$j]) ){
- $this->_setcell($i,$j,(string)$aArg1[$i][$j]);
- }
- else {
- $this->_setcell($i,$j);
- }
- }
- }
- $this->iSize[0] = $m;
- $this->iSize[1] = $n;
- $this->iInit=true;
- }
- else {
- JpGraphError::RaiseL(27001);
- //('Illegal argument to GTextTable::Set(). Array must be 2 dimensional');
- }
- }
- else {
- JpGraphError::RaiseL(27002);
- //('Illegal argument to GTextTable::Set()');
- }
- }
- else {
- // Must be in the form (row,col,val)
- $this->_chkR($aArg1);
- $this->_chkC($aArg2);
- $this->_setcell($aArg1,$aArg2,(string)$aArg3);
- }
- }
-
- /*---------------------------------------------------------------------
- * Cell margin setting
- *---------------------------------------------------------------------
- */
- function SetPadding($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aPad=null) {
- if( $aC1 !== null && $aR2!==null && $aC2!==null && $aPad!==null ) {
- $this->_chkR($aArgR1); $this->_chkC($aC1);
- $this->_chkR($aR2); $this->_chkC($aC2);
- }
- else {
- $aPad = $aArgR1;
- $aR2 = $this->iSize[0]-1; $aArgR1 = 0;
- $aC2 = $this->iSize[1]-1; $aC1 = 0;
- }
- for($i=$aArgR1; $i <= $aR2; ++$i) {
- for($j=$aC1; $j <= $aC2; ++$j) {
- $this->iCells[$i][$j]->SetMargin($aPad,$aPad,$aPad,$aPad);
- }
- }
- }
-
- function SetRowPadding($aRow,$aPad) {
- $this->_chkR($aRow);
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->SetMargin($aPad,$aPad,$aPad,$aPad);
- }
- }
-
- function SetColPadding($aCol,$aPad) {
- $this->_chkC($aCol);
- for($j=0; $j < $this->iSize[0]; ++$j) {
- $this->iCells[$j][$aCol]->SetMargin($aPad,$aPad,$aPad,$aPad);
- }
- }
-
- function SetCellPadding($aRow,$aCol,$aPad) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetMargin($aPad,$aPad,$aPad,$aPad);
- }
-
-
- /*---------------------------------------------------------------------
- * Cell text orientation setting
- *---------------------------------------------------------------------
- */
- function SetTextOrientation($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aO=null) {
- if( $aC1 !== null && $aR2!==null && $aC2!==null && $aPad!==null ) {
- $this->_chkR($aArgR1); $this->_chkC($aC1);
- $this->_chkR($aR2); $this->_chkC($aC2);
- }
- else {
- $aO = $aArgR1;
- $aR2 = $this->iSize[0]-1; $aArgR1 = 0;
- $aC2 = $this->iSize[1]-1; $aC1 = 0;
- }
- for($i=$aArgR1; $i <= $aR2; ++$i) {
- for($j=$aC1; $j <= $aC2; ++$j) {
- $this->iCells[$i][$j]->iVal->SetOrientation($aO);
- }
- }
- }
-
- function SetRowTextOrientation($aRow,$aO) {
- $this->_chkR($aRow);
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->iVal->SetOrientation($aO);
- }
- }
-
- function SetColTextOrientation($aCol,$aO) {
- $this->_chkC($aCol);
- for($j=0; $j < $this->iSize[0]; ++$j) {
- $this->iCells[$j][$aCol]->iVal->SetOrientation($aO);
- }
- }
-
- function SetCellTextOrientation($aRow,$aCol,$aO) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->iVal->SetOrientation($aO);
- }
-
-
-
-
- /*---------------------------------------------------------------------
- * Font color setting
- *---------------------------------------------------------------------
- */
-
- function SetColor($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=null) {
- if( $aC1 !== null && $aR2!==null && $aC2!==null && $aArg!==null ) {
- $this->_chkR($aArgR1); $this->_chkC($aC1);
- $this->_chkR($aR2); $this->_chkC($aC2);
- }
- else {
- $aArg = $aArgR1;
- $aR2 = $this->iSize[0]-1; $aArgR1 = 0;
- $aC2 = $this->iSize[1]-1; $aC1 = 0;
- }
- for($i=$aArgR1; $i <= $aR2; ++$i) {
- for($j=$aC1; $j <= $aC2; ++$j) {
- $this->iCells[$i][$j]->SetFontColor($aArg);
- }
- }
- }
-
- function SetRowColor($aRow,$aColor) {
- $this->_chkR($aRow);
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->SetFontColor($aColor);
- }
- }
-
- function SetColColor($aCol,$aColor) {
- $this->_chkC($aCol);
- for($i=0; $i < $this->iSize[0]; ++$i) {
- $this->iCells[$i][$aCol]->SetFontColor($aColor);
- }
- }
-
- function SetCellColor($aRow,$aCol,$aColor) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetFontColor($aColor);
- }
-
- /*---------------------------------------------------------------------
- * Fill color settings
- *---------------------------------------------------------------------
- */
-
- function SetFillColor($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=null) {
- if( $aC1 !== null && $aR2!==null && $aC2!==null && $aArg!==null ) {
- $this->_chkR($aArgR1); $this->_chkC($aC1);
- $this->_chkR($aR2); $this->_chkC($aC2);
- for($i=$aArgR1; $i <= $aR2; ++$i) {
- for($j=$aC1; $j <= $aC2; ++$j) {
- $this->iCells[$i][$j]->SetFillColor($aArg);
- }
- }
- }
- else {
- $this->iBGColor = $aArgR1;
- }
- }
-
- function SetRowFillColor($aRow,$aColor) {
- $this->_chkR($aRow);
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->SetFillColor($aColor);
- }
- }
-
- function SetColFillColor($aCol,$aColor) {
- $this->_chkC($aCol);
- for($i=0; $i < $this->iSize[0]; ++$i) {
- $this->iCells[$i][$aCol]->SetFillColor($aColor);
- }
- }
-
- function SetCellFillColor($aRow,$aCol,$aColor) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetFillColor($aColor);
- }
-
- /*---------------------------------------------------------------------
- * Font family setting
- *---------------------------------------------------------------------
- */
- function SetFont() {
- $numargs = func_num_args();
- if( $numargs == 2 || $numargs == 3 ) {
- $aFF = func_get_arg(0);
- $aFS = func_get_arg(1);
- if( $numargs == 3 )
- $aFSize=func_get_arg(2);
- else
- $aFSize=10;
- $aR2 = $this->iSize[0]-1; $aR1 = 0;
- $aC2 = $this->iSize[1]-1; $aC1 = 0;
-
- }
- elseif($numargs == 6 || $numargs == 7 ) {
- $aR1 = func_get_arg(0); $aC1 = func_get_arg(1);
- $aR2 = func_get_arg(2); $aC2 = func_get_arg(3);
- $aFF = func_get_arg(4); $aFS = func_get_arg(5);
- if( $numargs == 7 )
- $aFSize=func_get_arg(6);
- else
- $aFSize=10;
- }
- else {
- JpGraphError::RaiseL(27003);
- //('Wrong number of arguments to GTextTable::SetColor()');
- }
- $this->_chkR($aR1); $this->_chkC($aC1);
- $this->_chkR($aR2); $this->_chkC($aC2);
- for($i=$aR1; $i <= $aR2; ++$i) {
- for($j=$aC1; $j <= $aC2; ++$j) {
- $this->iCells[$i][$j]->SetFont($aFF,$aFS,$aFSize);
- }
- }
- }
-
- function SetRowFont($aRow,$aFF,$aFS,$aFSize=10) {
- $this->_chkR($aRow);
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->SetFont($aFF,$aFS,$aFSize);
- }
- }
-
- function SetColFont($aCol,$aFF,$aFS,$aFSize=10) {
- $this->_chkC($aCol);
- for($i=0; $i < $this->iSize[0]; ++$i) {
- $this->iCells[$i][$aCol]->SetFont($aFF,$aFS,$aFSize);
- }
- }
-
- function SetCellFont($aRow,$aCol,$aFF,$aFS,$aFSize=10) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetFont($aFF,$aFS,$aFSize);
- }
-
- /*---------------------------------------------------------------------
- * Cell align settings
- *---------------------------------------------------------------------
- */
-
- function SetAlign($aR1HAlign=null,$aC1VAlign=null,$aR2=null,$aC2=null,$aHArg=null,$aVArg='center') {
- if( $aC1VAlign !== null && $aR2!==null && $aC2!==null && $aHArg!==null ) {
- $this->_chkR($aR1HAlign); $this->_chkC($aC1VAlign);
- $this->_chkR($aR2); $this->_chkC($aC2);
- }
- else {
- if( $aR1HAlign === null ) {
- JpGraphError::RaiseL(27010);
- }
- if( $aC1VAlign === null ) {
- $aC1VAlign = 'center';
- }
- $aHArg = $aR1HAlign;
- $aVArg = $aC1VAlign === null ? 'center' : $aC1VAlign ;
- $aR2 = $this->iSize[0]-1; $aR1HAlign = 0;
- $aC2 = $this->iSize[1]-1; $aC1VAlign = 0;
- }
- for($i=$aR1HAlign; $i <= $aR2; ++$i) {
- for($j=$aC1VAlign; $j <= $aC2; ++$j) {
- $this->iCells[$i][$j]->SetAlign($aHArg,$aVArg);
- }
- }
- }
-
- function SetCellAlign($aRow,$aCol,$aHorAlign,$aVertAlign='bottom') {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetAlign($aHorAlign,$aVertAlign);
- }
-
- function SetRowAlign($aRow,$aHorAlign,$aVertAlign='bottom') {
- $this->_chkR($aRow);
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->SetAlign($aHorAlign,$aVertAlign);
- }
- }
-
- function SetColAlign($aCol,$aHorAlign,$aVertAlign='bottom') {
- $this->_chkC($aCol);
- for($i=0; $i < $this->iSize[0]; ++$i) {
- $this->iCells[$i][$aCol]->SetAlign($aHorAlign,$aVertAlign);
- }
- }
-
- /*---------------------------------------------------------------------
- * Cell number format
- *---------------------------------------------------------------------
- */
-
- function SetNumberFormat($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=null) {
- if( $aC1 !== null && $aR2!==null && $aC2!==null && $aArg!==null ) {
- $this->_chkR($aArgR1); $this->_chkC($aC1);
- $this->_chkR($aR2); $this->_chkC($aC2);
- }
- else {
- $aArg = $aArgR1;
- $aR2 = $this->iSize[0]-1; $aArgR1 = 0;
- $aC2 = $this->iSize[1]-1; $aC1 = 0;
- }
- if( !is_string($aArg) ) {
- JpGraphError::RaiseL(27013); // argument must be a string
- }
- for($i=$aArgR1; $i <= $aR2; ++$i) {
- for($j=$aC1; $j <= $aC2; ++$j) {
- $this->iCells[$i][$j]->SetNumberFormat($aArg);
- }
- }
- }
-
- function SetRowNumberFormat($aRow,$aF) {
- $this->_chkR($aRow);
- if( !is_string($aF) ) {
- JpGraphError::RaiseL(27013); // argument must be a string
- }
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->SetNumberFormat($aF);
- }
- }
-
- function SetColNumberFormat($aCol,$aF) {
- $this->_chkC($aCol);
- if( !is_string($aF) ) {
- JpGraphError::RaiseL(27013); // argument must be a string
- }
- for($i=0; $i < $this->iSize[0]; ++$i) {
- $this->iCells[$i][$aCol]->SetNumberFormat($aF);
- }
- }
-
- function SetCellNumberFormat($aRow,$aCol,$aF) {
- $this->_chkR($aRow); $this->_chkC($aCol);
- if( !is_string($aF) ) {
- JpGraphError::RaiseL(27013); // argument must be a string
- }
- $this->iCells[$aRow][$aCol]->SetNumberFormat($aF);
- }
-
- /*---------------------------------------------------------------------
- * Set row and column min size
- *---------------------------------------------------------------------
- */
-
- function SetMinColWidth($aColWidth,$aWidth=null) {
- // If there is only one argument this means that all
- // columns get set to the same width
- if( $aWidth===null ) {
- for($i=0; $i < $this->iSize[1]; ++$i) {
- $this->iColWidth[$i] = $aColWidth;
- }
- }
- else {
- $this->_chkC($aColWidth);
- $this->iColWidth[$aColWidth] = $aWidth;
- }
- }
-
- function SetMinRowHeight($aRowHeight,$aHeight=null) {
- // If there is only one argument this means that all
- // rows get set to the same height
- if( $aHeight===null ) {
- for($i=0; $i < $this->iSize[0]; ++$i) {
- $this->iRowHeight[$i] = $aRowHeight;
- }
- }
- else {
- $this->_chkR($aRowHeight);
- $this->iRowHeight[$aRowHeight] = $aHeight;
- }
- }
-
- /*---------------------------------------------------------------------
- * Grid line settings
- *---------------------------------------------------------------------
- */
-
- function SetGrid($aWeight=1,$aColor='black',$aStyle=TGRID_SINGLE) {
- $rc = $this->iSize[0];
- $cc = $this->iSize[1];
- for($i=0; $i < $rc; ++$i) {
- for($j=0; $j < $cc; ++$j) {
- $this->iCells[$i][$j]->SetGridColor($aColor,$aColor);
- $this->iCells[$i][$j]->SetGridWeight($aWeight,$aWeight);
- $this->iCells[$i][$j]->SetGridStyle($aStyle);
- }
- }
- }
-
- function SetColGrid($aCol,$aWeight=1,$aColor='black',$aStyle=TGRID_SINGLE) {
- $this->_chkC($aCol);
- for($i=0; $i < $this->iSize[0]; ++$i) {
- $this->iCells[$i][$aCol]->SetGridWeight($aWeight);
- $this->iCells[$i][$aCol]->SetGridColor($aColor);
- $this->iCells[$i][$aCol]->SetGridStyle($aStyle);
- }
- }
-
- function SetRowGrid($aRow,$aWeight=1,$aColor='black',$aStyle=TGRID_SINGLE) {
- $this->_chkR($aRow);
- for($j=0; $j < $this->iSize[1]; ++$j) {
- $this->iCells[$aRow][$j]->SetGridWeight(NULL,$aWeight);
- $this->iCells[$aRow][$j]->SetGridColor(NULL,$aColor);
- $this->iCells[$aRow][$j]->SetGridStyle(NULL,$aStyle);
- }
- }
-
- /*---------------------------------------------------------------------
- * Merge cells
- *---------------------------------------------------------------------
- */
-
- function MergeRow($aRow,$aHAlign='center',$aVAlign='center') {
- $this->_chkR($aRow);
- $this->MergeCells($aRow,0,$aRow,$this->iSize[1]-1,$aHAlign,$aVAlign);
- }
-
- function MergeCol($aCol,$aHAlign='center',$aVAlign='center') {
- $this->_chkC($aCol);
- $this->MergeCells(0,$aCol,$this->iSize[0]-1,$aCol,$aHAlign,$aVAlign);
- }
-
- function MergeCells($aR1,$aC1,$aR2,$aC2,$aHAlign='center',$aVAlign='center') {
- if( $aR1 > $aR2 || $aC1 > $aC2 ) {
- JpGraphError::RaiseL(27004);
- //('GTextTable::MergeCells(). Specified cell range to be merged is not valid.');
- }
- $this->_chkR($aR1); $this->_chkC($aC1);
- $this->_chkR($aR2); $this->_chkC($aC2);
- $rspan = $aR2-$aR1+1;
- $cspan = $aC2-$aC1+1;
- // Setup the parent cell for this merged group
- if( $this->iCells[$aR1][$aC1]->IsMerged() ) {
- JpGraphError::RaiseL(27005,$aR1,$aC1,$aR2,$aC2);
- //("Cannot merge already merged cells in the range ($aR1,$aC1), ($aR2,$aC2)");
- }
- $this->iCells[$aR1][$aC1]->SetRowColSpan($rspan,$cspan);
- $this->iCells[$aR1][$aC1]->SetAlign($aHAlign,$aVAlign);
- for($i=$aR1; $i <= $aR2; ++$i) {
- for($j=$aC1; $j <= $aC2; ++$j) {
- if( ! ($i == $aR1 && $j == $aC1) ) {
- if( $this->iCells[$i][$j]->IsMerged() ) {
- JpGraphError::RaiseL(27005,$aR1,$aC1,$aR2,$aC2);
- //("Cannot merge already merged cells in the range ($aR1,$aC1), ($aR2,$aC2)");
- }
- $this->iCells[$i][$j]->SetMerged($aR1,$aC1,true);
- }
- }
- }
- }
-
-
- /*---------------------------------------------------------------------
- * CSIM methods
- *---------------------------------------------------------------------
- */
-
- function SetCSIMTarget($aTarget,$aAlt=null,$aAutoTarget=false) {
- $m = $this->iSize[0];
- $n = $this->iSize[1];
- $csim = '';
- for($i=0; $i < $m; ++$i) {
- for($j=0; $j < $n; ++$j) {
- if( $aAutoTarget )
- $t = $aTarget."?row=$i&col=$j";
- else
- $t = $aTarget;
- $this->iCells[$i][$j]->SetCSIMTarget($t,$aAlt);
- }
- }
- }
-
- function SetCellCSIMTarget($aRow,$aCol,$aTarget,$aAlt=null) {
- $this->_chkR($aRow);
- $this->_chkC($aCol);
- $this->iCells[$aRow][$aCol]->SetCSIMTarget($aTarget,$aAlt);
- }
-
- /*---------------------------------------------------------------------
- * Private methods
- *---------------------------------------------------------------------
- */
-
- function GetCSIMAreas() {
- $m = $this->iSize[0];
- $n = $this->iSize[1];
- $csim = '';
- for($i=0; $i < $m; ++$i) {
- for($j=0; $j < $n; ++$j) {
- $csim .= $this->iCells[$i][$j]->GetCSIMArea();
- }
- }
- return $csim;
- }
-
- function _chkC($aCol) {
- if( ! $this->iInit ) {
- JpGraphError::Raise(27014); // Table not initialized
- }
- if( $aCol < 0 || $aCol >= $this->iSize[1] )
- JpGraphError::RaiseL(27006,$aCol);
- //("GTextTable:\nColumn argument ($aCol) is outside specified table size.");
- }
-
- function _chkR($aRow) {
- if( ! $this->iInit ) {
- JpGraphError::Raise(27014); // Table not initialized
- }
- if( $aRow < 0 || $aRow >= $this->iSize[0] )
- JpGraphError::RaiseL(27007,$aRow);
- //("GTextTable:\nRow argument ($aRow) is outside specified table size.");
- }
-
- function _getScalePos() {
- if( $this->iScaleXPos === null || $this->iScaleYPos === null ) {
- return false;
- }
- return array($this->iScaleXPos, $this->iScaleYPos);
- }
-
- function _autoSizeTable($aImg) {
- // Get maximum column width and row height
- $m = $this->iSize[0];
- $n = $this->iSize[1];
- $w=1;$h=1;
-
- // Get maximum row height per row
- for($i=0; $i < $m; ++$i) {
- $h=0;
- for($j=0; $j < $n; ++$j) {
- $h = max($h,$this->iCells[$i][$j]->GetHeight($aImg));
- }
- if( isset($this->iRowHeight[$i]) ) {
- $this->iRowHeight[$i] = max($h,$this->iRowHeight[$i]);
- }
- else
- $this->iRowHeight[$i] = $h;
- }
-
- // Get maximum col width per columns
- for($j=0; $j < $n; ++$j) {
- $w=0;
- for($i=0; $i < $m; ++$i) {
- $w = max($w,$this->iCells[$i][$j]->GetWidth($aImg));
- }
- if( isset($this->iColWidth[$j]) ) {
- $this->iColWidth[$j] = max($w,$this->iColWidth[$j]);
- }
- else
- $this->iColWidth[$j] = $w;
- }
- }
-
- function _setcell($aRow,$aCol,$aVal='') {
- if( isset($this->iCells[$aRow][$aCol]) ) {
- $this->iCells[$aRow][$aCol]->Set($aVal);
- }
- else {
- $this->iCells[$aRow][$aCol] = new GTextTableCell((string)$aVal,$aRow,$aCol);
- $this->iCells[$aRow][$aCol]->Init($this);
- }
- }
-
- function StrokeWithScale($aImg,$aXScale,$aYScale) {
- if( is_numeric($this->iScaleXPos) && is_numeric($this->iScaleYPos) ) {
- $x = round($aXScale->Translate($this->iScaleXPos));
- $y = round($aYScale->Translate($this->iScaleYPos));
- $this->Stroke($aImg,$x,$y);
- }
- else {
- $this->Stroke($aImg);
- }
- }
-
- function Stroke($aImg,$aX=NULL,$aY=NULL) {
- if( $aX !== NULL && $aY !== NULL ) {
- $this->iXPos = $aX;
- $this->iYPos = $aY;
- }
-
- $rc = $this->iSize[0]; // row count
- $cc = $this->iSize[1]; // column count
-
- if( $rc == 0 || $cc == 0 ) {
- JpGraphError::RaiseL(27009);
- }
-
- // Adjust margins of each cell based on the weight of the grid. Each table grid line
- // is actually occupying the left side and top part of each cell.
- for($j=0; $j < $cc; ++$j) {
- $this->iCells[0][$j]->iMarginTop += $this->iBorderWeight;
- }
- for($i=0; $i < $rc; ++$i) {
- $this->iCells[$i][0]->iMarginLeft += $this->iBorderWeight;
- }
- for($i=0; $i < $rc; ++$i) {
- for($j=0; $j < $cc; ++$j) {
- $this->iCells[$i][$j]->AdjustMarginsForGrid();
- }
- }
-
- // adjust row and column size depending on cell content
- $this->_autoSizeTable($aImg);
-
- if( $this->iSize[1] != count($this->iColWidth) || $this->iSize[0] != count($this->iRowHeight) ) {
- JpGraphError::RaiseL(27008);
- //('Column and row size arrays must match the dimesnions of the table');
- }
-
- // Find out overall table size
- $width=0;
- for($i=0; $i < $cc; ++$i) {
- $width += $this->iColWidth[$i];
- }
- $height=0;
- for($i=0; $i < $rc; ++$i) {
- $height += $this->iRowHeight[$i];
- }
-
- // Adjust the X,Y position to alway be at the top left corner
- // The anchor position, i.e. how the client want to interpret the specified
- // x and y coordinate must be taken into account
- switch( strtolower($this->iXAnchor) ) {
- case 'left' :
- break;
- case 'center':
- $this->iXPos -= round($width/2);
- break;
- case 'right':
- $this->iXPos -= $width;
- break;
- }
- switch( strtolower($this->iYAnchor) ) {
- case 'top' :
- break;
- case 'center':
- case 'middle':
- $this->iYPos -= round($height/2);
- break;
- case 'bottom':
- $this->iYPos -= $height;
- break;
- }
-
- // Set the overall background color of the table if set
- if( $this->iBGColor !== '' ) {
- $aImg->SetColor($this->iBGColor);
- $aImg->FilledRectangle($this->iXPos,$this->iYPos,$this->iXPos+$width,$this->iYPos+$height);
- }
-
- // Stroke all cells
- $rpos=$this->iYPos;
- for($i=0; $i < $rc; ++$i) {
- $cpos=$this->iXPos;
- for($j=0; $j < $cc; ++$j) {
- // Calculate width and height of this cell if it is spanning
- // more than one column or row
- $cwidth=0;
- for( $k=0; $k < $this->iCells[$i][$j]->iColSpan; ++$k ) {
- $cwidth += $this->iColWidth[$j+$k];
- }
- $cheight=0;
- for( $k=0; $k < $this->iCells[$i][$j]->iRowSpan; ++$k ) {
- $cheight += $this->iRowHeight[$i+$k];
- }
-
- $this->iCells[$i][$j]->Stroke($aImg,$cpos,$rpos,$cwidth,$cheight);
- $cpos += $this->iColWidth[$j];
- }
- $rpos += $this->iRowHeight[$i];
- }
-
- // Stroke outer border
- $aImg->SetColor($this->iBorderColor);
- if( $this->iBorderWeight == 1 )
- $aImg->Rectangle($this->iXPos,$this->iYPos,$this->iXPos+$width,$this->iYPos+$height);
- else {
- for( $i=0; $i < $this->iBorderWeight; ++$i )
- $aImg->Rectangle($this->iXPos+$i,$this->iYPos+$i,
- $this->iXPos+$width-1+$this->iBorderWeight-$i,
- $this->iYPos+$height-1+$this->iBorderWeight-$i);
- }
- }
-}
-
-/*
- EOF
- */
-?>