]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MLIB/HTML/Icon.php
Agrego tareas pendientes al TODO.
[mecon/meconlib.git] / lib / MLIB / HTML / Icon.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
11 any later version.
12
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Creado:  mar mar 16 15:55:32 ART 2004
22 Author:  Leandro Lucarella <llucar@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MECON/HTML/Link.php';
28 require_once 'MECON/HTML/Image.php';
29
30 /**
31  * Ícono.
32  *
33  * Básicamente es una imágen con un link.
34  * Ejemplo:
35  * @code
36  * require_once 'MECON/HTML/Icon.php';
37  * require_once 'MECON/HTML/Link.php';
38  * // Crea un ícono de IR sin link.
39  * $icono1 = new MECON_HTML_Icon('ir');
40  * // Crea un ícono de ELIMINAR que apunta a 'algun/lugar'.
41  * $icono2 = new MECON_HTML_Icon('eliminar', 'algun/lugar');
42  * // Crea un ícono de NUEVO que apunta a 'algun/lugar?id=3&cant=10', tiene el
43  * // texto alternativo '>>' y 1 píxel de borde.
44  * $icono3 = new MECON_HTML_Icon('nuevo',
45  *     new MECON_HTML_Link('algun/lugar', '', array('id' => 3, $cant => 10)),
46  *     '>>', array('border' => 1));
47  * // Muestra todos los íconos.
48  * $icon1->display();
49  * echo $icon2->toHtml();
50  * $icon3->display();
51  * @endcode
52  *
53  * @access public
54  */
55 class MECON_HTML_Icon extends MECON_HTML_Image {
56
57     /**
58      * Link a donde apunta la imagen.
59      * @private
60      */
61     var $_link;
62
63     /**
64      * Alineacion de la imagen con respecto al texto.
65      * @private
66      */
67     var $_align;
68
69     /**
70      * Constructor.
71      *
72      * @param $nombre Nombre de la imágen.
73      * @param $link   Link a donde apunta. Si es null, no tiene un link.
74                       Puede ser un link o un MECON_HTML_Link.
75      * @param $alt    Texto alternativo para la imagen.
76      * @param $attrs  Atributos de la imágen.
77      * @param $align  Alineación de la imagen con respecto al texto.
78      */
79     function MECON_HTML_Icon($nombre, $link = null, $alt = null, $attrs =
80             array(), $align = 'right')
81     {
82         if (is_readable($nombre))
83         {
84             $src = $nombre; 
85         }
86         else             
87         {
88             $src = "/MECON/images/general_$nombre";
89         }
90         if (is_null($alt)) {
91             $alt = '(' . strtoupper($nombre{0}) . ')';
92         }
93         parent::MECON_HTML_Image($src, $alt, $attrs);
94         $this->setLink($link);
95         $this->_align = $align;
96     }
97
98     /**
99      * Converts to HTML output.
100      *
101      * @return string
102      */
103     function toHtml()
104     {
105         if (is_null($this->_link)) {
106             return parent::toHtml();
107         } else {
108             $link = $this->getLink();
109             return $link->toHtml();
110         }
111     }
112
113     /**
114      * Gets image location.
115      */
116     function getSrc()
117     {
118         return $this->getAttribute('src');
119     }
120
121     /**
122      * Sets image location.
123      *
124      * @param  string $src Image location.
125      */
126     function setSrc($src)
127     {
128         $this->updateAttributes(array('src' => $src));
129     }
130
131     /**
132      * Gets image alternate text.
133      */
134     function getAlt()
135     {
136         return $this->getAttribute('alt');
137     }
138
139     /**
140      * Establece el link a donde apunta el ícono.
141      *
142      * @param $link Nuevo link.
143      */
144     function setLink($link)
145     {
146         if (!is_a($link, 'mecon_html_link') and !is_null($link)) {
147             $this->_link = new MECON_HTML_Link($link);
148         } else {
149             $this->_link = $link;
150         }
151     }
152
153     /**
154      * Obtiene el link a donde apunta el ícono.
155      * @param $full Si es true, devuelve el link con la imagen incluida, si
156      *              es false devuelve solo el link.
157      */
158     function getLink($full = true)
159     {
160         $link = $this->_link;
161         if (!$full or is_null($link)) {
162             return $link;
163         }
164
165         if ($this->_align == 'left') {
166             $link->addContents(new MECON_HTML_Image($this->getSrc(),
167                         $this->getAlt(), $this->getAttributes()), true);
168         }
169         elseif ($this->_align == 'right') {
170             $link->addContents(new MECON_HTML_Image($this->getSrc(),
171                         $this->getAlt(), $this->getAttributes()));
172         }
173         return $link;
174     }
175
176 }
177
178 ?>