| <?php |
| /** |
| * File containing the abstract ezcGraphChart class |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| * @package Graph |
| * @version //autogentag// |
| * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 |
| */ |
| /** |
| * Class to represent a complete chart. |
| * |
| * @property ezcGraphRenderer $renderer |
| * Renderer used to render chart |
| * @property ezcGraphDriver $driver |
| * Output driver used for chart |
| * @property ezcGraphPalette $palette |
| * Palette used for colorization of chart |
| * @property-read mixed $renderedFile |
| * Contains the filename of the rendered file, if rendered. |
| * |
| * @package Graph |
| * @version //autogentag// |
| */ |
| abstract class ezcGraphChart |
| { |
| |
| /** |
| * Contains all general chart options |
| * |
| * @var ezcGraphChartConfig |
| */ |
| protected $options; |
| |
| /** |
| * Contains subelelemnts of the chart like legend and axes |
| * |
| * @var array(ezcGraphChartElement) |
| */ |
| protected $elements = array(); |
| |
| /** |
| * Contains the data of the chart |
| * |
| * @var ezcGraphChartDataContainer |
| */ |
| protected $data; |
| |
| /** |
| * Array containing chart properties |
| * |
| * @var array |
| */ |
| protected $properties; |
| |
| /** |
| * Contains the status wheather an element should be rendered |
| * |
| * @var array |
| */ |
| protected $renderElement; |
| |
| /** |
| * Constructor |
| * |
| * @param array $options Default option array |
| * @return void |
| * @ignore |
| */ |
| public function __construct( array $options = array() ) |
| { |
| $this->palette = new ezcGraphPaletteTango(); |
| $this->data = new ezcGraphChartDataContainer( $this ); |
| |
| // Add standard elements |
| $this->addElement( 'background', new ezcGraphChartElementBackground() ); |
| $this->elements['background']->position = ezcGraph::CENTER | ezcGraph::MIDDLE; |
| |
| $this->addElement( 'title', new ezcGraphChartElementText() ); |
| $this->elements['title']->position = ezcGraph::TOP; |
| $this->renderElement['title'] = false; |
| |
| $this->addElement( 'subtitle', new ezcGraphChartElementText() ); |
| $this->elements['subtitle']->position = ezcGraph::TOP; |
| $this->renderElement['subtitle'] = false; |
| |
| $this->addElement( 'legend', new ezcGraphChartElementLegend() ); |
| $this->elements['legend']->position = ezcGraph::LEFT; |
| |
| // Define standard renderer and driver |
| $this->properties['driver'] = new ezcGraphSvgDriver(); |
| $this->properties['renderer'] = new ezcGraphRenderer2d(); |
| $this->properties['renderer']->setDriver( $this->driver ); |
| |
| // Initialize other properties |
| $this->properties['renderedFile'] = null; |
| } |
| |
| /** |
| * Add element to chart |
| * |
| * Add a chart element to the chart and perform the required configuration |
| * tasks for the chart element. |
| * |
| * @param string $name Element name |
| * @param ezcGraphChartElement $element Chart element |
| * @return void |
| */ |
| protected function addElement( $name, ezcGraphChartElement $element ) |
| { |
| $this->elements[$name] = $element; |
| $this->elements[$name]->font = $this->options->font; |
| $this->elements[$name]->setFromPalette( $this->palette ); |
| |
| // Render element by default |
| $this->renderElement[$name] = true; |
| } |
| |
| /** |
| * Options write access |
| * |
| * @throws ezcBasePropertyNotFoundException |
| * If Option could not be found |
| * @throws ezcBaseValueException |
| * If value is out of range |
| * @param mixed $propertyName Option name |
| * @param mixed $propertyValue Option value; |
| * @return void |
| * @ignore |
| */ |
| public function __set( $propertyName, $propertyValue ) |
| { |
| switch ( $propertyName ) { |
| case 'title': |
| case 'subtitle': |
| $this->elements[$propertyName]->title = $propertyValue; |
| $this->renderElement[$propertyName] = true; |
| break; |
| case 'background': |
| $this->elements[$propertyName]->color = $propertyValue; |
| break; |
| case 'legend': |
| if ( !is_bool( $propertyValue ) ) |
| { |
| throw new ezcBaseValueException( $propertyName, $propertyValue, 'boolean' ); |
| } |
| |
| $this->renderElement['legend'] = (bool) $propertyValue; |
| break; |
| case 'renderer': |
| if ( $propertyValue instanceof ezcGraphRenderer ) |
| { |
| $this->properties['renderer'] = $propertyValue; |
| $this->properties['renderer']->setDriver( $this->driver ); |
| return $this->properties['renderer']; |
| } |
| else |
| { |
| throw new ezcBaseValueException( $propertyName, $propertyValue, 'ezcGraphRenderer' ); |
| } |
| break; |
| case 'driver': |
| if ( $propertyValue instanceof ezcGraphDriver ) |
| { |
| $this->properties['driver'] = $propertyValue; |
| $this->properties['renderer']->setDriver( $this->driver ); |
| return $this->properties['driver']; |
| } |
| else |
| { |
| throw new ezcBaseValueException( $propertyName, $propertyValue, 'ezcGraphDriver' ); |
| } |
| break; |
| case 'palette': |
| if ( $propertyValue instanceof ezcGraphPalette ) |
| { |
| $this->properties['palette'] = $propertyValue; |
| $this->setFromPalette( $this->palette ); |
| } |
| else |
| { |
| throw new ezcBaseValueException( "palette", $propertyValue, "instanceof ezcGraphPalette" ); |
| } |
| |
| break; |
| case 'renderedFile': |
| $this->properties['renderedFile'] = (string) $propertyValue; |
| break; |
| case 'options': |
| if ( $propertyValue instanceof ezcGraphChartOptions ) |
| { |
| $this->options = $propertyValue; |
| } |
| else |
| { |
| throw new ezcBaseValueException( "options", $propertyValue, "instanceof ezcGraphOptions" ); |
| } |
| default: |
| throw new ezcBasePropertyNotFoundException( $propertyName ); |
| break; |
| } |
| } |
| |
| /** |
| * Set colors and border fro this element |
| * |
| * @param ezcGraphPalette $palette Palette |
| * @return void |
| */ |
| public function setFromPalette( ezcGraphPalette $palette ) |
| { |
| $this->options->font->name = $palette->fontName; |
| $this->options->font->color = $palette->fontColor; |
| |
| foreach ( $this->elements as $element ) |
| { |
| $element->setFromPalette( $palette ); |
| } |
| } |
| |
| /** |
| * __get |
| * |
| * @param mixed $propertyName |
| * @throws ezcBasePropertyNotFoundException |
| * If a the value for the property options is not an instance of |
| * @return mixed |
| * @ignore |
| */ |
| public function __get( $propertyName ) |
| { |
| if ( array_key_exists( $propertyName, $this->properties ) ) |
| { |
| return $this->properties[$propertyName]; |
| } |
| |
| if ( isset( $this->elements[$propertyName] ) ) |
| { |
| return $this->elements[$propertyName]; |
| } |
| |
| if ( ( $propertyName === 'options' ) || |
| ( $propertyName === 'data' ) ) |
| { |
| return $this->$propertyName; |
| } |
| else |
| { |
| throw new ezcGraphNoSuchElementException( $propertyName ); |
| } |
| } |
| |
| /** |
| * Returns the default display type of the current chart type. |
| * |
| * @return int Display type |
| */ |
| abstract public function getDefaultDisplayType(); |
| |
| /** |
| * Return filename of rendered file, and false if no file was yet rendered. |
| * |
| * @return mixed |
| */ |
| public function getRenderedFile() |
| { |
| return ( $this->renderedFile !== null ? $this->renderedFile : false ); |
| } |
| |
| /** |
| * Renders this chart |
| * |
| * Creates basic visual chart elements from the chart to be processed by |
| * the renderer. |
| * |
| * @param int $width |
| * @param int $height |
| * @param string $file |
| * @return void |
| */ |
| abstract public function render( $width, $height, $file = null ); |
| |
| /** |
| * Renders this chart to direct output |
| * |
| * Does the same as ezcGraphChart::render(), but renders directly to |
| * output and not into a file. |
| * |
| * @param int $width |
| * @param int $height |
| * @return void |
| */ |
| abstract public function renderToOutput( $width, $height ); |
| } |
| |
| ?> |