summaryrefslogtreecommitdiffstats
path: root/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php532
1 files changed, 532 insertions, 0 deletions
diff --git a/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php
new file mode 100644
index 0000000..e7064af
--- /dev/null
+++ b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php
@@ -0,0 +1,532 @@
+<?php
+
+namespace PhpOffice\PhpSpreadsheet\Worksheet;
+
+use PhpOffice\PhpSpreadsheet\Cell\Hyperlink;
+use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
+use PhpOffice\PhpSpreadsheet\IComparable;
+
+class BaseDrawing implements IComparable
+{
+ /**
+ * Image counter.
+ *
+ * @var int
+ */
+ private static $imageCounter = 0;
+
+ /**
+ * Image index.
+ *
+ * @var int
+ */
+ private $imageIndex = 0;
+
+ /**
+ * Name.
+ *
+ * @var string
+ */
+ protected $name;
+
+ /**
+ * Description.
+ *
+ * @var string
+ */
+ protected $description;
+
+ /**
+ * Worksheet.
+ *
+ * @var Worksheet
+ */
+ protected $worksheet;
+
+ /**
+ * Coordinates.
+ *
+ * @var string
+ */
+ protected $coordinates;
+
+ /**
+ * Offset X.
+ *
+ * @var int
+ */
+ protected $offsetX;
+
+ /**
+ * Offset Y.
+ *
+ * @var int
+ */
+ protected $offsetY;
+
+ /**
+ * Width.
+ *
+ * @var int
+ */
+ protected $width;
+
+ /**
+ * Height.
+ *
+ * @var int
+ */
+ protected $height;
+
+ /**
+ * Proportional resize.
+ *
+ * @var bool
+ */
+ protected $resizeProportional;
+
+ /**
+ * Rotation.
+ *
+ * @var int
+ */
+ protected $rotation;
+
+ /**
+ * Shadow.
+ *
+ * @var Drawing\Shadow
+ */
+ protected $shadow;
+
+ /**
+ * Image hyperlink.
+ *
+ * @var null|Hyperlink
+ */
+ private $hyperlink;
+
+ /**
+ * Create a new BaseDrawing.
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->name = '';
+ $this->description = '';
+ $this->worksheet = null;
+ $this->coordinates = 'A1';
+ $this->offsetX = 0;
+ $this->offsetY = 0;
+ $this->width = 0;
+ $this->height = 0;
+ $this->resizeProportional = true;
+ $this->rotation = 0;
+ $this->shadow = new Drawing\Shadow();
+
+ // Set image index
+ ++self::$imageCounter;
+ $this->imageIndex = self::$imageCounter;
+ }
+
+ /**
+ * Get image index.
+ *
+ * @return int
+ */
+ public function getImageIndex()
+ {
+ return $this->imageIndex;
+ }
+
+ /**
+ * Get Name.
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set Name.
+ *
+ * @param string $pValue
+ *
+ * @return $this
+ */
+ public function setName($pValue)
+ {
+ $this->name = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get Description.
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Set Description.
+ *
+ * @param string $description
+ *
+ * @return $this
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Get Worksheet.
+ *
+ * @return Worksheet
+ */
+ public function getWorksheet()
+ {
+ return $this->worksheet;
+ }
+
+ /**
+ * Set Worksheet.
+ *
+ * @param Worksheet $pValue
+ * @param bool $pOverrideOld If a Worksheet has already been assigned, overwrite it and remove image from old Worksheet?
+ *
+ * @return $this
+ */
+ public function setWorksheet(?Worksheet $pValue = null, $pOverrideOld = false)
+ {
+ if ($this->worksheet === null) {
+ // Add drawing to \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet
+ $this->worksheet = $pValue;
+ $this->worksheet->getCell($this->coordinates);
+ $this->worksheet->getDrawingCollection()->append($this);
+ } else {
+ if ($pOverrideOld) {
+ // Remove drawing from old \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet
+ $iterator = $this->worksheet->getDrawingCollection()->getIterator();
+
+ while ($iterator->valid()) {
+ if ($iterator->current()->getHashCode() === $this->getHashCode()) {
+ $this->worksheet->getDrawingCollection()->offsetUnset($iterator->key());
+ $this->worksheet = null;
+
+ break;
+ }
+ }
+
+ // Set new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet
+ $this->setWorksheet($pValue);
+ } else {
+ throw new PhpSpreadsheetException('A Worksheet has already been assigned. Drawings can only exist on one \\PhpOffice\\PhpSpreadsheet\\Worksheet.');
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get Coordinates.
+ *
+ * @return string
+ */
+ public function getCoordinates()
+ {
+ return $this->coordinates;
+ }
+
+ /**
+ * Set Coordinates.
+ *
+ * @param string $pValue eg: 'A1'
+ *
+ * @return $this
+ */
+ public function setCoordinates($pValue)
+ {
+ $this->coordinates = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get OffsetX.
+ *
+ * @return int
+ */
+ public function getOffsetX()
+ {
+ return $this->offsetX;
+ }
+
+ /**
+ * Set OffsetX.
+ *
+ * @param int $pValue
+ *
+ * @return $this
+ */
+ public function setOffsetX($pValue)
+ {
+ $this->offsetX = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get OffsetY.
+ *
+ * @return int
+ */
+ public function getOffsetY()
+ {
+ return $this->offsetY;
+ }
+
+ /**
+ * Set OffsetY.
+ *
+ * @param int $pValue
+ *
+ * @return $this
+ */
+ public function setOffsetY($pValue)
+ {
+ $this->offsetY = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get Width.
+ *
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->width;
+ }
+
+ /**
+ * Set Width.
+ *
+ * @param int $pValue
+ *
+ * @return $this
+ */
+ public function setWidth($pValue)
+ {
+ // Resize proportional?
+ if ($this->resizeProportional && $pValue != 0) {
+ $ratio = $this->height / ($this->width != 0 ? $this->width : 1);
+ $this->height = round($ratio * $pValue);
+ }
+
+ // Set width
+ $this->width = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get Height.
+ *
+ * @return int
+ */
+ public function getHeight()
+ {
+ return $this->height;
+ }
+
+ /**
+ * Set Height.
+ *
+ * @param int $pValue
+ *
+ * @return $this
+ */
+ public function setHeight($pValue)
+ {
+ // Resize proportional?
+ if ($this->resizeProportional && $pValue != 0) {
+ $ratio = $this->width / ($this->height != 0 ? $this->height : 1);
+ $this->width = round($ratio * $pValue);
+ }
+
+ // Set height
+ $this->height = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Set width and height with proportional resize.
+ *
+ * Example:
+ * <code>
+ * $objDrawing->setResizeProportional(true);
+ * $objDrawing->setWidthAndHeight(160,120);
+ * </code>
+ *
+ * @author Vincent@luo MSN:kele_100@hotmail.com
+ *
+ * @param int $width
+ * @param int $height
+ *
+ * @return $this
+ */
+ public function setWidthAndHeight($width, $height)
+ {
+ $xratio = $width / ($this->width != 0 ? $this->width : 1);
+ $yratio = $height / ($this->height != 0 ? $this->height : 1);
+ if ($this->resizeProportional && !($width == 0 || $height == 0)) {
+ if (($xratio * $this->height) < $height) {
+ $this->height = ceil($xratio * $this->height);
+ $this->width = $width;
+ } else {
+ $this->width = ceil($yratio * $this->width);
+ $this->height = $height;
+ }
+ } else {
+ $this->width = $width;
+ $this->height = $height;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get ResizeProportional.
+ *
+ * @return bool
+ */
+ public function getResizeProportional()
+ {
+ return $this->resizeProportional;
+ }
+
+ /**
+ * Set ResizeProportional.
+ *
+ * @param bool $pValue
+ *
+ * @return $this
+ */
+ public function setResizeProportional($pValue)
+ {
+ $this->resizeProportional = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get Rotation.
+ *
+ * @return int
+ */
+ public function getRotation()
+ {
+ return $this->rotation;
+ }
+
+ /**
+ * Set Rotation.
+ *
+ * @param int $pValue
+ *
+ * @return $this
+ */
+ public function setRotation($pValue)
+ {
+ $this->rotation = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get Shadow.
+ *
+ * @return Drawing\Shadow
+ */
+ public function getShadow()
+ {
+ return $this->shadow;
+ }
+
+ /**
+ * Set Shadow.
+ *
+ * @param Drawing\Shadow $pValue
+ *
+ * @return $this
+ */
+ public function setShadow(?Drawing\Shadow $pValue = null)
+ {
+ $this->shadow = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get hash code.
+ *
+ * @return string Hash code
+ */
+ public function getHashCode()
+ {
+ return md5(
+ $this->name .
+ $this->description .
+ $this->worksheet->getHashCode() .
+ $this->coordinates .
+ $this->offsetX .
+ $this->offsetY .
+ $this->width .
+ $this->height .
+ $this->rotation .
+ $this->shadow->getHashCode() .
+ __CLASS__
+ );
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone()
+ {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if ($key == 'worksheet') {
+ $this->worksheet = null;
+ } elseif (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+
+ public function setHyperlink(?Hyperlink $pHyperlink = null): void
+ {
+ $this->hyperlink = $pHyperlink;
+ }
+
+ /**
+ * @return null|Hyperlink
+ */
+ public function getHyperlink()
+ {
+ return $this->hyperlink;
+ }
+}