<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.ui.internal.util</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.ui.internal.util</strong></font><br>
               Class XSLPluginImageHelper</h2><br><hr><pre>public class <strong>XSLPluginImageHelper</strong>
extends java.lang.Object</pre>Helper class to handle images provided by this plug-in.
 
 NOTE: For internal use only. For images used externally, please use the
 Shared***ImageHelper class instead.<p></p><hr><table width="100%" border="1"><tr bgcolor="#CCCCFF"><td width="100%"><h2>Constructor Summary</h2></td></tr><tr><td><code><strong><a href="#con_XSLPluginImageHelper">XSLPluginImageHelper</a></strong>()</code></td></tr></table><br><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Method Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public Image</code></td><td width="" align="left"><code><a href="#method_getImage">getImage</a>(java.lang.String resource)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Retrieves the image associated with resource from the image registry.
 If the image cannot be retrieved, attempt to find and load the image at
 the location specified in resource.</td></tr><tr valign="top"><td width="20%" align="right"><code>public ImageDescriptor</code></td><td width="" align="left"><code><a href="#method_getImageDescriptor">getImageDescriptor</a>(java.lang.String resource)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Retrieves the image descriptor associated with resource from the image
 descriptor registry. If the image descriptor cannot be retrieved,
 attempt to find and load the image descriptor at the location specified
 in resource.</td></tr><tr valign="top"><td width="20%" align="right"><code>public static org.eclipse.wst.xsl.ui.internal.util.XSLPluginImageHelper</code></td><td width="" align="left"><code><a href="#method_getInstance">getInstance</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Gets the instance.</td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Constructor Detail
               </h2></td></tr></table><h2><a name="con_XSLPluginImageHelper">XSLPluginImageHelper</a></h2><p><code>public <strong>XSLPluginImageHelper</strong>()</code></p><p></p><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Methods Detail
               </h2></td></tr></table><h2><a name="method_getImage">getImage</a></h2><p><code>public Image <strong>getImage</strong>(java.lang.String resource)</code></p><p>Retrieves the image associated with resource from the image registry.
 If the image cannot be retrieved, attempt to find and load the image at
 the location specified in resource.</p><h3>Parameters</h3><p><code>resource</code> - the image to retrieve</p><h3>Returns</h3><p><code>Image</code> - Image the image associated with resource or null if one could          not be found</p><hr><h2><a name="method_getImageDescriptor">getImageDescriptor</a></h2><p><code>public ImageDescriptor <strong>getImageDescriptor</strong>(java.lang.String resource)</code></p><p>Retrieves the image descriptor associated with resource from the image
 descriptor registry. If the image descriptor cannot be retrieved,
 attempt to find and load the image descriptor at the location specified
 in resource.</p><h3>Parameters</h3><p><code>resource</code> - the image descriptor to retrieve</p><h3>Returns</h3><p><code>ImageDescriptor</code> - ImageDescriptor the image descriptor assocated with resource or          the default "missing" image descriptor if one could not be          found</p><hr><h2><a name="method_getInstance">getInstance</a></h2><p><code>public org.eclipse.wst.xsl.ui.internal.util.XSLPluginImageHelper <strong>getInstance</strong>()</code></p><p>Gets the instance.</p><h3>Returns</h3><p><code>org.eclipse.wst.xsl.ui.internal.util.XSLPluginImageHelper</code> - Returns a XMLEditorPluginImageHelper</p><hr></body></html>