forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
5.9 KiB
190 lines
5.9 KiB
<?php |
|
//======================================================================= |
|
// File: JPGRAPH_ICONPLOT.PHP |
|
// Description: Extension module to add icons to plots |
|
// Created: 2004-02-18 |
|
// Ver: $Id: jpgraph_iconplot.php 1404 2009-06-28 15:25:41Z ljp $ |
|
// |
|
// Copyright (c) Asial Corporation. All rights reserved. |
|
//======================================================================== |
|
|
|
|
|
//=================================================== |
|
// CLASS IconPlot |
|
// Description: Make it possible to add a (small) image |
|
// to the graph |
|
//=================================================== |
|
class IconPlot { |
|
public $iX=0,$iY=0,$iScale=1.0,$iMix=100; |
|
private $iHorAnchor='left',$iVertAnchor='top'; |
|
private $iFile=''; |
|
private $iAnchors = array('left','right','top','bottom','center'); |
|
private $iCountryFlag='',$iCountryStdSize=3; |
|
private $iScalePosY=null,$iScalePosX=null; |
|
private $iImgString=''; |
|
|
|
|
|
function __construct($aFile="",$aX=0,$aY=0,$aScale=1.0,$aMix=100) { |
|
$this->iFile = $aFile; |
|
$this->iX=$aX; |
|
$this->iY=$aY; |
|
$this->iScale= $aScale; |
|
if( $aMix < 0 || $aMix > 100 ) { |
|
JpGraphError::RaiseL(8001); //('Mix value for icon must be between 0 and 100.'); |
|
} |
|
$this->iMix = $aMix ; |
|
} |
|
|
|
function SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3) { |
|
$this->iCountryFlag = $aFlag; |
|
$this->iX=$aX; |
|
$this->iY=$aY; |
|
$this->iScale= $aScale; |
|
if( $aMix < 0 || $aMix > 100 ) { |
|
JpGraphError::RaiseL(8001);//'Mix value for icon must be between 0 and 100.'); |
|
} |
|
$this->iMix = $aMix; |
|
$this->iCountryStdSize = $aStdSize; |
|
} |
|
|
|
function SetPos($aX,$aY) { |
|
$this->iX=$aX; |
|
$this->iY=$aY; |
|
} |
|
|
|
function CreateFromString($aStr) { |
|
$this->iImgString = $aStr; |
|
} |
|
|
|
function SetScalePos($aX,$aY) { |
|
$this->iScalePosX = $aX; |
|
$this->iScalePosY = $aY; |
|
} |
|
|
|
function SetScale($aScale) { |
|
$this->iScale = $aScale; |
|
} |
|
|
|
function SetMix($aMix) { |
|
if( $aMix < 0 || $aMix > 100 ) { |
|
JpGraphError::RaiseL(8001);//('Mix value for icon must be between 0 and 100.'); |
|
} |
|
$this->iMix = $aMix ; |
|
} |
|
|
|
function SetAnchor($aXAnchor='left',$aYAnchor='center') { |
|
if( !in_array($aXAnchor,$this->iAnchors) || |
|
!in_array($aYAnchor,$this->iAnchors) ) { |
|
JpGraphError::RaiseL(8002);//("Anchor position for icons must be one of 'top', 'bottom', 'left', 'right' or 'center'"); |
|
} |
|
$this->iHorAnchor=$aXAnchor; |
|
$this->iVertAnchor=$aYAnchor; |
|
} |
|
|
|
function PreStrokeAdjust($aGraph) { |
|
// Nothing to do ... |
|
} |
|
|
|
function DoLegend($aGraph) { |
|
// Nothing to do ... |
|
} |
|
|
|
function Max() { |
|
return array(false,false); |
|
} |
|
|
|
|
|
// The next four function are framework function tht gets called |
|
// from Gantt and is not menaiungfull in the context of Icons but |
|
// they must be implemented to avoid errors. |
|
function GetMaxDate() { return false; } |
|
function GetMinDate() { return false; } |
|
function GetLineNbr() { return 0; } |
|
function GetAbsHeight() {return 0; } |
|
|
|
|
|
function Min() { |
|
return array(false,false); |
|
} |
|
|
|
function StrokeMargin(&$aImg) { |
|
return true; |
|
} |
|
|
|
function Stroke($aImg,$axscale=null,$ayscale=null) { |
|
$this->StrokeWithScale($aImg,$axscale,$ayscale); |
|
} |
|
|
|
function StrokeWithScale($aImg,$axscale,$ayscale) { |
|
if( $this->iScalePosX === null || $this->iScalePosY === null || |
|
$axscale === null || $ayscale === null ) { |
|
$this->_Stroke($aImg); |
|
} |
|
else { |
|
$this->_Stroke($aImg, |
|
round($axscale->Translate($this->iScalePosX)), |
|
round($ayscale->Translate($this->iScalePosY))); |
|
} |
|
} |
|
|
|
function GetWidthHeight() { |
|
$dummy=0; |
|
return $this->_Stroke($dummy,null,null,true); |
|
} |
|
|
|
function _Stroke($aImg,$x=null,$y=null,$aReturnWidthHeight=false) { |
|
if( $this->iFile != '' && $this->iCountryFlag != '' ) { |
|
JpGraphError::RaiseL(8003);//('It is not possible to specify both an image file and a country flag for the same icon.'); |
|
} |
|
if( $this->iFile != '' ) { |
|
$gdimg = Graph::LoadBkgImage('',$this->iFile); |
|
} |
|
elseif( $this->iImgString != '') { |
|
$gdimg = Image::CreateFromString($this->iImgString); |
|
} |
|
|
|
else { |
|
if( ! class_exists('FlagImages',false) ) { |
|
JpGraphError::RaiseL(8004);//('In order to use Country flags as icons you must include the "jpgraph_flags.php" file.'); |
|
} |
|
$fobj = new FlagImages($this->iCountryStdSize); |
|
$dummy=''; |
|
$gdimg = $fobj->GetImgByName($this->iCountryFlag,$dummy); |
|
} |
|
|
|
$iconw = imagesx($gdimg); |
|
$iconh = imagesy($gdimg); |
|
|
|
if( $aReturnWidthHeight ) { |
|
return array(round($iconw*$this->iScale),round($iconh*$this->iScale)); |
|
} |
|
|
|
if( $x !== null && $y !== null ) { |
|
$this->iX = $x; $this->iY = $y; |
|
} |
|
if( $this->iX >= 0 && $this->iX <= 1.0 ) { |
|
$w = imagesx($aImg->img); |
|
$this->iX = round($w*$this->iX); |
|
} |
|
if( $this->iY >= 0 && $this->iY <= 1.0 ) { |
|
$h = imagesy($aImg->img); |
|
$this->iY = round($h*$this->iY); |
|
} |
|
|
|
if( $this->iHorAnchor == 'center' ) |
|
$this->iX -= round($iconw*$this->iScale/2); |
|
if( $this->iHorAnchor == 'right' ) |
|
$this->iX -= round($iconw*$this->iScale); |
|
if( $this->iVertAnchor == 'center' ) |
|
$this->iY -= round($iconh*$this->iScale/2); |
|
if( $this->iVertAnchor == 'bottom' ) |
|
$this->iY -= round($iconh*$this->iScale); |
|
|
|
$aImg->CopyMerge($gdimg,$this->iX,$this->iY,0,0, |
|
round($iconw*$this->iScale),round($iconh*$this->iScale), |
|
$iconw,$iconh, |
|
$this->iMix); |
|
} |
|
} |
|
|
|
?>
|
|
|