Search:

CWIS Developers Documentation

  • Main Page
  • Classes
  • Files
  • File List
  • File Members

Axis--PSTable.php

Go to the documentation of this file.
00001 <?PHP
00002 
00003 #
00004 #   Axis--PSTable.php
00005 #   A PHP Object for Adding a Table to a PostScript Document (PSDocument)
00006 #
00007 #   Copyright 1999-2001 Axis Data
00008 #   This code is free software that can be used or redistributed under the
00009 #   terms of Version 2 of the GNU General Public License, as published by the
00010 #   Free Software Foundation (http://www.fsf.org).
00011 #
00012 #   Author:  Edward Almasy (almasy@axisdata.com)
00013 #
00014 #   Part of the AxisPHP library v1.2.4
00015 #   For more information see http://www.axisdata.com/AxisPHP/
00016 #
00017 
00018 
00019 class PSTable {
00020 
00021     # ---- PUBLIC INTERFACE --------------------------------------------------
00022 
00023     # object constructor
00024     function PSTable(&$Document)
00025     {
00026         # save pointer to document we use for output
00027         $this->Doc = &$Document;
00028     }
00029 
00030     # table parameter access functions
00031     function XOrigin($NewXOrigin = -1) {  if ($NewXOrigin != -1) {  $this->XOrigin = $NewXOrigin;  }  return (int)$this->XOrigin;  }
00032     function YOrigin($NewYOrigin = -1) {  if ($NewYOrigin != -1) {  $this->YOrigin = $NewYOrigin;  }  return (int)$this->YOrigin;  }
00033     function XSize($NewXSize = -1) {  if ($NewXSize != -1) {  $this->XSize = $NewXSize;  $this->RecalcActualColumnWidths();  }  return (int)$this->XSize;  }
00034     function YSize($NewYSize = -1) {  if ($NewYSize != -1) {  $this->YSize = $NewYSize;  $this->RecalcActualRowHeights();  }  return (int)$this->YSize;  }
00035     function NumCols($NewNumCols = -1) {  if ($NewNumCols != -1) {  $this->NumCols = $NewNumCols;  $this->RecalcActualColumnWidths();  }  return (int)$this->NumCols;  }
00036     function NumRows($NewNumRows = -1) {  if ($NewNumRows != -1) {  $this->NumRows = $NewNumRows;  $this->RecalcActualRowHeights();  }  return (int)$this->NumRows;  }
00037     function ShadeColumnHeadings($NewShadeColumnHeadings = -1) {  if ($NewShadeColumnHeadings != -1) {  $this->ShadeColumnHeadings = $NewShadeColumnHeadings;  }  return (int)$this->ShadeColumnHeadings;  }
00038 
00039     # return position of table cell on page
00040     function CellXPos($Col) {  return $this->XOrigin + $this->ColumnStartPoints[$Col];  }
00041     function CellYPos($Row) {  return $this->YOrigin - $this->RowStartPoints[$Row];  }
00042 
00043     # set/get column/row width/height
00044     function ColWidth($Col, $Width = -1) 
00045     {
00046         # if column width specified
00047         if ($Width >= 0)
00048         {
00049             # set requested column width
00050             $this->RequestedColumnWidths[$Col] = $Width;
00051 
00052             # recalculate actual column widths
00053             $this->RecalcActualColumnWidths();
00054         }
00055 
00056         # return actual column width to caller
00057         return (int)$this->ColumnWidths[$Col];
00058     }
00059     function RowHeight($Row, $Width = -1) 
00060     {
00061         # if row width specified
00062         if ($Width >= 0)
00063         {
00064             # set requested row width
00065             $this->RequestedRowHeights[$Row] = $Width;
00066 
00067             # recalculate actual row widths
00068             $this->RecalcActualRowHeights();
00069         }
00070 
00071         # return actual row width to caller
00072         return (int)$this->RowHeights[$Row];
00073     }
00074 
00075     function PrintTextInCell($Row, $Col, $TextToPrint)
00076     {
00077         # distance that text is printed from edge of cell
00078         $CellPadding = 3;
00079 
00080         if ($this->Doc->TextAngle() == 90)
00081         {
00082             $this->Doc->PrintTextAt(
00083                     ($this->CellXPos($Col + 1) - $CellPadding),
00084                     ($this->CellYPos($Row) - $CellPadding),
00085                     $TextToPrint);
00086         }
00087         else
00088         {
00089             $this->Doc->PrintTextAt(
00090                     ($this->CellXPos($Col) + $CellPadding),
00091                     ($this->CellYPos($Row) - $CellPadding),
00092                     $TextToPrint);
00093         }
00094     }
00095 
00096     # print table on document
00097     function PrintTable()
00098     {
00099         # write comment on what we're doing
00100         $this->Doc->PrintRaw(sprintf("
00101                 %% PSTable->Print()  
00102                 %%     XOrigin=%3s   YOrigin=%3s 
00103                 %%     NumCols=%3s   NumRows=%3s
00104                 %%       XSize=%3s     YSize=%3s
00105                 %%    AdjXSize=%3s  AdjYSize=%3s
00106                 ", 
00107                 $this->XOrigin, $this->YOrigin, 
00108                 $this->NumCols, $this->NumRows, 
00109                 $this->XSize,   $this->YSize,
00110                 $this->AdjXSize,$this->AdjYSize));
00111 
00112         # move to start point
00113         $this->Doc->PrintRaw(sprintf("
00114                 %s %s moveto
00115                 ", (int)$this->XOrigin, (int)$this->YOrigin));
00116 
00117         # start in positive direction (going right on page)
00118         $DirMult = 1;
00119 
00120         # for each row
00121         for ($Index = 0;  $Index <= $this->NumRows;  $Index++)
00122         {
00123             # draw horizontal line and move to next row
00124             $this->Doc->PrintRaw(sprintf("
00125                     %s 0 rlineto
00126                     0 %s rmoveto
00127                     ", 
00128                     ($this->AdjXSize * $DirMult), 
00129                     (0 - $this->RowHeight($Index + 1))));
00130 
00131             # switch directions
00132             $DirMult = 0 - $DirMult;
00133         }
00134 
00135         # move to start point
00136         $this->Doc->PrintRaw(sprintf("
00137                 %s %s moveto
00138                 ", (int)$this->XOrigin, (int)$this->YOrigin));
00139 
00140         # start in negative direction (going down on page)
00141         $DirMult = -1;
00142 
00143         # for each column
00144         for ($Index = 0;  $Index <= $this->NumCols;  $Index++)
00145         {
00146             # draw vertical line and move to next column
00147             $this->Doc->PrintRaw(sprintf("
00148                     0 %s rlineto
00149                     %s 0 rmoveto
00150                     ", 
00151                     ($this->AdjYSize * $DirMult), 
00152                     $this->ColWidth($Index + 1)));
00153 
00154             # switch directions
00155             $DirMult = 0 - $DirMult;
00156         }
00157 
00158         # shade column heading cells if requested
00159         if ($this->ShadeColumnHeadings == "TRUE")
00160         {
00161             $this->Doc->PrintRaw(sprintf("
00162                     0.90 setgray
00163                     %% rectfill: X Y Width Height
00164                     %d %d %d %d rectfill
00165                     0.00 setgray
00166                     ", 
00167                     $this->XOrigin,  $this->CellYPos(2), 
00168                     $this->AdjXSize, $this->RowHeight(1)));
00169         }
00170 
00171         # realize table
00172         $this->Doc->PrintRaw("
00173                 stroke
00174                 ");
00175     }
00176 
00177 
00178     # ---- PRIVATE INTERFACE -------------------------------------------------
00179 
00180     # recalculate row heights and positions
00181     function RecalcActualRowHeights()
00182     {
00183         # total up requested height values
00184         $TotalHeight = 0;
00185         $NumSizedRows = 0;
00186         for ($Row = 1;  $Row <= $this->NumRows;  $Row++)
00187         {
00188             if ($this->RequestedRowHeights[$Row] > 0)
00189             {
00190                 $TotalHeight += $this->RequestedRowHeights[$Row];
00191                 $NumSizedRows++;
00192             }
00193         }
00194 
00195         # calculate size of remaining rows
00196         if ($this->NumRows == $NumSizedRows)
00197         {
00198             $HeightOfRemainingRows = 1;
00199         }
00200         else
00201         {
00202             $HeightOfRemainingRows = (int)(($this->YSize - $TotalHeight) 
00203                     / ($this->NumRows - $NumSizedRows));
00204         }
00205 
00206         # set actual row heights and row begin points
00207         $CurrentStartPoint = $this->YSize;
00208         $this->AdjYSize = 0;
00209         for ($Row = 1;  $Row <= $this->NumRows;  $Row++)
00210         {
00211             if ($this->RequestedRowHeights[$Row] > 0)
00212             {
00213                 $this->RowHeights[$Row] = $this->RequestedRowHeights[$Row];
00214             }
00215             else
00216             {
00217                 $this->RowHeights[$Row] = $HeightOfRemainingRows;
00218             }
00219 
00220             $CurrentStartPoint -= $this->RowHeights[$Row];
00221             $this->RowStartPoints[$Row] = $this->AdjYSize;
00222             $this->AdjYSize += $this->RowHeights[$Row];
00223         }
00224     }
00225 
00226     # recalculate column widths and positions
00227     function RecalcActualColumnWidths()
00228     {
00229         # total up requested width values
00230         $TotalWidth = 0;
00231         $NumSizedColumns = 0;
00232         for ($Col = 1;  $Col <= $this->NumCols;  $Col++)
00233         {
00234             if ($this->RequestedColumnWidths[$Col] > 0)
00235             {
00236                 $TotalWidth += $this->RequestedColumnWidths[$Col];
00237                 $NumSizedColumns++;
00238             }
00239         }
00240 
00241         # calculate size of remaining columns
00242         $WidthOfRemainingColumns = (int)(($this->XSize - $TotalWidth) 
00243                 / ($this->NumCols - $NumSizedColumns));
00244 
00245         # set actual column widths and column begin points
00246         $CurrentStartPoint = 0;
00247         $this->AdjXSize = 0;
00248         for ($Col = 1;  $Col <= $this->NumCols;  $Col++)
00249         {
00250             if ($this->RequestedColumnWidths[$Col] > 0)
00251             {
00252                 $this->ColumnWidths[$Col] = $this->RequestedColumnWidths[$Col];
00253             }
00254             else
00255             {
00256                 $this->ColumnWidths[$Col] = $WidthOfRemainingColumns;
00257             }
00258 
00259             $this->ColumnStartPoints[$Col] = $CurrentStartPoint;
00260             $CurrentStartPoint += $this->ColumnWidths[$Col];
00261             $this->AdjXSize += $this->ColumnWidths[$Col];
00262         }
00263 
00264         # save start point of one column beyond table so we'll have
00265         #       it available for text positioning
00266         $this->ColumnStartPoints[$Col] = $CurrentStartPoint;
00267     }
00268 
00269     # table size in points
00270     var $XSize = 300;
00271     var $YSize = 300;
00272 
00273     # table size in points (adjusted to accomodate even row/column sizes)
00274     var $AdjXSize = 300;
00275     var $AdjYSize = 300;
00276 
00277     # number of columns and rows
00278     var $NumCols = 3;
00279     var $NumRows = 3;
00280 
00281     # requested column and row sizes
00282     var $RequestedColumnWidths;
00283     var $RequestedRowHeights;
00284 
00285     # actual column and row sizes
00286     var $ColumnWidths;
00287     var $RowHeights;
00288 
00289     # column and row start points
00290     var $ColumnStartPoints;
00291     var $RowStartPoints;
00292 
00293     # table origin on page
00294     var $XOrigin = 100;
00295     var $YOrigin = 400;
00296 
00297     # document to use for output
00298     var $Doc;
00299 
00300     # whether to give column headings a grey background
00301     var $ShadeColumnHeadings = "FALSE";
00302 }
00303 
00304 
00305 ?>

CWIS logo doxygen
Copyright 2010 Internet Scout