/******************************************************************************* * Copyright (c) 2011 Vlad Dumitrescu 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: * Vlad Dumitrescu *******************************************************************************/ package org.erlide.ui; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.jface.action.IAction; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.erlide.ui.internal.ErlideUIPlugin; import org.erlide.util.ErlLogger; public enum ErlideImage { // @formatter:off ALPHAB_SORT(ErlideImagePrefix.T_ELCL, "alphab_sort_co.gif"), TEST_RUNNING(ErlideImagePrefix.T_OBJ, "searchm_obj.gif"), TEST_SUCCEEDED(ErlideImagePrefix.T_OBJ, "methpub_obj.gif"), TEST_FAILED(ErlideImagePrefix.T_OBJ, "methpri_obj.gif"), TEST_SKIPPED(ErlideImagePrefix.T_OBJ, "methpro_obj.gif"), CLEAR(ErlideImagePrefix.T_ELCL, "clear_co.gif"), EXPORTED_SORT(ErlideImagePrefix.T_ELCL, "exported_sort_co.gif"), HIDE_LOCAL_FUNCTIONS(ErlideImagePrefix.T_ELCL, "hide_local_functions.gif"), HIDE_MACRO_RECORD_DEFS(ErlideImagePrefix.T_ELCL, "hide_macro_record_defs.gif"), HIDE_ATTRIBUTES(ErlideImagePrefix.T_ELCL, "hide_attributes.gif"), FUNCTION_EXPORTED(ErlideImagePrefix.T_OBJ, "methpub_obj.gif"), FUNCTION_DEFAULT(ErlideImagePrefix.T_OBJ, "methpri_obj.gif"), FUNCTION_CLAUSE(ErlideImagePrefix.T_OBJ, "methpro_obj.gif"), RECORD_DEF(ErlideImagePrefix.T_OBJ, "record_obj.gif"), RECORD_FIELD(ErlideImagePrefix.T_OBJ, "record_field_obj.gif"), MACRO_DEF(ErlideImagePrefix.T_OBJ, "macro_obj.gif"), TYPESPEC_DEF(ErlideImagePrefix.T_OBJ, "typevariable_obj.gif"), SRC_FOLDER(ErlideImagePrefix.T_OBJ, "erlang_src_folder_obj.gif"), ATTRIBUTE(ErlideImagePrefix.T_OBJ, "field_public_obj.gif"), EXPORT(ErlideImagePrefix.T_OBJ, "field_public_obj.gif"), EXTERNAL_ROOT(ErlideImagePrefix.T_OBJ, "external_ref.gif"), EXTERNAL_APP(ErlideImagePrefix.T_OBJ, "app_ref.gif"), EXTERNAL_FOLDER(ErlideImagePrefix.T_OBJ, "folder.gif"), IMPORT(ErlideImagePrefix.T_OBJ, "field_public_obj.gif"), OVR_WARNING(ErlideImagePrefix.T_OVR, "warning_co.gif"), OVR_ERROR(ErlideImagePrefix.T_OVR, "error_co.gif"), ERLANG_SEARCH_RESULTS(ErlideImagePrefix.T_OBJ, "erlang_search_results.gif"), MODULE(ErlideImagePrefix.T_OBJ, "erlang_srcFile.png"), MODULE_RESOURCE(ErlideImagePrefix.T_OBJ, "erlang_srcFileExt.gif"), UNKNOWN(ErlideImagePrefix.T_OBJ, "unknown_obj.gif"), OBJS_EDOCTAG(ErlideImagePrefix.T_OBJ, "jdoc_tag_obj.gif"), OBJS_EXTERNALBROWSER(ErlideImagePrefix.T_ELCL, "open_browser.gif"); // @formatter:on private String prefix; private String path; private static volatile ImageRegistry registry; private static URL fgIconBaseURL = null; static { fgIconBaseURL = ErlideUIPlugin.getDefault().getBundle().getEntry("/icons/full/"); //$NON-NLS-1$ } private ErlideImage(final ErlideImagePrefix prefix, final String path) { this.prefix = prefix.getPrefix(); this.path = path; } public URL url() throws MalformedURLException { return makeIconFileURL(prefix, path); } public Image getImage() { return getRegistry().get(name()); } public ImageDescriptor getDescriptor() { return getRegistry().getDescriptor(name()); } public static synchronized void dispose() { if (registry != null) { registry.dispose(); } registry = null; } private static ImageRegistry getRegistry() { if (registry == null) { synchronized (ErlideImage.class) { if (registry == null) { registry = new ImageRegistry(Display.getDefault()); registerAllImages(); } } } return registry; } private static void registerAllImages() { for (final ErlideImage key : values()) { ImageDescriptor descriptor; try { final URL url = key.url(); descriptor = ImageDescriptor.createFromURL(url); } catch (final MalformedURLException e) { descriptor = ImageDescriptor.getMissingImageDescriptor(); } registry.put(key.name(), descriptor); } } private static URL makeIconFileURL(final String prefix, final String name) throws MalformedURLException { if (fgIconBaseURL == null) { throw new MalformedURLException(); } final StringBuilder buffer = new StringBuilder(prefix); buffer.append('/'); buffer.append(name); return new URL(fgIconBaseURL, buffer.toString()); } /** * 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(final IAction action, final String iconName) { setImageDescriptors(action, "tool16", iconName); } /** * Sets the three image descriptors for enabled, disabled, and hovered to an * action. The icons are retrieved from the *lcl16 folders. * * @param action * the action * @param iconName * the icon name */ public static void setLocalImageDescriptors(final IAction action, final String iconName) { setImageDescriptors(action, "lcl16", iconName); } private static void setImageDescriptors(final IAction action, final String type, final String relPath) { try { final ImageDescriptor id = ImageDescriptor .createFromURL(makeIconFileURL("d" + type, relPath)); if (id != null) { action.setDisabledImageDescriptor(id); } } catch (final MalformedURLException e) { ErlLogger.warn(e); } try { final ImageDescriptor descriptor = ImageDescriptor .createFromURL(makeIconFileURL("e" + type, relPath)); action.setHoverImageDescriptor(descriptor); action.setImageDescriptor(descriptor); } catch (final MalformedURLException e) { ErlLogger.warn(e); } } }