[ Index ] |
|
Code source de Cr@wltr@ck 2.2.1 |
1 <?php 2 /* 3 * This work is hereby released into the Public Domain. 4 * To view a copy of the public domain dedication, 5 * visit http://creativecommons.org/licenses/publicdomain/ or send a letter to 6 * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 7 * 8 */ 9 10 require_once dirname(__FILE__)."/Graph.class.php"; 11 12 13 /** 14 * A graph can contain some groups of components 15 * 16 * @package Artichow 17 */ 18 abstract class awComponentGroup extends awComponent { 19 20 /** 21 * Components of this group 22 * 23 * @var array 24 */ 25 protected $components; 26 27 /** 28 * Build the component group 29 */ 30 public function __construct() { 31 parent::__construct(); 32 $this->components = array(); 33 } 34 35 /** 36 * Add a component to the group 37 * 38 * @param awComponent $component A component 39 */ 40 public function add(awComponent $component) { 41 $this->components[] = $component; 42 } 43 44 } 45 46 registerClass('ComponentGroup', TRUE); 47 48 abstract class awComponent { 49 50 /** 51 * Component drawer 52 * 53 * @var Drawer 54 */ 55 protected $drawer; 56 57 /** 58 * Component width 59 * 60 * @var float 61 */ 62 public $width = 1.0; 63 64 /** 65 * Component height 66 * 67 * @var float 68 */ 69 public $height = 1.0; 70 71 /** 72 * Position X of the center the graph (from 0 to 1) 73 * 74 * @var float 75 */ 76 public $x = 0.5; 77 78 /** 79 * Position Y of the center the graph (from 0 to 1) 80 * 81 * @var float 82 */ 83 public $y = 0.5; 84 85 /** 86 * Component absolute width (in pixels) 87 * 88 * 89 * @var int 90 */ 91 public $w; 92 93 /** 94 * Component absolute height (in pixels) 95 * 96 * 97 * @var int 98 */ 99 public $h; 100 101 /** 102 * Left-top corner Y position 103 * 104 * @var float 105 */ 106 public $top; 107 108 /** 109 * Left-top corner X position 110 * 111 * @var float 112 */ 113 public $left; 114 115 /** 116 * Component background color 117 * 118 * @var Color 119 */ 120 protected $background; 121 122 /** 123 * Component padding 124 * 125 * @var Side 126 */ 127 protected $padding; 128 129 /** 130 * Component space 131 * 132 * @var Side 133 */ 134 protected $space; 135 136 /** 137 * Component title 138 * 139 * @var Label 140 */ 141 public $title; 142 143 /** 144 * Adjust automatically the component ? 145 * 146 * @var bool 147 */ 148 protected $auto = TRUE; 149 150 /** 151 * Legend 152 * 153 * @var Legend 154 */ 155 public $legend; 156 157 /** 158 * Build the component 159 */ 160 public function __construct() { 161 162 // Component legend 163 $this->legend = new awLegend(); 164 165 $this->padding = new awSide(25, 25, 25, 25); 166 $this->space = new awSide(0, 0, 0, 0); 167 168 // Component title 169 $this->title = new awLabel( 170 NULL, 171 new awTuffy(10), 172 NULL, 173 0 174 ); 175 $this->title->setAlign(awLabel::CENTER, awLabel::TOP); 176 177 } 178 179 /** 180 * Adjust automatically the component ? 181 * 182 * @param bool $auto 183 */ 184 public function auto($auto) { 185 $this->auto = (bool)$auto; 186 } 187 188 /** 189 * Change the size of the component 190 * 191 * @param int $width Component width (from 0 to 1) 192 * @param int $height Component height (from 0 to 1) 193 */ 194 public function setSize($width, $height) { 195 196 $this->width = (float)$width; 197 $this->height = (float)$height; 198 199 } 200 201 /** 202 * Change the absolute size of the component 203 * 204 * @param int $w Component width (in pixels) 205 * @param int $h Component height (in pixels) 206 */ 207 public function setAbsSize($w, $h) { 208 209 $this->w = (int)$w; 210 $this->h = (int)$h; 211 212 } 213 214 /** 215 * Change component background color 216 * 217 * @param awColor $color (can be null) 218 */ 219 public function setBackgroundColor($color) { 220 if($color === NULL or $color instanceof awColor) { 221 $this->background = $color; 222 } 223 } 224 225 /** 226 * Change component background gradient 227 * 228 * @param awGradient $gradient (can be null) 229 */ 230 public function setBackgroundGradient($gradient) { 231 if($gradient === NULL or $gradient instanceof awGradient) { 232 $this->background = $gradient; 233 } 234 } 235 236 /** 237 * Change component background image 238 * 239 * @param awImage $image (can be null) 240 */ 241 public function setBackgroundImage($image) { 242 if($image === NULL or $image instanceof awImage) { 243 $this->background = $image; 244 } 245 } 246 247 /** 248 * Return the component background 249 * 250 * @return Color, Gradient 251 */ 252 public function getBackground() { 253 return $this->background; 254 } 255 256 /** 257 * Change component padding 258 * 259 * @param int $left Padding in pixels (NULL to keep old value) 260 * @param int $right Padding in pixels (NULL to keep old value) 261 * @param int $top Padding in pixels (NULL to keep old value) 262 * @param int $bottom Padding in pixels (NULL to keep old value) 263 */ 264 public function setPadding($left = NULL, $right = NULL, $top = NULL, $bottom = NULL) { 265 $this->padding->set($left, $right, $top, $bottom); 266 } 267 268 /** 269 * Change component space 270 * 271 * @param float $left Space in % (NULL to keep old value) 272 * @param float $right Space in % (NULL to keep old value) 273 * @param float $bottom Space in % (NULL to keep old value) 274 * @param float $top Space in % (NULL to keep old value) 275 */ 276 public function setSpace($left = NULL, $right = NULL, $bottom = NULL, $top = NULL) { 277 $this->space->set($left, $right, $bottom, $top); 278 } 279 280 /** 281 * Change the absolute position of the component on the graph 282 * 283 * @var int $x Left-top corner X position 284 * @var int $y Left-top corner Y position 285 */ 286 public function setAbsPosition($left, $top) { 287 288 $this->left = (int)$left; 289 $this->top = (int)$top; 290 291 } 292 293 /** 294 * Set the center of the component 295 * 296 * @param int $x Position on X axis of the center of the component 297 * @param int $y Position on Y axis of the center of the component 298 */ 299 public function setCenter($x, $y) { 300 301 $this->x = (float)$x; 302 $this->y = (float)$y; 303 304 } 305 306 /** 307 * Get component coords with its padding 308 * 309 * @return array Coords of the component 310 */ 311 public function getPosition() { 312 313 // Get component coords 314 $x1 = $this->padding->left; 315 $y1 = $this->padding->top; 316 $x2 = $this->w - $this->padding->right; 317 $y2 = $this->h - $this->padding->bottom; 318 319 return array($x1, $y1, $x2, $y2); 320 321 } 322 323 /** 324 * Init the drawing of the component 325 */ 326 public function init(awDrawer $drawer) { 327 328 // Set component background 329 $background = $this->getBackground(); 330 331 if($background !== NULL) { 332 333 $p1 = new awPoint(0, 0); 334 $p2 = new awPoint($this->w - 1, $this->h - 1); 335 336 if($background instanceof awImage) { 337 338 $drawer->copyImage( 339 $background, 340 $p1, 341 $p2 342 ); 343 344 } else { 345 346 $drawer->filledRectangle( 347 $background, 348 new awLine($p1, $p2) 349 ); 350 351 } 352 353 } 354 } 355 356 /** 357 * Finalize the drawing of the component 358 */ 359 public function finalize(awDrawer $drawer) { 360 361 // Draw component title 362 $point = new awPoint( 363 $this->w / 2, 364 $this->padding->top - 8 365 ); 366 $this->title->draw($drawer, $point); 367 368 // Draw legend 369 $this->legend->draw($drawer); 370 371 } 372 373 /** 374 * Draw the grid around your component 375 * 376 * @param Drawer A drawer 377 * @return array Coords for the component 378 */ 379 abstract public function drawEnvelope(awDrawer $drawer); 380 381 /** 382 * Draw the component on the graph 383 * Component should be drawed into specified coords 384 * 385 * @param Drawer A drawer 386 * @param int $x1 387 * @param int $y1 388 * @param int $x2 389 * @param int $y2 390 * @param bool $aliasing Use anti-aliasing to draw the component ? 391 */ 392 abstract public function drawComponent(awDrawer $drawer, $x1, $y1, $x2, $y2, $aliasing); 393 394 /** 395 * Get space width in pixels 396 * 397 * @param int $width Component width 398 * @param int $height Component height 399 * @return array 400 */ 401 protected function getSpace($width, $height) { 402 403 $left = (int)($width * $this->space->left / 100); 404 $right = (int)($width * $this->space->right / 100); 405 $top = (int)($height * $this->space->top / 100); 406 $bottom = (int)($height * $this->space->bottom / 100); 407 408 return array($left, $right, $top, $bottom); 409 410 } 411 412 } 413 414 registerClass('Component', TRUE); 415 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Sep 6 14:14:11 2007 | par Balluche grâce à PHPXref 0.7 |