| /******************************************************************************* |
| * Copyright (c) 2000, 2008 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.help.ui.internal; |
| import java.net.URL; |
| |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtension; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.resource.ImageRegistry; |
| import org.eclipse.swt.graphics.Image; |
| import org.osgi.framework.Bundle; |
| /** |
| * Uses a resource bundle to load images and strings from a property file. This |
| * class needs to properly use the desired locale. |
| */ |
| public class HelpUIResources { |
| |
| private static final String LEAF = "_leaf"; //$NON-NLS-1$ |
| private static final String CLOSED = "_closed"; //$NON-NLS-1$ |
| private static final String OPEN = "_open"; //$NON-NLS-1$ |
| private static final String EXT_PT = "org.eclipse.help.toc"; //$NON-NLS-1$ |
| private static final String TOC_ICON_ELEMENT = "tocIcon"; //$NON-NLS-1$ |
| private static final String TOC_ICON_ID = "id"; //$NON-NLS-1$ |
| private static final String OPEN_ICON_PATH = "openIcon"; //$NON-NLS-1$ |
| private static final String CLOSED_ICON_PATH = "closedIcon"; //$NON-NLS-1$ |
| private static final String LEAF_ICON_PATH= "leafIcon"; //$NON-NLS-1$ |
| private static boolean iconsInitialized = false; |
| |
| /** |
| * WorkbenchResources constructor comment. |
| */ |
| public HelpUIResources() { |
| super(); |
| } |
| /** |
| * Returns a string from a property file |
| */ |
| public static URL getImagePath(String name) { |
| IPath path = new Path("$nl$/icons/").append(name); //$NON-NLS-1$ |
| return FileLocator.find(HelpUIPlugin.getDefault().getBundle(), path, null); |
| } |
| |
| /** |
| * Returns an image descriptor from a property file |
| * @param name simple image file name |
| * @return the descriptor |
| */ |
| |
| public static ImageDescriptor getImageDescriptor(String name) { |
| URL imagePath = getImagePath(name); |
| ImageRegistry registry = HelpUIPlugin.getDefault().getImageRegistry(); |
| ImageDescriptor desc = registry.getDescriptor(name); |
| if (desc==null) { |
| desc = ImageDescriptor.createFromURL(imagePath); |
| registry.put(name, desc); |
| } |
| return desc; |
| } |
| |
| public static ImageDescriptor getImageDescriptor(String bundleId, String name) { |
| ImageRegistry registry = HelpUIPlugin.getDefault().getImageRegistry(); |
| ImageDescriptor desc = registry.getDescriptor(name); |
| if (desc==null) { |
| Bundle bundle = Platform.getBundle(bundleId); |
| if (bundle==null) return null; |
| URL url = FileLocator.find(bundle, new Path(name), null); |
| desc = ImageDescriptor.createFromURL(url); |
| registry.put(name, desc); |
| } |
| return desc; |
| } |
| |
| public static ImageDescriptor getIconImageDescriptor(String bundleId, String path, String key) { |
| ImageRegistry registry = HelpUIPlugin.getDefault().getImageRegistry(); |
| ImageDescriptor desc = registry.getDescriptor(key); |
| if (desc==null) { |
| Bundle bundle = Platform.getBundle(bundleId); |
| if (bundle == null) return null; |
| URL url = FileLocator.find(bundle, new Path(path), null); |
| desc = ImageDescriptor.createFromURL(url); |
| registry.put(key, desc); |
| } |
| return desc; |
| } |
| /** |
| * Returns an icon image from a property file |
| * @param name simple image file name |
| * @return the new image or <code>null</code> if image |
| * could not be created |
| */ |
| |
| public static Image getIconImage(String key) { |
| ImageRegistry registry = HelpUIPlugin.getDefault().getImageRegistry(); |
| return registry.get(key); |
| } |
| |
| /** |
| * Get the image for an icon based upon the id |
| * @param iconId The id of the icon, may be null, if so a null image is returned |
| * @param isOpen true if this is an expanded container |
| * @param isLeaf true if this node has no children |
| * @return a valid image or null if no image found |
| */ |
| public static Image getImageFromId(String iconId, boolean isOpen, boolean isLeaf) { |
| if (iconId == null) { |
| return null; |
| } |
| initializeTocIcons(); |
| String suffix; |
| if (isOpen) { |
| suffix = OPEN; |
| } else if (isLeaf) { |
| suffix = LEAF; |
| } else { |
| suffix = CLOSED; |
| } |
| Image result = lookupImage(iconId + suffix); |
| if (result != null || isOpen) { |
| return result; |
| } |
| return lookupImage(iconId + OPEN); |
| } |
| |
| private static Image lookupImage(String name) { |
| ImageRegistry registry = HelpUIPlugin.getDefault().getImageRegistry(); |
| return registry.get(name); |
| } |
| |
| private static void initializeTocIcons(){ |
| if (iconsInitialized) { |
| return; |
| } |
| iconsInitialized = true; |
| //Get extension points that contribute products |
| IExtension[] extensionsFound = Platform.getExtensionRegistry().getExtensionPoint(EXT_PT).getExtensions(); |
| |
| for(int i=0; i < extensionsFound.length; i++){ |
| |
| IConfigurationElement[] configElements = extensionsFound[i].getConfigurationElements(); |
| for(int j=0; j < configElements.length; j++){ |
| if (configElements[j].getName().equals(TOC_ICON_ELEMENT)){ |
| IConfigurationElement iconElem = configElements[j]; |
| String attrs[] = iconElem.getAttributeNames(); |
| String contributorID = iconElem.getContributor().getName(); |
| |
| for (int k=0; k < attrs.length; k++){ |
| if(attrs[k].equals(OPEN_ICON_PATH)) |
| HelpUIResources.getIconImageDescriptor(contributorID, iconElem.getAttribute(OPEN_ICON_PATH), iconElem.getAttribute(TOC_ICON_ID) + OPEN); |
| if(attrs[k].equals(CLOSED_ICON_PATH)) |
| HelpUIResources.getIconImageDescriptor(contributorID, iconElem.getAttribute(CLOSED_ICON_PATH), iconElem.getAttribute(TOC_ICON_ID) + CLOSED); |
| if(attrs[k].equals(LEAF_ICON_PATH)) |
| HelpUIResources.getIconImageDescriptor(contributorID, iconElem.getAttribute(LEAF_ICON_PATH), iconElem.getAttribute(TOC_ICON_ID) + LEAF); |
| } |
| |
| } |
| |
| } |
| } |
| } |
| |
| /** |
| * Returns an image from a property file |
| * @param name simple image file name |
| * @return the new image or <code>null</code> if image |
| * could not be created |
| */ |
| |
| public static Image getImage(String name) { |
| ImageRegistry registry = HelpUIPlugin.getDefault().getImageRegistry(); |
| //Ensure we have the descriptor |
| getImageDescriptor(name); |
| return registry.get(name); |
| } |
| |
| public static Image getImage(URL url) { |
| ImageRegistry registry = HelpUIPlugin.getDefault().getImageRegistry(); |
| String name = url.toString(); |
| ImageDescriptor desc = registry.getDescriptor(name); |
| if (desc==null) { |
| desc = ImageDescriptor.createFromURL(url); |
| registry.put(name, desc); |
| } |
| return registry.get(name); |
| } |
| } |