Subversion Repositories eFlore/Applications.cel

Rev

Rev 2388 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2388 jpm 1
<?php
2
/**
3
 * PHPExcel
4
 *
5
 * Copyright (c) 2006 - 2013 PHPExcel
6
 *
7
 * This library is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * This library is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20
 *
21
 * @category   PHPExcel
22
 * @package    PHPExcel_Worksheet
23
 * @copyright  Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
24
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
25
 * @version    ##VERSION##, ##DATE##
26
 */
27
 
28
 
29
/**
30
 * PHPExcel_Worksheet_BaseDrawing
31
 *
32
 * @category   PHPExcel
33
 * @package    PHPExcel_Worksheet
34
 * @copyright  Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
35
 */
36
class PHPExcel_Worksheet_BaseDrawing implements PHPExcel_IComparable
37
{
38
	/**
39
	 * Image counter
40
	 *
41
	 * @var int
42
	 */
43
	private static $_imageCounter = 0;
44
 
45
	/**
46
	 * Image index
47
	 *
48
	 * @var int
49
	 */
50
	private $_imageIndex = 0;
51
 
52
	/**
53
	 * Name
54
	 *
55
	 * @var string
56
	 */
57
	protected $_name;
58
 
59
	/**
60
	 * Description
61
	 *
62
	 * @var string
63
	 */
64
	protected $_description;
65
 
66
	/**
67
	 * Worksheet
68
	 *
69
	 * @var PHPExcel_Worksheet
70
	 */
71
	protected $_worksheet;
72
 
73
	/**
74
	 * Coordinates
75
	 *
76
	 * @var string
77
	 */
78
	protected $_coordinates;
79
 
80
	/**
81
	 * Offset X
82
	 *
83
	 * @var int
84
	 */
85
	protected $_offsetX;
86
 
87
	/**
88
	 * Offset Y
89
	 *
90
	 * @var int
91
	 */
92
	protected $_offsetY;
93
 
94
	/**
95
	 * Width
96
	 *
97
	 * @var int
98
	 */
99
	protected $_width;
100
 
101
	/**
102
	 * Height
103
	 *
104
	 * @var int
105
	 */
106
	protected $_height;
107
 
108
	/**
109
	 * Proportional resize
110
	 *
111
	 * @var boolean
112
	 */
113
	protected $_resizeProportional;
114
 
115
	/**
116
	 * Rotation
117
	 *
118
	 * @var int
119
	 */
120
	protected $_rotation;
121
 
122
	/**
123
	 * Shadow
124
	 *
125
	 * @var PHPExcel_Worksheet_Drawing_Shadow
126
	 */
127
	protected $_shadow;
128
 
129
    /**
130
     * Create a new PHPExcel_Worksheet_BaseDrawing
131
     */
132
    public function __construct()
133
    {
134
    	// Initialise values
135
    	$this->_name				= '';
136
    	$this->_description			= '';
137
    	$this->_worksheet			= null;
138
    	$this->_coordinates			= 'A1';
139
    	$this->_offsetX				= 0;
140
    	$this->_offsetY				= 0;
141
    	$this->_width				= 0;
142
    	$this->_height				= 0;
143
    	$this->_resizeProportional	= true;
144
    	$this->_rotation			= 0;
145
    	$this->_shadow				= new PHPExcel_Worksheet_Drawing_Shadow();
146
 
147
		// Set image index
148
		self::$_imageCounter++;
149
		$this->_imageIndex 			= self::$_imageCounter;
150
    }
151
 
152
    /**
153
     * Get image index
154
     *
155
     * @return int
156
     */
157
    public function getImageIndex() {
158
    	return $this->_imageIndex;
159
    }
160
 
161
    /**
162
     * Get Name
163
     *
164
     * @return string
165
     */
166
    public function getName() {
167
    	return $this->_name;
168
    }
169
 
170
    /**
171
     * Set Name
172
     *
173
     * @param string $pValue
174
     * @return PHPExcel_Worksheet_BaseDrawing
175
     */
176
    public function setName($pValue = '') {
177
    	$this->_name = $pValue;
178
    	return $this;
179
    }
180
 
181
    /**
182
     * Get Description
183
     *
184
     * @return string
185
     */
186
    public function getDescription() {
187
    	return $this->_description;
188
    }
189
 
190
    /**
191
     * Set Description
192
     *
193
     * @param string $pValue
194
     * @return PHPExcel_Worksheet_BaseDrawing
195
     */
196
    public function setDescription($pValue = '') {
197
    	$this->_description = $pValue;
198
    	return $this;
199
    }
200
 
201
    /**
202
     * Get Worksheet
203
     *
204
     * @return PHPExcel_Worksheet
205
     */
206
    public function getWorksheet() {
207
    	return $this->_worksheet;
208
    }
209
 
210
    /**
211
     * Set Worksheet
212
     *
213
     * @param 	PHPExcel_Worksheet 	$pValue
214
     * @param 	bool				$pOverrideOld	If a Worksheet has already been assigned, overwrite it and remove image from old Worksheet?
215
     * @throws 	PHPExcel_Exception
216
     * @return PHPExcel_Worksheet_BaseDrawing
217
     */
218
    public function setWorksheet(PHPExcel_Worksheet $pValue = null, $pOverrideOld = false) {
219
    	if (is_null($this->_worksheet)) {
220
    		// Add drawing to PHPExcel_Worksheet
221
	    	$this->_worksheet = $pValue;
222
	    	$this->_worksheet->getCell($this->_coordinates);
223
	    	$this->_worksheet->getDrawingCollection()->append($this);
224
    	} else {
225
    		if ($pOverrideOld) {
226
    			// Remove drawing from old PHPExcel_Worksheet
227
    			$iterator = $this->_worksheet->getDrawingCollection()->getIterator();
228
 
229
    			while ($iterator->valid()) {
230
    				if ($iterator->current()->getHashCode() == $this->getHashCode()) {
231
    					$this->_worksheet->getDrawingCollection()->offsetUnset( $iterator->key() );
232
    					$this->_worksheet = null;
233
    					break;
234
    				}
235
    			}
236
 
237
    			// Set new PHPExcel_Worksheet
238
    			$this->setWorksheet($pValue);
239
    		} else {
240
    			throw new PHPExcel_Exception("A PHPExcel_Worksheet has already been assigned. Drawings can only exist on one PHPExcel_Worksheet.");
241
    		}
242
    	}
243
    	return $this;
244
    }
245
 
246
    /**
247
     * Get Coordinates
248
     *
249
     * @return string
250
     */
251
    public function getCoordinates() {
252
    	return $this->_coordinates;
253
    }
254
 
255
    /**
256
     * Set Coordinates
257
     *
258
     * @param string $pValue
259
     * @return PHPExcel_Worksheet_BaseDrawing
260
     */
261
    public function setCoordinates($pValue = 'A1') {
262
    	$this->_coordinates = $pValue;
263
    	return $this;
264
    }
265
 
266
    /**
267
     * Get OffsetX
268
     *
269
     * @return int
270
     */
271
    public function getOffsetX() {
272
    	return $this->_offsetX;
273
    }
274
 
275
    /**
276
     * Set OffsetX
277
     *
278
     * @param int $pValue
279
     * @return PHPExcel_Worksheet_BaseDrawing
280
     */
281
    public function setOffsetX($pValue = 0) {
282
    	$this->_offsetX = $pValue;
283
    	return $this;
284
    }
285
 
286
    /**
287
     * Get OffsetY
288
     *
289
     * @return int
290
     */
291
    public function getOffsetY() {
292
    	return $this->_offsetY;
293
    }
294
 
295
    /**
296
     * Set OffsetY
297
     *
298
     * @param int $pValue
299
     * @return PHPExcel_Worksheet_BaseDrawing
300
     */
301
    public function setOffsetY($pValue = 0) {
302
    	$this->_offsetY = $pValue;
303
    	return $this;
304
    }
305
 
306
    /**
307
     * Get Width
308
     *
309
     * @return int
310
     */
311
    public function getWidth() {
312
    	return $this->_width;
313
    }
314
 
315
    /**
316
     * Set Width
317
     *
318
     * @param int $pValue
319
     * @return PHPExcel_Worksheet_BaseDrawing
320
     */
321
    public function setWidth($pValue = 0) {
322
    	// Resize proportional?
323
    	if ($this->_resizeProportional && $pValue != 0) {
324
    		$ratio = $this->_height / $this->_width;
325
    		$this->_height = round($ratio * $pValue);
326
    	}
327
 
328
    	// Set width
329
    	$this->_width = $pValue;
330
 
331
    	return $this;
332
    }
333
 
334
    /**
335
     * Get Height
336
     *
337
     * @return int
338
     */
339
    public function getHeight() {
340
    	return $this->_height;
341
    }
342
 
343
    /**
344
     * Set Height
345
     *
346
     * @param int $pValue
347
     * @return PHPExcel_Worksheet_BaseDrawing
348
     */
349
    public function setHeight($pValue = 0) {
350
    	// Resize proportional?
351
    	if ($this->_resizeProportional && $pValue != 0) {
352
    		$ratio = $this->_width / $this->_height;
353
    		$this->_width = round($ratio * $pValue);
354
    	}
355
 
356
    	// Set height
357
    	$this->_height = $pValue;
358
 
359
    	return $this;
360
    }
361
 
362
    /**
363
     * Set width and height with proportional resize
364
	 * Example:
365
	 * <code>
366
	 * $objDrawing->setResizeProportional(true);
367
	 * $objDrawing->setWidthAndHeight(160,120);
368
	 * </code>
369
	 *
370
     * @author Vincent@luo MSN:kele_100@hotmail.com
371
     * @param int $width
372
     * @param int $height
373
     * @return PHPExcel_Worksheet_BaseDrawing
374
     */
375
	public function setWidthAndHeight($width = 0, $height = 0) {
376
		$xratio = $width / $this->_width;
377
		$yratio = $height / $this->_height;
378
		if ($this->_resizeProportional && !($width == 0 || $height == 0)) {
379
			if (($xratio * $this->_height) < $height) {
380
				$this->_height = ceil($xratio * $this->_height);
381
				$this->_width  = $width;
382
			} else {
383
				$this->_width	= ceil($yratio * $this->_width);
384
				$this->_height	= $height;
385
			}
386
		}
387
		return $this;
388
	}
389
 
390
    /**
391
     * Get ResizeProportional
392
     *
393
     * @return boolean
394
     */
395
    public function getResizeProportional() {
396
    	return $this->_resizeProportional;
397
    }
398
 
399
    /**
400
     * Set ResizeProportional
401
     *
402
     * @param boolean $pValue
403
     * @return PHPExcel_Worksheet_BaseDrawing
404
     */
405
    public function setResizeProportional($pValue = true) {
406
    	$this->_resizeProportional = $pValue;
407
    	return $this;
408
    }
409
 
410
    /**
411
     * Get Rotation
412
     *
413
     * @return int
414
     */
415
    public function getRotation() {
416
    	return $this->_rotation;
417
    }
418
 
419
    /**
420
     * Set Rotation
421
     *
422
     * @param int $pValue
423
     * @return PHPExcel_Worksheet_BaseDrawing
424
     */
425
    public function setRotation($pValue = 0) {
426
    	$this->_rotation = $pValue;
427
    	return $this;
428
    }
429
 
430
    /**
431
     * Get Shadow
432
     *
433
     * @return PHPExcel_Worksheet_Drawing_Shadow
434
     */
435
    public function getShadow() {
436
    	return $this->_shadow;
437
    }
438
 
439
    /**
440
     * Set Shadow
441
     *
442
     * @param 	PHPExcel_Worksheet_Drawing_Shadow $pValue
443
     * @throws 	PHPExcel_Exception
444
     * @return PHPExcel_Worksheet_BaseDrawing
445
     */
446
    public function setShadow(PHPExcel_Worksheet_Drawing_Shadow $pValue = null) {
447
   		$this->_shadow = $pValue;
448
   		return $this;
449
    }
450
 
451
	/**
452
	 * Get hash code
453
	 *
454
	 * @return string	Hash code
455
	 */
456
	public function getHashCode() {
457
    	return md5(
458
    		  $this->_name
459
    		. $this->_description
460
    		. $this->_worksheet->getHashCode()
461
    		. $this->_coordinates
462
    		. $this->_offsetX
463
    		. $this->_offsetY
464
    		. $this->_width
465
    		. $this->_height
466
    		. $this->_rotation
467
    		. $this->_shadow->getHashCode()
468
    		. __CLASS__
469
    	);
470
    }
471
 
472
	/**
473
	 * Implement PHP __clone to create a deep clone, not just a shallow copy.
474
	 */
475
	public function __clone() {
476
		$vars = get_object_vars($this);
477
		foreach ($vars as $key => $value) {
478
			if (is_object($value)) {
479
				$this->$key = clone $value;
480
			} else {
481
				$this->$key = $value;
482
			}
483
		}
484
	}
485
}