Mercurial > projects > dwt-addons
view dwtx/jface/resource/JFaceResources.d @ 90:7ffeace6c47f
Update 3.4M7 to 3.4
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 06 Jul 2008 23:30:07 +0200 |
parents | e28b067ce8c5 |
children | 04b47443bb01 |
line wrap: on
line source
/******************************************************************************* * 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 * Port to the D programming language: * Frank Benoit <benoit@tionex.de> *******************************************************************************/ module dwtx.jface.resource.JFaceResources; import dwtx.jface.resource.FontRegistry; import dwtx.jface.resource.ImageRegistry; import dwtx.jface.resource.ResourceManager; import dwtx.jface.resource.ColorRegistry; import dwtx.jface.resource.FontDescriptor; import dwtx.jface.resource.DeviceResourceManager; import dwtx.jface.resource.ImageDescriptor; import tango.util.collection.HashMap; import tango.util.collection.model.Map; import dwt.graphics.Font; import dwt.graphics.Image; import dwt.widgets.Display; import dwtx.core.runtime.Assert; import dwtx.jface.dialogs.Dialog; import dwtx.jface.dialogs.PopupDialog; import dwtx.jface.dialogs.TitleAreaDialog; import dwtx.jface.preference.PreferenceDialog; import dwtx.jface.wizard.Wizard; import dwt.dwthelper.utils; import dwt.dwthelper.Runnable; import dwt.dwthelper.ResourceBundle; import tango.text.convert.Format; /** * Utility methods to access JFace-specific resources. * <p> * All methods declared on this class are static. This class cannot be * instantiated. * </p> * <p> * The following global state is also maintained by this class: * <ul> * <li>a font registry</li> * <li>a color registry</li> * <li>an image registry</li> * <li>a resource bundle</li> * </ul> * </p> * @noinstantiate This class is not intended to be instantiated by clients. * @noextend This class is not intended to be subclassed by clients. */ public class JFaceResources { /** * The path to the icons in the resources. */ private const static String ICONS_PATH = "$nl$/icons/full/";//$NON-NLS-1$ /** * Map of Display onto DeviceResourceManager. Holds all the resources for * the associated display. */ private static Map!(Display,ResourceManager) registries; private static void init_registries(){ if( registries is null ){ synchronized if( registries is null ){ registries = new HashMap!(Display,ResourceManager); } } } /** * The symbolic font name for the banner font (value * <code>"dwtx.jface.bannerfont"</code>). */ public static const String BANNER_FONT = "dwtx.jface.bannerfont"; //$NON-NLS-1$ /** * The JFace resource bundle; eagerly initialized. */ private static /+final+/ ResourceBundle bundle; private static void init_bundle(){ if( bundle is null ){ synchronized if( bundle is null ){ bundle = ResourceBundle.getBundle( getImportData!("dwtx.jface.messages.properties")); //$NON-NLS-1$ } } } /** * The JFace color registry; <code>null</code> until lazily initialized or * explicitly set. */ private static ColorRegistry colorRegistry; /** * The symbolic font name for the standard font (value * <code>"dwtx.jface.defaultfont"</code>). */ public static const String DEFAULT_FONT = "dwtx.jface.defaultfont"; //$NON-NLS-1$ /** * The symbolic font name for the dialog font (value * <code>"dwtx.jface.dialogfont"</code>). */ public static const String DIALOG_FONT = "dwtx.jface.dialogfont"; //$NON-NLS-1$ /** * The JFace font registry; <code>null</code> until lazily initialized or * explicitly set. */ private static FontRegistry fontRegistry = null; /** * The symbolic font name for the header font (value * <code>"dwtx.jface.headerfont"</code>). */ public static const String HEADER_FONT = "dwtx.jface.headerfont"; //$NON-NLS-1$ /** * The JFace image registry; <code>null</code> until lazily initialized. */ private static ImageRegistry imageRegistry = null; /** * The symbolic font name for the text font (value * <code>"dwtx.jface.textfont"</code>). */ public static const String TEXT_FONT = "dwtx.jface.textfont"; //$NON-NLS-1$ /** * The symbolic font name for the viewer font (value * <code>"dwtx.jface.viewerfont"</code>). * * @deprecated This font is not in use */ public static const String VIEWER_FONT = "dwtx.jface.viewerfont"; //$NON-NLS-1$ /** * The symbolic font name for the window font (value * <code>"dwtx.jface.windowfont"</code>). * * @deprecated This font is not in use */ public static const String WINDOW_FONT = "dwtx.jface.windowfont"; //$NON-NLS-1$ /** * Returns the formatted message for the given key in JFace's resource * bundle. * * @param key * the resource name * @param args * the message arguments * @return the string */ public static String format(String key, ... ) { return Format.convert( _arguments, _argptr, getString(key) ); } /** * Returns the JFace's banner font. Convenience method equivalent to * * <pre> * JFaceResources.getFontRegistry().get(JFaceResources.BANNER_FONT) * </pre> * * @return the font */ public static Font getBannerFont() { return getFontRegistry().get(BANNER_FONT); } /** * Returns the resource bundle for JFace itself. The resouble bundle is * obtained from * <code>ResourceBundle.getBundle("dwtx.jface.jface_nls")</code>. * <p> * Note that several static convenience methods are also provided on this * class for directly accessing resources in this bundle. * </p> * * @return the resource bundle */ public static ResourceBundle getBundle() { init_bundle(); return bundle; } /** * Returns the color registry for JFace itself. * <p> * * @return the <code>ColorRegistry</code>. * @since 3.0 */ public static ColorRegistry getColorRegistry() { if (colorRegistry is null) { colorRegistry = new ColorRegistry(); initializeDefaultColors(); } return colorRegistry; } /** * Returns the global resource manager for the given display * * @since 3.1 * * @param toQuery * display to query * @return the global resource manager for the given display */ public static ResourceManager getResources(Display toQuery) { init_registries(); ResourceManager reg = registries.containsKey(toQuery) ? cast(ResourceManager) registries.get(toQuery) : null; if (reg is null) { toQuery.disposeExec(new class(toQuery) Runnable { DeviceResourceManager mgr; Display toQuery_; this(Display d){ mgr = new DeviceResourceManager(d); reg = mgr; toQuery_ = d; registries.add(d, reg); } /* * (non-Javadoc) * * @see java.lang.Runnable#run() */ public void run() { mgr.dispose(); registries.removeKey(toQuery_); } }); } return reg; } /** * Returns the ResourceManager for the current display. May only be called * from a UI thread. * * @since 3.1 * * @return the global ResourceManager for the current display */ public static ResourceManager getResources() { return getResources(Display.getCurrent()); } /** * Returns JFace's standard font. Convenience method equivalent to * * <pre> * JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT) * </pre> * * @return the font */ public static Font getDefaultFont() { return getFontRegistry().defaultFont(); } /** * Returns the descriptor for JFace's standard font. Convenience method * equivalent to * * <pre> * JFaceResources.getFontRegistry().getDescriptor(JFaceResources.DEFAULT_FONT) * </pre> * * @return the font * @since 3.3 */ public static FontDescriptor getDefaultFontDescriptor() { return getFontRegistry().defaultFontDescriptor(); } /** * Returns the JFace's dialog font. Convenience method equivalent to * * <pre> * JFaceResources.getFontRegistry().get(JFaceResources.DIALOG_FONT) * </pre> * * @return the font */ public static Font getDialogFont() { return getFontRegistry().get(DIALOG_FONT); } /** * Returns the descriptor for JFace's dialog font. Convenience method * equivalent to * * <pre> * JFaceResources.getFontRegistry().getDescriptor(JFaceResources.DIALOG_FONT) * </pre> * * @return the font * @since 3.3 */ public static FontDescriptor getDialogFontDescriptor() { return getFontRegistry().getDescriptor(DIALOG_FONT); } /** * Returns the font in JFace's font registry with the given symbolic font * name. Convenience method equivalent to * * <pre> * JFaceResources.getFontRegistry().get(symbolicName) * </pre> * * If an error occurs, return the default font. * * @param symbolicName * the symbolic font name * @return the font */ public static Font getFont(String symbolicName) { return getFontRegistry().get(symbolicName); } /** * Returns the font descriptor for in JFace's font registry with the given * symbolic name. Convenience method equivalent to * * <pre> * JFaceResources.getFontRegistry().getDescriptor(symbolicName) * </pre> * * If an error occurs, return the default font. * * @param symbolicName * the symbolic font name * @return the font descriptor (never null) * @since 3.3 */ public static FontDescriptor getFontDescriptor(String symbolicName) { return getFontRegistry().getDescriptor(symbolicName); } /** * Returns the font registry for JFace itself. If the value has not been * established by an earlier call to <code>setFontRegistry</code>, is it * initialized to * <code>new FontRegistry("dwtx.jface.resource.jfacefonts")</code>. * <p> * Note that several static convenience methods are also provided on this * class for directly accessing JFace's standard fonts. * </p> * * @return the JFace font registry */ public static FontRegistry getFontRegistry() { if (fontRegistry is null) { fontRegistry = new FontRegistry( "dwtx.jface.resource.jfacefonts"); //$NON-NLS-1$ } return fontRegistry; } /** * Returns the JFace's header font. Convenience method equivalent to * * <pre> * JFaceResources.getFontRegistry().get(JFaceResources.HEADER_FONT) * </pre> * * @return the font */ public static Font getHeaderFont() { return getFontRegistry().get(HEADER_FONT); } /** * Returns the descriptor for JFace's header font. Convenience method * equivalent to * * <pre> * JFaceResources.getFontRegistry().get(JFaceResources.HEADER_FONT) * </pre> * * @return the font descriptor (never null) * @since 3.3 */ public static FontDescriptor getHeaderFontDescriptor() { return getFontRegistry().getDescriptor(HEADER_FONT); } /** * Returns the image in JFace's image registry with the given key, or * <code>null</code> if none. Convenience method equivalent to * * <pre> * JFaceResources.getImageRegistry().get(key) * </pre> * * @param key * the key * @return the image, or <code>null</code> if none */ public static Image getImage(String key) { return getImageRegistry().get(key); } /** * Returns the image registry for JFace itself. * <p> * Note that the static convenience method <code>getImage</code> is also * provided on this class. * </p> * * @return the JFace image registry */ public static ImageRegistry getImageRegistry() { if (imageRegistry is null) { imageRegistry = new ImageRegistry( getResources(Display.getCurrent())); initializeDefaultImages(); } return imageRegistry; } /** * Initialize default images in JFace's image registry. * */ private static void initializeDefaultImages() { Object bundle = null; // DWT-Note: deactivated // try { // bundle = JFaceActivator.getBundle(); // } catch (NoClassDefFoundError exception) { // // Test to see if OSGI is present // } declareImage(bundle, Wizard.DEFAULT_IMAGE, ICONS_PATH ~ "page.gif", getImportData!( "dwtx.jface.wizard.images.page.gif" )); //$NON-NLS-1$ // register default images for dialogs declareImage(bundle, Dialog.DLG_IMG_MESSAGE_INFO, ICONS_PATH ~ "message_info.gif", getImportData!( "dwtx.jface.dialogs.images.message_info.gif")); //$NON-NLS-1$ //$NON-NLS-2$ declareImage(bundle, Dialog.DLG_IMG_MESSAGE_WARNING, ICONS_PATH ~ "message_warning.gif", getImportData!( "dwtx.jface.dialogs.images.message_warning.gif")); //$NON-NLS-1$ declareImage(bundle, Dialog.DLG_IMG_MESSAGE_ERROR, ICONS_PATH ~ "message_error.gif", getImportData!( "dwtx.jface.dialogs.images.message_error.gif"));//$NON-NLS-1$ //$NON-NLS-2$ declareImage(bundle, Dialog.DLG_IMG_HELP, ICONS_PATH ~ "help.gif", getImportData!( "dwtx.jface.dialogs.images.help.gif"));//$NON-NLS-1$ //$NON-NLS-2$ declareImage(bundle, TitleAreaDialog.DLG_IMG_TITLE_BANNER, ICONS_PATH ~ "title_banner.png", getImportData!( "dwtx.jface.dialogs.images.title_banner.gif"));//$NON-NLS-1$ //$NON-NLS-2$ declareImage(bundle, PreferenceDialog.PREF_DLG_TITLE_IMG, ICONS_PATH ~ "pref_dialog_title.gif", getImportData!( "dwtx.jface.preference.images.pref_dialog_title.gif"));//$NON-NLS-1$ //$NON-NLS-2$ declareImage(bundle, PopupDialog.POPUP_IMG_MENU, ICONS_PATH ~ "popup_menu.gif", getImportData!( "dwtx.jface.dialogs.images.popup_menu.gif"));//$NON-NLS-1$ //$NON-NLS-2$ declareImage( bundle, PopupDialog.POPUP_IMG_MENU_DISABLED, ICONS_PATH ~ "popup_menu_disabled.gif", getImportData!( "dwtx.jface.dialogs.images.popup_menu_disabled.gif"));//$NON-NLS-1$ //$NON-NLS-2$ } /** * Declares a JFace image given the path of the image file (relative to the * JFace plug-in). This is a helper method that creates the image descriptor * and passes it to the main <code>declareImage</code> method. * * @param bundle * the {@link Bundle} or <code>null</code> of the Bundle cannot * be found * @param key * the symbolic name of the image * @param path * the path of the image file relative to the base of the * workbench plug-ins install directory * @param fallback * the {@link Class} where the fallback implementation of the * image is relative to * @param fallbackPath * the path relative to the fallback {@link Class} * */ private static final void declareImage(Object bundle, String key, String path, ImportData importdata/+ClassInfo fallback, String fallbackPath+/) { ImageDescriptor descriptor = null; if (bundle !is null) { // URL url = FileLocator.find((Bundle) bundle, new Path(path), null); // if (url !is null) // descriptor = ImageDescriptor.createFromURL(url); } // If we failed then load from the backup file if (descriptor is null) descriptor = ImageDescriptor.createFromFile( importdata /+fallback, fallbackPath+/); imageRegistry.put(key, descriptor); } /** * Returns the resource object with the given key in JFace's resource * bundle. If there isn't any value under the given key, the key is * returned. * * @param key * the resource name * @return the string */ public static String getString(String key) { init_bundle(); try { return bundle.getString(key); } catch (MissingResourceException e) { return key; } } /** * Returns a list of string values corresponding to the given list of keys. * The lookup is done with <code>getString</code>. The values are in the * same order as the keys. * * @param keys * a list of keys * @return a list of corresponding string values */ public static String[] getStrings(String[] keys) { Assert.isTrue(keys.length > 0 ); int length_ = keys.length; String[] result = new String[](length_); for (int i = 0; i < length_; i++) { result[i] = getString(keys[i]); } return result; } /** * Returns JFace's text font. Convenience method equivalent to * * <pre> * JFaceResources.getFontRegistry().get(JFaceResources.TEXT_FONT) * </pre> * * @return the font */ public static Font getTextFont() { return getFontRegistry().get(TEXT_FONT); } /** * Returns the descriptor for JFace's text font. Convenience method * equivalent to * * <pre> * JFaceResources.getFontRegistry().getDescriptor(JFaceResources.TEXT_FONT) * </pre> * * @return the font descriptor (never null) * @since 3.3 */ public static FontDescriptor getTextFontDescriptor() { return getFontRegistry().getDescriptor(TEXT_FONT); } /** * Returns JFace's viewer font. Convenience method equivalent to * * <pre> * JFaceResources.getFontRegistry().get(JFaceResources.VIEWER_FONT) * </pre> * * @return the font * @deprecated This font is not in use */ public static Font getViewerFont() { return getFontRegistry().get(VIEWER_FONT); } /** * Sets JFace's font registry to the given value. This method may only be * called once; the call must occur before * <code>JFaceResources.getFontRegistry</code> is invoked (either directly * or indirectly). * * @param registry * a font registry */ public static void setFontRegistry(FontRegistry registry) { Assert.isTrue(fontRegistry is null, "Font registry can only be set once."); //$NON-NLS-1$ fontRegistry = registry; } /* * (non-Javadoc) Declare a private constructor to block instantiation. */ private this() { // no-op } /* * Initialize any JFace colors that may not be initialized via a client. */ private static void initializeDefaultColors() { // JFace Colors that may not be defined in a workbench theme should be // defined here. } }