/* * Copyright 2010-2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.eclipse.core.ui.overview; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.forms.HyperlinkSettings; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.services.IDisposable; import org.osgi.framework.Bundle; import com.amazonaws.eclipse.core.AwsToolkitCore; /** * Manager for resources used in the AWS Toolkit for Eclipse overview page * (fonts, colors, form toolkit, images, etc). * <p> * This class is intended to be constructed only once and shared among all the * overview page components. * <p> * An instance of OverviewResources must be properly disposed of with the * {@link #dispose()} method when is isn't needed anymore so that the underlying * resources can be released. */ public class OverviewResources implements IDisposable { /** Form toolkit for creating widgets */ private final FormToolkit toolkit; /** Map of allocated fonts by ID for the overview components */ private Map<String, Font> managedFonts = new HashMap<String, Font>(); /** * Map of shared fonts by ID - these fonts are allocated by the system and * will _not_ be released with the rest of the overview resources. */ private Map<String, Font> sharedFonts = new HashMap<String, Font>(); /** Registry of shared images for the overview components */ private final ImageRegistry imageRegistry = new ImageRegistry(); /* * ImageRegistry keys */ public static final String IMAGE_GRADIENT = "gradient"; public static final String IMAGE_GRADIENT_WITH_LOGO = "logo-gradient"; public static final String IMAGE_CONFIGURE_BUTTON = "configure-button"; public static final String IMAGE_BULLET = "orange-bullet"; /** * Constructs a new OverviewResources instance, and prepares resources for * use. */ public OverviewResources() { toolkit = new FormToolkit(Display.getCurrent()); toolkit.getHyperlinkGroup().setHyperlinkUnderlineMode(HyperlinkSettings.UNDERLINE_NEVER); initializeColors(); initializeFonts(); initializeImages(); } /** * Returns the FormToolkit resource for creating UI widgets in the overview * page components. * * @return The FormToolkit resource for creating UI widgets in the overview * page components. */ public FormToolkit getFormToolkit() { return toolkit; } /** * Returns the font resource with the specified ID. * * @param key * The ID of the font resource to return. * * @return The font resource with the specified ID. */ public Font getFont(String key) { if (managedFonts.containsKey(key)) { return managedFonts.get(key); } else { return sharedFonts.get(key); } } /** * Returns the color resource with the specified ID. * * @param key * The ID of the color resource to return. * * @return The color resource with the specified ID. */ public Color getColor(String key) { return toolkit.getColors().getColor(key); } /** * Returns the image resource with the specified ID. * * @param key * The ID of the image resource to return. * * @return The image resource with the specified ID. */ public Image getImage(String key) { return imageRegistry.get(key); } /** * Returns the external link image. * * @return The external link image. */ public static Image getExternalLinkImage() { ImageRegistry imageRegistry = AwsToolkitCore.getDefault().getImageRegistry(); return imageRegistry.get(AwsToolkitCore.IMAGE_EXTERNAL_LINK); } /* (non-Javadoc) * @see org.eclipse.ui.services.IDisposable#dispose() */ public void dispose() { toolkit.dispose(); imageRegistry.dispose(); for (Font font : managedFonts.values()) { font.dispose(); } } /* * Private Interface */ /** Initializes image resources */ private void initializeImages() { Bundle bundle = AwsToolkitCore.getDefault().getBundle(); imageRegistry.put(IMAGE_GRADIENT, ImageDescriptor.createFromURL(bundle.getEntry("icons/overview/header-gradient.png"))); imageRegistry.put(IMAGE_GRADIENT_WITH_LOGO, ImageDescriptor.createFromURL(bundle.getEntry("icons/overview/logo-header-gradient.png"))); imageRegistry.put(IMAGE_CONFIGURE_BUTTON, ImageDescriptor.createFromURL(bundle.getEntry("icons/overview/configure-button.png"))); imageRegistry.put(IMAGE_BULLET, ImageDescriptor.createFromURL(bundle.getEntry("icons/overview/bullet.png"))); } /** Initializes color resources */ private void initializeColors() { toolkit.getColors().createColor("amazon-orange", 222, 123, 32); toolkit.getColors().createColor("module-header", 94, 124, 169); toolkit.getColors().createColor("module-subheader", 102, 102, 102); } /** Initializes font resources */ private void initializeFonts() { managedFonts.put("big-header", newFont(new FontData[] { new FontData("Verdana", 16, SWT.BOLD), new FontData("Arial", 16, SWT.BOLD), new FontData("Helvetica", 16, SWT.BOLD), })); managedFonts.put("resources-header", newFont(new FontData[] { new FontData("Verdana", 18, SWT.NORMAL), new FontData("Arial", 18, SWT.NORMAL), new FontData("Helvetica", 18, SWT.NORMAL), })); managedFonts.put("module-header", newFont(new FontData[] { new FontData("Verdana", 12, SWT.BOLD), new FontData("Arial", 12, SWT.BOLD), new FontData("Helvetica", 12, SWT.BOLD), })); managedFonts.put("module-subheader", newFont(new FontData[] { new FontData("Verdana", 11, SWT.BOLD), new FontData("Arial", 11, SWT.BOLD), new FontData("Helvetica", 11, SWT.BOLD), })); sharedFonts.put("text", JFaceResources.getDialogFont()); } /** * Creates a new Font from the specified font data. * * @param fontData * The font data for creating the new font. * * @return The new font. */ private Font newFont(FontData[] fontData) { return new Font(Display.getCurrent(), fontData); } }