// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de
package net.sf.eclipsefp.haskell.ui.util;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin;
import org.eclipse.jface.resource.CompositeImageDescriptor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.graphics.Image;
import org.osgi.framework.Bundle;
/** <p>contains the image registry for images in the Haskell Ui plugin.</p>
*
* @author Leif Frenzel
*/
public class HaskellUIImages implements IImageNames {
private static ImageRegistry imageRegistry;
private static ImageDescriptorRegistry imageDescriptorRegistry;
/** <p>a table of all the <code>ImageDescriptor</code>s.</p> */
private static Map<String, ImageDescriptor> imageDescriptors;
private static URL baseUrl;
static {
String pathSuffix = "icons/"; //$NON-NLS-1$
try {
Bundle bundle = HaskellUIPlugin.getDefault().getBundle();
baseUrl = new URL( bundle.getEntry( "/" ), pathSuffix ); //$NON-NLS-1$
} catch( MalformedURLException e ) {
// do nothing
}
}
private final static String OBJECT = "obj16/"; // basic colors - size 16x16 //$NON-NLS-1$
private final static String OVR = "ovr16/"; // basic colors - size 7x8 //$NON-NLS-1$
private final static String ACTION = "clcl16/"; // basic colors - size 16x16 //$NON-NLS-1$
private final static String WIZARD = "wizban/"; // wizard banners //$NON-NLS-1$
private final static String ACTION_E = "elcl16/"; //$NON-NLS-1$
private final static String TOOLS = "etool16/"; //$NON-NLS-1$
private final static String VIEW = "eview16/"; //$NON-NLS-1$
private static void declareImages() {
// objects
declare( LAUNCH_TAB_ARGUMENTS, OBJECT + "arguments_tab.gif" ); //$NON-NLS-1$
declare( LAUNCH_TAB_AUTOMATION, OBJECT + "automation_tab.gif" ); //$NON-NLS-1$
declare( IMPORT_LIBRARY, OBJECT + "library.gif" ); //$NON-NLS-1$
declare( SOURCE_FOLDER, OBJECT + "srcfolder_obj.gif" ); //$NON-NLS-1$
declare( FOLDER, OBJECT + "fldr_obj.gif" ); //$NON-NLS-1$
declare( SOURCE_FILE, OBJECT + "hsfile_obj.gif" ); //$NON-NLS-1$
declare( LITERATE_SOURCE_FILE, OBJECT + "lhsfile_obj.gif" ); //$NON-NLS-1$
declare( PROJECT_EXECUTABLE, OBJECT + "projexe.gif" ); //$NON-NLS-1$
declare( HASKELL_PROJECT, OBJECT + "hsproject.gif" ); //$NON-NLS-1$
declare( EXECUTABLE_STANZA, OBJECT + "executablestanza.gif" ); //$NON-NLS-1$
declare( TESTSUITE_STANZA, OBJECT + "testsuitestanza.gif" ); //$NON-NLS-1$
declare( BENCHMARK_STANZA, OBJECT + "haskell_bench.png" ); //$NON-NLS-1$
declare( LIBRARY_STANZA, OBJECT + "librarystanza.gif" ); //$NON-NLS-1$
declare( GENERAL_STANZA, OBJECT + "generalstanza.gif" ); //$NON-NLS-1$
declare( IF_STANZA, OBJECT + "if.gif" ); //$NON-NLS-1$
declare( ELSE_STANZA, OBJECT + "else.gif" ); //$NON-NLS-1$
declare( FLAG_STANZA, OBJECT + "flag.gif" ); //$NON-NLS-1$
declare( TEMPLATE, OBJECT + "template.gif" ); //$NON-NLS-1$
declare( SOURCEREP_STANZA, OBJECT + "sourcerepstanza.gif" ); //$NON-NLS-1$
// decorators
declare( SRC_FOLDER_DECORATOR, OVR + "sourceFolder.gif" ); //$NON-NLS-1$
declare( ERROR_OVERLAY, OVR + "error_co.gif"); //$NON-NLS-1$
declare( FAILURE_OVERLAY, OVR + "failed_ovr.gif"); //$NON-NLS-1$
declare( SUCCESS_OVERLAY, OVR + "success_ovr.gif"); //$NON-NLS-1$
declare( WARNING_OVERLAY, OVR + "warning_co.gif"); //$NON-NLS-1$
declare( ERROR_OBJECT, OBJECT + "error_obj.gif"); //$NON-NLS-1$
declare( WARNING_OBJECT, OBJECT + "warning_obj.gif"); //$NON-NLS-1$
declare( SEARCH_OBJECT, OBJECT + "hsearch_obj.gif"); //$NON-NLS-1$
// views
declare( DEP_VIEW_IMPORTS, ACTION + "mdep_imports.gif" ); //$NON-NLS-1$
declare( DEP_VIEW_IMPORTEDBY, ACTION + "mdep_importedby.gif" ); //$NON-NLS-1$
declare( MB_VIEW_FLAT, ACTION + "mb_flat.gif" ); //$NON-NLS-1$
declare( MB_VIEW_HIERARCHICAL, ACTION + "mb_hierarchical.gif" ); //$NON-NLS-1$
declare( MB_VIEW_FILTER, ACTION + "mb_filter.gif" ); //$NON-NLS-1$
declare( CO_VIEW_CLEAR, ACTION + "co_clear.gif" ); //$NON-NLS-1$
// language element representation
declare( HS_NAME, OBJECT + "hsname.gif" ); //$NON-NLS-1$
declare( MODULE, OBJECT + "module.gif" ); //$NON-NLS-1$
declare( IMPORT, OBJECT + "import.gif" ); //$NON-NLS-1$
declare( IMPORT_GROUP, OBJECT + "importgroup.gif" ); //$NON-NLS-1$
declare( EXPORT_GROUP, OBJECT + "exportgroup.gif" ); //$NON-NLS-1$
declare( EXPORT_MODULE_CONTENT, OBJECT + "exportmodulecontent.gif" ); //$NON-NLS-1$
declare( EXPORT_SPECIFICATION, OBJECT + "exportspecification.gif" ); //$NON-NLS-1$
declare( PACKAGE, OBJECT + "package.gif" ); //$NON-NLS-1$
declare( PACKAGE_CONF, OBJECT + "packageconf.gif" ); //$NON-NLS-1$
declare( PACKAGE_FOLDER, OBJECT + "packagefolder.gif" ); //$NON-NLS-1$
declare( HIDDEN_PACKAGE, OBJECT + "hiddenpackage.gif" ); //$NON-NLS-1$
declare( FUNCTION_BINDING, OBJECT + "functionbinding.gif" ); //$NON-NLS-1$
declare( LOCAL_BINDING, OBJECT + "localvariable_obj.gif" ); //$NON-NLS-1$
declare( PATTERN_BINDING, OBJECT + "patternbinding.gif" ); //$NON-NLS-1$
declare( DATA_DECL, OBJECT + "datadecl.gif" ); //$NON-NLS-1$
declare( CONSTRUCTOR_DECL, OBJECT + "constructordecl.gif" ); //$NON-NLS-1$
declare( TYPE_DECL, OBJECT + "typedecl.gif" ); //$NON-NLS-1$
declare( NEWTYPE_DECL, OBJECT + "typedecl.gif" ); //$NON-NLS-1$
declare( TYPE_SIGNATURE, OBJECT + "typesig.gif" ); //$NON-NLS-1$
declare( DEFAULT_DECL, OBJECT + "defaultdecl.gif" ); //$NON-NLS-1$
declare( CLASS_DECL, OBJECT + "classdecl.gif" ); //$NON-NLS-1$
declare( INSTANCE_DECL, OBJECT + "instancedecl.gif" ); //$NON-NLS-1$
declare( INFIXNONE_DECL, OBJECT + "infixnone.gif" ); //$NON-NLS-1$
declare( INFIXL_DECL, OBJECT + "infixl.gif" ); //$NON-NLS-1$
declare( INFIXR_DECL, OBJECT + "infixr.gif" ); //$NON-NLS-1$
declare( FIELD_DECL, OBJECT + "field_public_obj.gif") ; //$NON-NLS-1$
declare( SPLICE_DECL, OBJECT + "thdecl.gif" ); //$NON-NLS-1$
// wizard banners
declare( NEW_PROJECT, WIZARD + "newhprj_wiz.png" ); //$NON-NLS-1$
declare( NEW_MODULE, WIZARD + "newmodule.png" ); //$NON-NLS-1$
declare( IMPORT_CABAL_PACKAGE, WIZARD + "impcprj_wiz.png" ); //$NON-NLS-1$
declare(ACTION_SORT,ACTION_E+"alphab_sort_co.png"); //$NON-NLS-1$
declare(IMPORT_REMOVE,OBJECT+"correction_delete_import.gif"); //$NON-NLS-1$
declare(EXPORT_SRC,OBJECT+"export_src.gif"); //$NON-NLS-1$
declare(HASKELL_MISC,TOOLS+"haskell_misc.gif"); //$NON-NLS-1$
declare(HACKAGE_UPDATE,VIEW+"hackage_update.png");
declare(HACKAGE_INSTALL,VIEW+"hackage_install.png");
declare(SEARCH_LINE,OBJECT+"search_ref_obj.gif");
declare(AUTODETECT,OBJECT+"autodetect.png");
declare(CORRECTION,OBJECT+"correction.gif");
declare(TERMINATE,OBJECT+"terminatedlaunch_obj.gif");
declare(TEST,OBJECT+"test.gif");
declare(TEST_ERR,OBJECT+"testerr.gif");
declare(TEST_FAIL,OBJECT+"testfail.gif");
declare(TEST_OK,OBJECT+"testok.gif");
declare(TEST_RUN,OBJECT+"testrun.gif");
declare(HISTORY_LIST,ACTION_E+"history_list.gif");
declare(WORKSHEET_OK,OBJECT+"worksheet_ok.png");
}
private final static void declare( final String key,
final String path ) {
ImageDescriptor desc = ImageDescriptor.getMissingImageDescriptor();
try {
desc = ImageDescriptor.createFromURL( makeIconFileURL( path ) );
} catch( MalformedURLException mux ) {
HaskellUIPlugin.log( "Problem loading image.", mux ); //$NON-NLS-1$
}
imageRegistry.put( key, desc );
imageDescriptors.put( key, desc );
}
private static ImageRegistry getImageRegistry() {
if( imageRegistry == null ) {
initializeImageRegistry();
}
return imageRegistry;
}
public static ImageRegistry initializeImageRegistry() {
imageRegistry = new ImageRegistry( HaskellUIPlugin.getStandardDisplay() );
imageDescriptors = new HashMap<>( 30 );
declareImages();
return imageRegistry;
}
/** <p>returns the <code>Image<code> identified by the given key,
* or <code>null</code> if it does not exist.</p> */
public static Image getImage( final String key ) {
return getImageRegistry().get( key );
}
/** <p>returns the <code>ImageDescriptor<code> identified by the given key,
* or <code>null</code> if it does not exist.</p> */
public static ImageDescriptor getImageDescriptor( final String key ) {
if( imageDescriptors == null ) {
initializeImageRegistry();
}
return imageDescriptors.get( key );
}
private static URL makeIconFileURL( final String iconPath )
throws MalformedURLException {
if( baseUrl == null ) {
throw new MalformedURLException();
}
return new URL( baseUrl, iconPath );
}
// composite images
///////////////////
public static Image getImage( final CompositeImageDescriptor imgDescriptor ) {
if( imageDescriptorRegistry == null ) {
imageDescriptorRegistry = new ImageDescriptorRegistry();
}
return imageDescriptorRegistry.get( imgDescriptor );
}
public static void disposeImageDescriptorRegistry() {
if( imageDescriptorRegistry != null ) {
imageDescriptorRegistry.dispose();
}
}
}