View Javadoc

1   /*
2   
3       dsh-iconbundle-tango  Icon bundles for the Tango Project icon theme.
4       Copyright (c) 2005-2013 held jointly by the individual authors.
5   
6       This library is free software; you can redistribute it and/or modify it
7       under the terms of the GNU Lesser General Public License as published
8       by the Free Software Foundation; either version 3 of the License, or (at
9       your option) any later version.
10  
11      This library is distributed in the hope that it will be useful, but WITHOUT
12      ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
13      FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14      License for more details.
15  
16      You should have received a copy of the GNU Lesser General Public License
17      along with this library;  if not, write to the Free Software Foundation,
18      Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA.
19  
20      > http://www.fsf.org/licensing/licenses/lgpl.html
21      > http://www.opensource.org/licenses/lgpl-license.php
22  
23  */
24  package org.dishevelled.iconbundle.tango;
25  
26  import java.awt.Image;
27  import java.awt.Color;
28  import java.awt.Component;
29  
30  import java.awt.image.BufferedImage;
31  
32  import java.net.URL;
33  
34  import javax.imageio.ImageIO;
35  
36  import javax.swing.UIManager;
37  
38  import org.dishevelled.iconbundle.IconSize;
39  import org.dishevelled.iconbundle.IconState;
40  import org.dishevelled.iconbundle.IconBundle;
41  import org.dishevelled.iconbundle.IconTextDirection;
42  
43  import org.dishevelled.iconbundle.impl.IconBundleUtils;
44  
45  import org.dishevelled.iconbundle.impl.svg.SVGIconBundleUtils;
46  
47  /**
48   * Tango project icon bundle.
49   *
50   * @author  Michael Heuer
51   */
52  final class TangoProjectIconBundle
53      implements IconBundle
54  {
55      /** Base url. */
56      private static final String BASE_URL = "/org/freedesktop/tango/";
57  
58      /** Tango project standard icon context. */
59      private final String context;
60  
61      /** Tango project standard icon name. */
62      private final String name;
63  
64  
65      /**
66       * Create a new tango project icon bundle for
67       * the specified standard icon name.
68       *
69       * @param context tango project standard icon context
70       * @param name tango project standard icon name
71       */
72      TangoProjectIconBundle(final String context,
73                             final String name)
74      {
75          this.context = context;
76          this.name = name;
77      }
78  
79  
80      /** {@inheritDoc} */
81      public Image getImage(final Component component,
82                            final IconTextDirection direction,
83                            final IconState state,
84                            final IconSize size)
85      {
86          if (direction == null)
87          {
88              throw new IllegalArgumentException("direction must not be null");
89          }
90          if (state == null)
91          {
92              throw new IllegalArgumentException("state must not be null");
93          }
94          if (size == null)
95          {
96              throw new IllegalArgumentException("size must not be null");
97          }
98  
99          URL url = null;
100         BufferedImage image = null;
101 
102         if (TangoProject.EXTRA_SMALL.equals(size) || TangoProject.SMALL.equals(size) || TangoProject.MEDIUM.equals(size))
103         {
104             try
105             {
106                 url = this.getClass().getResource(BASE_URL + size.toString() + "/" + context + "/" + name + ".png");
107                 image = ImageIO.read(url);
108             }
109             catch (Exception e)
110             {
111                 System.err.println("couldn't find image for url=" + url);
112                 System.err.println("   or=" + BASE_URL + size.toString() + "/" + context + "/" + name + ".png");
113                 e.printStackTrace();
114                 // ignore
115             }
116         }
117         else
118         {
119             int width = size.getWidth();
120             int height = size.getHeight();
121 
122             url = this.getClass().getResource(BASE_URL + "scalable/" + context + "/" + name + ".svg");
123             image = SVGIconBundleUtils.readSVG(url, width, height);
124         }
125 
126         if (IconState.ACTIVE == state)
127         {
128             return IconBundleUtils.makeActive(image);
129         }
130         else if (IconState.MOUSEOVER == state)
131         {
132             return IconBundleUtils.makeMouseover(image);
133         }
134         else if (IconState.SELECTED == state)
135         {
136             Color selectionColor = UIManager.getColor("List.selectionBackground");
137             return IconBundleUtils.makeSelected(image, selectionColor);
138         }
139         else if (IconState.SELECTED_MOUSEOVER == state)
140         {
141             Color selectionColor = UIManager.getColor("List.selectionBackground");
142             return IconBundleUtils.makeSelectedMouseover(image, selectionColor);
143         }
144         else if (IconState.DRAGGING == state)
145         {
146             return IconBundleUtils.makeDragging(image);
147         }
148         else if (IconState.DISABLED == state)
149         {
150             return IconBundleUtils.makeDisabled(image);
151         }
152         else
153         {
154             return image;
155         }
156     }
157 }