source: sourcecode/application/libraries/PHPExcel/Worksheet/BaseDrawing.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 9.9 KB
Line 
1<?php
2/**
3 * PHPExcel
4 *
5 * Copyright (c) 2006 - 2014 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 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
25 * @version    1.8.0, 2014-03-02
26 */
27
28
29/**
30 * PHPExcel_Worksheet_BaseDrawing
31 *
32 * @category   PHPExcel
33 * @package    PHPExcel_Worksheet
34 * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */
36class 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}
Note: See TracBrowser for help on using the repository browser.