| /******************************************************************************* |
| * Copyright (c) 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 - Initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ptp.internal.rdt.ui; |
| |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.resource.ImageRegistry; |
| import org.eclipse.ptp.rdt.ui.UIPlugin; |
| import org.eclipse.swt.graphics.Image; |
| import org.osgi.framework.Bundle; |
| |
| /** |
| * @author crecoskie |
| * |
| */ |
| public class RDTPluginImages { |
| public static final IPath ICONS_PATH= new Path("$nl$/icons"); //$NON-NLS-1$ |
| |
| // The plugin registry |
| private static ImageRegistry imageRegistry = new ImageRegistry(UIPlugin.getStandardDisplay()); |
| |
| // Subdirectory (under the package containing this class) where 16 color images are |
| private static URL fgIconBaseURL; |
| |
| static { |
| try { |
| fgIconBaseURL= new URL(UIPlugin.getDefault().getBundle().getEntry("/"), "icons/" ); //$NON-NLS-1$ //$NON-NLS-2$ |
| } catch (MalformedURLException e) { |
| UIPlugin.log(e); |
| } |
| } |
| private static final String NAME_PREFIX= UIPlugin.PLUGIN_ID + '.'; |
| private static final int NAME_PREFIX_LENGTH= NAME_PREFIX.length(); |
| |
| public static final String T_OBJ= "obj16/"; //$NON-NLS-1$ |
| public static final String T_WIZBAN= "wizban/"; //$NON-NLS-1$ |
| public static final String T_LCL= "lcl16/"; //$NON-NLS-1$ |
| public static final String T_DLCL= "dlcl16/"; //$NON-NLS-1$ |
| public static final String T_ELCL= "elcl16/"; //$NON-NLS-1$ |
| public static final String T_TOOL= "tool16/"; //$NON-NLS-1$ |
| public static final String T_VIEW= "view16/"; //$NON-NLS-1$ |
| public static final String T_OVR= "ovr16/"; //$NON-NLS-1$ |
| |
| public static final ImageDescriptor DESC_WIZBAN_NEW_REMOTE_C_PROJ = create(T_WIZBAN, "newremote_proj_wiz.gif"); //$NON-NLS-1$ |
| public static final ImageDescriptor DESC_WIZBAN_EXPORT_C_SETTINGS = create(T_WIZBAN, "exportc_settings_wiz.gif"); //$NON-NLS-1$ |
| public static final ImageDescriptor DESC_WIZBAN_IMPORT_C_SETTINGS = create(T_WIZBAN, "importc_settings_wiz.gif"); //$NON-NLS-1$ |
| |
| private static ImageDescriptor createManaged(String prefix, String name) { |
| return createManaged(imageRegistry, prefix, name); |
| } |
| |
| private static ImageDescriptor createManaged(ImageRegistry registry, String prefix, String name) { |
| ImageDescriptor result= ImageDescriptor.createFromURL(makeIconFileURL(prefix, name.substring(NAME_PREFIX_LENGTH))); |
| registry.put(name, result); |
| return result; |
| } |
| |
| public static Image get(String key) { |
| return imageRegistry.get(key); |
| } |
| |
| private static ImageDescriptor create(String prefix, String name) { |
| return ImageDescriptor.createFromURL(makeIconFileURL(prefix, name)); |
| } |
| |
| /* |
| * Creates an image descriptor for the given prefix and name in the JDT UI bundle. The path can |
| * contain variables like $NL$. |
| * If no image could be found, <code>useMissingImageDescriptor</code> decides if either |
| * the 'missing image descriptor' is returned or <code>null</code>. |
| * or <code>null</code>. |
| */ |
| private static ImageDescriptor create(String prefix, String name, boolean useMissingImageDescriptor) { |
| IPath path= ICONS_PATH.append(prefix).append(name); |
| return createImageDescriptor(UIPlugin.getDefault().getBundle(), path, useMissingImageDescriptor); |
| } |
| |
| /* |
| * Creates an image descriptor for the given prefix and name in the JDT UI bundle. The path can |
| * contain variables like $NL$. |
| * If no image could be found, the 'missing image descriptor' is returned. |
| */ |
| private static ImageDescriptor createUnManaged(String prefix, String name) { |
| return create(prefix, name, true); |
| } |
| |
| private static URL makeIconFileURL(String prefix, String name) { |
| StringBuffer buffer= new StringBuffer(prefix); |
| buffer.append(name); |
| try { |
| return new URL(fgIconBaseURL, buffer.toString()); |
| } catch (MalformedURLException e) { |
| UIPlugin.log(e); |
| return null; |
| } |
| } |
| |
| /* |
| * Creates an image descriptor for the given path in a bundle. The path can contain variables |
| * like $NL$. |
| * If no image could be found, <code>useMissingImageDescriptor</code> decides if either |
| * the 'missing image descriptor' is returned or <code>null</code>. |
| * Added for 3.1.1. |
| */ |
| public static ImageDescriptor createImageDescriptor(Bundle bundle, IPath path, boolean useMissingImageDescriptor) { |
| URL url= FileLocator.find(bundle, path, null); |
| if (url != null) { |
| return ImageDescriptor.createFromURL(url); |
| } |
| if (useMissingImageDescriptor) { |
| return ImageDescriptor.getMissingImageDescriptor(); |
| } |
| return null; |
| } |
| |
| /** |
| * Sets the three image descriptors for enabled, disabled, and hovered to an action. The actions |
| * are retrieved from the *tool16 folders. |
| * |
| * @param action the action |
| * @param iconName the icon name |
| */ |
| public static void setToolImageDescriptors(IAction action, String iconName) { |
| setImageDescriptors(action, T_TOOL, iconName); |
| } |
| |
| /** |
| * Sets the three image descriptors for enabled, disabled, and hovered to an action. The actions |
| * are retrieved from the *lcl16 folders. |
| * |
| * @param action the action |
| * @param iconName the icon name |
| */ |
| public static void setLocalImageDescriptors(IAction action, String iconName) { |
| setImageDescriptors(action, T_LCL, iconName); |
| } |
| |
| /** |
| * Sets all available image descriptors for the given action. |
| */ |
| public static void setImageDescriptors(IAction action, String type, String relPath) { |
| if (relPath.startsWith(NAME_PREFIX)) |
| relPath= relPath.substring(NAME_PREFIX_LENGTH); |
| action.setDisabledImageDescriptor(create("d" + type, relPath)); //$NON-NLS-1$ |
| // action.setHoverImageDescriptor(create("c" + type, relPath)); //$NON-NLS-1$ |
| action.setImageDescriptor(create("e" + type, relPath)); //$NON-NLS-1$ |
| |
| // We are still not sure about this, let see TF results first. |
| // Use the managed version so that we ensure that there is no resource handle leaks |
| // Let the widget itself manage the disabled/hover attribution. This was a huge leak |
| //ImageDescriptor desc = getImageRegistry().getDescriptor(relPath); |
| //if(desc == null) { |
| // desc = createManaged(T + "c" + type, relPath); |
| //} |
| //action.setImageDescriptor(desc); |
| } |
| |
| /** |
| * Helper method to access the image registry from the CUIPlugin class. |
| */ |
| static ImageRegistry getImageRegistry() { |
| return imageRegistry; |
| } |
| } |