Rev 60 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/** This work is hereby released into the Public Domain.* To view a copy of the public domain dedication,* visit http://creativecommons.org/licenses/publicdomain/ or send a letter to* Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.**/require_once dirname(__FILE__)."/Graph.class.php";/*** A graph can contain some groups of components** @package Artichow*/abstract class awComponentGroup extends awComponent {/*** Components of this group** @var array*/protected $components;/*** Build the component group*/public function __construct() {parent::__construct();$this->components = array();}/*** Add a component to the group** @param awComponent $component A component*/public function add(awComponent $component) {$this->components[] = $component;}}registerClass('ComponentGroup', TRUE);abstract class awComponent {/*** Component driver** @var Driver*/protected $driver;/*** Component width** @var float*/public $width = 1.0;/*** Component height** @var float*/public $height = 1.0;/*** Position X of the center the graph (from 0 to 1)** @var float*/public $x = 0.5;/*** Position Y of the center the graph (from 0 to 1)** @var float*/public $y = 0.5;/*** Component absolute width (in pixels)*** @var int*/public $w;/*** Component absolute height (in pixels)*** @var int*/public $h;/*** Left-top corner Y position** @var float*/public $top;/*** Left-top corner X position** @var float*/public $left;/*** Component background color** @var Color*/protected $background;/*** Component padding** @var Side*/protected $padding;/*** Component space** @var Side*/protected $space;/*** Component title** @var Label*/public $title;/*** Adjust automatically the component ?** @var bool*/protected $auto = TRUE;/*** Legend** @var Legend*/public $legend;/*** Build the component*/public function __construct() {// Component legend$this->legend = new awLegend();$this->padding = new awSide(25, 25, 25, 25);$this->space = new awSide(0, 0, 0, 0);// Component title$this->title = new awLabel(NULL,new awTuffy(10),NULL,0);$this->title->setAlign(awLabel::CENTER, awLabel::TOP);}/*** Adjust automatically the component ?** @param bool $auto*/public function auto($auto) {$this->auto = (bool)$auto;}/*** Change the size of the component** @param int $width Component width (from 0 to 1)* @param int $height Component height (from 0 to 1)*/public function setSize($width, $height) {$this->width = (float)$width;$this->height = (float)$height;}/*** Change the absolute size of the component** @param int $w Component width (in pixels)* @param int $h Component height (in pixels)*/public function setAbsSize($w, $h) {$this->w = (int)$w;$this->h = (int)$h;}/*** Change component background color** @param awColor $color (can be null)*/public function setBackgroundColor($color) {if($color === NULL or $color instanceof awColor) {$this->background = $color;}}/*** Change component background gradient** @param awGradient $gradient (can be null)*/public function setBackgroundGradient($gradient) {if($gradient === NULL or $gradient instanceof awGradient) {$this->background = $gradient;}}/*** Change component background image** @param awImage $image (can be null)*/public function setBackgroundImage($image) {if($image === NULL or $image instanceof awImage) {$this->background = $image;}}/*** Return the component background** @return Color, Gradient*/public function getBackground() {return $this->background;}/*** Change component padding** @param int $left Padding in pixels (NULL to keep old value)* @param int $right Padding in pixels (NULL to keep old value)* @param int $top Padding in pixels (NULL to keep old value)* @param int $bottom Padding in pixels (NULL to keep old value)*/public function setPadding($left = NULL, $right = NULL, $top = NULL, $bottom = NULL) {$this->padding->set($left, $right, $top, $bottom);}/*** Change component space** @param float $left Space in % (NULL to keep old value)* @param float $right Space in % (NULL to keep old value)* @param float $bottom Space in % (NULL to keep old value)* @param float $top Space in % (NULL to keep old value)*/public function setSpace($left = NULL, $right = NULL, $bottom = NULL, $top = NULL) {$this->space->set($left, $right, $bottom, $top);}/*** Change the absolute position of the component on the graph** @var int $x Left-top corner X position* @var int $y Left-top corner Y position*/public function setAbsPosition($left, $top) {$this->left = (int)$left;$this->top = (int)$top;}/*** Set the center of the component** @param int $x Position X of the center of the component* @param int $y Position Y of the center of the component*/public function setCenter($x, $y) {$this->x = (float)$x;$this->y = (float)$y;}/*** Get component coords with its padding** @return array Coords of the component*/public function getPosition() {// Get component coords$x1 = $this->padding->left;$y1 = $this->padding->top;$x2 = $this->w - $this->padding->right;$y2 = $this->h - $this->padding->bottom;return array($x1, $y1, $x2, $y2);}/*** Init the drawing of the component*/public function init(awDriver $driver) {// Set component background$background = $this->getBackground();if($background !== NULL) {$p1 = new awPoint(0, 0);$p2 = new awPoint($this->w - 1, $this->h - 1);if($background instanceof awImage) {$driver->copyImage($background,$p1,$p2);} else {$driver->filledRectangle($background,new awLine($p1, $p2));}}}/*** Finalize the drawing of the component*/public function finalize(awDriver $driver) {// Draw component title$point = new awPoint($this->w / 2,$this->padding->top - 8);$this->title->draw($driver, $point);// Draw legend$this->legend->draw($driver);}/*** Draw the grid around your component** @param Driver A driver* @return array Coords for the component*/abstract public function drawEnvelope(awDriver $driver);/*** Draw the component on the graph* Component should be drawed into specified coords** @param Driver A driver* @param int $x1* @param int $y1* @param int $x2* @param int $y2* @param bool $aliasing Use anti-aliasing to draw the component ?*/abstract public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing);/*** Get space width in pixels** @param int $width Component width* @param int $height Component height* @return array*/protected function getSpace($width, $height) {$left = (int)($width * $this->space->left / 100);$right = (int)($width * $this->space->right / 100);$top = (int)($height * $this->space->top / 100);$bottom = (int)($height * $this->space->bottom / 100);return array($left, $right, $top, $bottom);}}registerClass('Component', TRUE);?>