summaryrefslogtreecommitdiffstats
path: root/library/Icinga/Chart/Primitive/Styleable.php
blob: 678b940e77fed3b3259fb06891c1262497552114 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<?php
/* Icinga Web 2 | (c) 2013 Icinga Development Team | GPLv2+ */


namespace Icinga\Chart\Primitive;

use DOMElement;

/**
 * Base class for stylable drawables
 */
class Styleable
{

    /**
     * The stroke width to use
     *
     * @var int
     */
    public $strokeWidth = 0;

    /**
     * The stroke color to use
     *
     * @var string
     */
    public $strokeColor = '#000';

    /**
     * The fill color to use
     *
     * @var string
     */
    public $fill = 'none';

    /**
     * Additional styles to be appended to the style attribute
     *
     * @var string
     */
    public $additionalStyle = '';

    /**
     * The id of this element
     *
     * @var string
     */
    public $id = null;

    /**
     * Additional attributes to be set
     *
     * @var array
     */
    public $attributes = array();

    /**
     * Set the stroke width for this drawable
     *
     * @param   string $width   The stroke with with unit
     *
     * @return  $this            Fluid interface
     */
    public function setStrokeWidth($width)
    {
        $this->strokeWidth = $width;
        return $this;
    }

    /**
     * Set the color for the stroke or none for no stroke
     *
     * @param   string $color   The color to set for the stroke
     *
     * @return  $this            Fluid interface
     */
    public function setStrokeColor($color)
    {
        $this->strokeColor = $color ? $color : 'none';
        return $this;
    }

    /**
     * Set additional styles for this drawable
     *
     * @param   string $styles  The styles to set additionally
     *
     * @return  $this            Fluid interface
     */
    public function setAdditionalStyle($styles)
    {
        $this->additionalStyle = $styles;
        return $this;
    }

    /**
     * Set the fill for this styleable
     *
     * @param   string $color   The color to use for filling or null to use no fill
     *
     * @return  $this            Fluid interface
     */
    public function setFill($color = null)
    {
        $this->fill = $color ? $color : 'none';
        return $this;
    }

    /**
     * Set the id for this element
     *
     * @param   string $id  The id to set for this element
     *
     * @return  $this        Fluid interface
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

    /**
     * Return the content of the style attribute as a string
     *
     * @return string A string containing styles
     */
    public function getStyle()
    {
        $base = sprintf("fill: %s; stroke: %s;stroke-width: %s;", $this->fill, $this->strokeColor, $this->strokeWidth);
        $base .= ';' . $this->additionalStyle . ';';
        return $base;
    }

    /**
     *  Add an additional attribute to this element
     */
    public function setAttribute($key, $value)
    {
        $this->attributes[$key] = $value;
    }

    /**
     * Apply attribute to a DOMElement
     *
     * @param DOMElement $el Element to apply attributes
     */
    protected function applyAttributes(DOMElement $el)
    {
        foreach ($this->attributes as $name => $value) {
            $el->setAttribute($name, $value);
        }
    }
}