Subversion Repositories Applications.gtt

Rev

Rev 61 | 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";
 
/**
 * Grid
 *
 * @package Artichow 
 */
class awGrid {
        
        /**
         * Vertical lines of the grid
         *
         * @var array
         */
        private $xgrid = array();
        
        /**
         * Horizontal lines of the grid
         *
         * @var array
         */
        private $ygrid = array();

        /**
         * Is the component grid hidden ?
         *
         * @var bool
         */
        private $hide = FALSE;

        /**
         * Are horizontal lines hidden ?
         *
         * @var bool
         */
        private $hideHorizontal = FALSE;

        /**
         * Are vertical lines hidden ?
         *
         * @var bool
         */
        private $hideVertical = FALSE;
        
        /**
         * Grid color
         *
         * @var Color
         */
        private $color;
        
        /**
         * Grid space
         *
         * @var int
         */
        private $space;
        
        /**
         * Line type
         *
         * @var int
         */
        private $type = awLine::SOLID;
        
        /**
         * Grid interval
         *
         * @var int
         */
        private $interval = array(1, 1);
        
        /**
         * Grid background color
         *
         * @var Color
         */
        private $background;
        
        /**
         * Build the factory
         */
        public function __construct() {
        
                // Set a grid default color
                $this->color = new awColor(210, 210, 210);
                $this->background = new awColor(255, 255, 255, 100);
                
        }
        
        /**
         * Hide grid ?
         *
         * @param bool $hide
         */
        public function hide($hide = TRUE) {
                $this->hide = (bool)$hide;
        }
        
        /**
         * Hide horizontal lines ?
         *
         * @param bool $hideHorizontal
         */
        public function hideHorizontal($hide = TRUE) {
                $this->hideHorizontal = (bool)$hide;
        }
        
        /**
         * Hide vertical lines ?
         *
         * @param bool $hideVertical
         */
        public function hideVertical($hide = TRUE) {
                $this->hideVertical = (bool)$hide;
        }
        
        /**
         * Change grid color
         *
         * @param awColor $color
         */
        public function setColor(awColor $color) {
                $this->color = $color;
        }
        
        /**
         * Remove grid background
         */
        public function setNoBackground() {
                $this->background = NULL;
        }
        
        /**
         * Change grid background color
         *
         * @param awColor $color
         */
        public function setBackgroundColor(awColor $color) {
                $this->background = $color;
        }
        
        /**
         * Change line type
         *
         * @param int $type
         */
        public function setType($type) {
                $this->type = (int)$type;
        }
        
        /**
         * Change grid interval
         *
         * @param int $hInterval
         * @param int $vInterval
         */
        public function setInterval($hInterval, $vInterval) {
                $this->interval = array((int)$hInterval, (int)$vInterval);
        }
        
        /**
         * Set grid space
         *
         * @param int $left Left space in pixels
         * @param int $right Right space in pixels
         * @param int $top Top space in pixels
         * @param int $bottom Bottom space in pixels
         */
        public function setSpace($left, $right, $top, $bottom) {
                $this->space = array((int)$left, (int)$right, (int)$top, (int)$bottom);
        }
        
        /**
         * Change the current grid
         *
         * @param array $xgrid Vertical lines
         * @param array $ygrid Horizontal lines
         */
        public function setGrid($xgrid, $ygrid) {
        
                if(empty($this->xgrid)) {
                        $this->xgrid = $xgrid;
                }
                if(empty($this->ygrid)) {
                        $this->ygrid = $ygrid;
                }
        
        }
        
        /**
         * Draw grids
         *
         * @param awDriver $driver A driver object
         * @param int $x1
         * @param int $y1
         * @param int $x2
         * @param int $y2
         */
        public function draw(awDriver $driver, $x1, $y1, $x2, $y2) {
        
                if($this->background instanceof awColor) {
                
                        // Draw background color
                        $driver->filledRectangle(
                                $this->background, 
                                awLine::build($x1, $y1, $x2, $y2)
                        );
                        
                }

                if($this->hide === FALSE) {
                        
                        $this->drawGrid(
                                $driver,
                                $this->color,
                                $this->hideVertical ? array() : $this->xgrid,
                                $this->hideHorizontal ? array() : $this->ygrid,
                                $x1, $y1, $x2, $y2,
                                $this->type,
                                $this->space,
                                $this->interval[0],
                                $this->interval[1]
                        );
                        
                }
        
        }
        
        private function drawGrid(
                awDriver $driver, awColor $color,
                $nx, $ny, $x1, $y1, $x2, $y2,
                $type, $space, $hInterval, $vInterval
        ) {
        
                list($left, $right, $top, $bottom) = $space;
                
                $width = $x2 - $x1 - $left - $right;
                $height = $y2 - $y1 - $top - $bottom;
        
                foreach($nx as $key => $n) {
                
                        if(($key % $vInterval) === 0) {
                
                                $pos = (int)round($x1 + $left + $n * $width);
                                $driver->line(
                                        $color,
                                        new awLine(
                                                new awPoint($pos, $y1),
                                                new awPoint($pos, $y2),
                                                $type
                                        )
                                );
                                
                        }
                
                }
        
                foreach($ny as $key => $n) {
                
                        if(($key % $hInterval) === 0) {
                
                                $pos = (int)round($y1 + $top + $n * $height);
                                $driver->line(
                                        $color,
                                        new awLine(
                                                new awPoint($x1, $pos),
                                                new awPoint($x2, $pos),
                                                $type
                                        )
                                );
                                
                        }
                
                }
        
        }

}

registerClass('Grid');
?>