blob: 3bba3716a05ffbbcf62ab3d0559fe566abb103d7 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}