This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/includes/pear/Image/Graph/Marker/Value.php
2008-11-26 14:50:40 -08:00

214 lines
6.1 KiB
PHP

<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
/**
* Image_Graph - PEAR PHP OO Graph Rendering Utility.
*
* PHP versions 4 and 5
*
* LICENSE: This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or (at your
* option) any later version. This library 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 Lesser
* General Public License for more details. You should have received a copy of
* the GNU Lesser General Public License along with this library; if not, write
* to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA
*
* @category Images
* @package Image_Graph
* @subpackage Marker
* @author Jesper Veggerby <pear.nosey@veggerby.dk>
* @copyright Copyright (C) 2003, 2004 Jesper Veggerby Hansen
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
* @version CVS: $Id: Value.php,v 1.9 2005/08/24 20:35:52 nosey Exp $
* @link http://pear.php.net/package/Image_Graph
*/
/**
* Include file Image/Graph/Marker.php
*/
require_once 'Image/Graph/Marker.php';
/**
* A marker showing the data value.
*
* @category Images
* @package Image_Graph
* @subpackage Marker
* @author Jesper Veggerby <pear.nosey@veggerby.dk>
* @copyright Copyright (C) 2003, 2004 Jesper Veggerby Hansen
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
* @version Release: @package_version@
* @link http://pear.php.net/package/Image_Graph
*/
class Image_Graph_Marker_Value extends Image_Graph_Marker
{
/**
* Datapreproccesor to format the value
* @var DataPreprocessor
* @access private
*/
var $_dataPreprocessor = null;
/**
* Which value to use from the data set, ie the X or Y value
* @var int
* @access private
*/
var $_useValue;
/**
* Create a value marker, ie a box containing the value of the 'pointing
* data'
*
* @param int $useValue Defines which value to use from the dataset, i.e. the
* X or Y value
*/
function Image_Graph_Marker_Value($useValue = IMAGE_GRAPH_VALUE_X)
{
parent::Image_Graph_Marker();
$this->_padding = 2;
$this->_useValue = $useValue;
$this->_fillStyle = 'white';
$this->_borderStyle = 'black';
}
/**
* Sets the background fill style of the element
*
* @param Image_Graph_Fill $background The background
* @see Image_Graph_Fill
*/
function setBackground(& $background)
{
$this->setFillStyle($background);
}
/**
* Sets the background color of the element
*
* @param mixed $color The color
*/
function setBackgroundColor($color)
{
$this->setFillColor($color);
}
/**
* Sets a data preprocessor for formatting the values
*
* @param DataPreprocessor $dataPreprocessor The data preprocessor
* @return Image_Graph_DataPreprocessor The data preprocessor
*/
function &setDataPreprocessor(& $dataPreprocessor)
{
$this->_dataPreprocessor =& $dataPreprocessor;
return $dataPreprocessor;
}
/**
* Get the value to display
*
* @param array $values The values representing the data the marker 'points'
* to
* @return string The display value, this is the pre-preprocessor value, to
* support for customized with multiple values. i.e show 'x = y' or '(x, y)'
* @access private
*/
function _getDisplayValue($values)
{
switch ($this->_useValue) {
case IMAGE_GRAPH_VALUE_X:
$value = $values['X'];
break;
case IMAGE_GRAPH_PCT_X_MIN:
$value = $values['PCT_MIN_X'];
break;
case IMAGE_GRAPH_PCT_X_MAX:
$value = $values['PCT_MAX_X'];
break;
case IMAGE_GRAPH_PCT_Y_MIN:
$value = $values['PCT_MIN_Y'];
break;
case IMAGE_GRAPH_PCT_Y_MAX:
$value = $values['PCT_MAX_Y'];
break;
case IMAGE_GRAPH_PCT_Y_TOTAL:
if (isset($values['SUM_Y'])) {
$value = 100 * $values['Y'] / $values['SUM_Y'];
}
else {
$value = 0;
}
break;
case IMAGE_GRAPH_POINT_ID:
$value = $values['ID'];
break;
default:
$value = $values['Y'];
break;
}
return $value;
}
/**
* Draw the marker on the canvas
*
* @param int $x The X (horizontal) position (in pixels) of the marker on
* the canvas
* @param int $y The Y (vertical) position (in pixels) of the marker on the
* canvas
* @param array $values The values representing the data the marker 'points'
* to
* @access private
*/
function _drawMarker($x, $y, $values = false)
{
parent::_drawMarker($x, $y, $values);
$value = $this->_getDisplayValue($values);
if ($this->_dataPreprocessor) {
$value = $this->_dataPreprocessor->_process($value);
}
if ($this->_defaultFontOptions !== false) {
$this->_canvas->setFont($this->_defaultFontOptions);
} else {
$this->_canvas->setFont($this->_getFont());
}
$width = $this->_canvas->textWidth($value);
$height = $this->_canvas->textHeight($value);
$offsetX = $width/2 + $this->_padding;
$offsetY = $height/2 + $this->_padding;
$this->_getFillStyle();
$this->_getBorderStyle();
$this->_canvas->rectangle(
array(
'x0' => $x - $offsetX,
'y0' => $y - $offsetY,
'x1' => $x + $offsetX,
'y1' => $y + $offsetY
)
);
$this->write($x, $y, $value, IMAGE_GRAPH_ALIGN_CENTER);
}
}
?>