/*
* Copyright (c) 2008 Borland Software Corporation
*
* 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:
* Artem Tikhomirov (Borland) - initial API and implementation
*/
package org.eclipse.gmf.internal.xpand.editor;
import java.lang.ref.SoftReference;
import java.net.MalformedURLException;
import java.net.URL;
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.eclipse.ui.services.IDisposable;
// would be better to have more generic Disposable interface than one from ui.services.
public class EditorImages implements IDisposable {
private final ImageRegistry myRegistry;
private static SoftReference<EditorImages> ourState;
protected EditorImages() {
myRegistry = new ImageRegistry(Display.getCurrent() == null ? Display.getDefault() : Display.getCurrent());
// though, since creation happens at the moment someone requested image, getCurrent() shouldn't be null, ever.
}
public static EditorImages get() {
EditorImages inst = ourState == null ? null : ourState.get();
if (inst == null) {
ourState = new SoftReference<EditorImages>(inst = new EditorImages());
}
return inst;
// EditorImages inst = Activator.findState(EditorImages.class);
// if (inst == null) {
// Activator.putState(EditorImages.class, inst = new EditorImages());
// }
// return inst;
}
public Image getExtension() {
return imageFromPath("extension.gif"); //$NON-NLS-1$
}
public Image getOperation() {
return imageFromPath("operation.gif"); //$NON-NLS-1$
}
public Image getProperty() {
return imageFromPath("property.gif"); //$NON-NLS-1$
}
public Image getVariable() {
return imageFromPath("variable.gif"); //$NON-NLS-1$
}
public Image getType() {
return imageFromPath("type.gif"); //$NON-NLS-1$
}
public Image getStatement() {
return imageFromPath("statement.gif"); //$NON-NLS-1$
}
protected Image imageFromPath(final String path) {
if (myRegistry.getDescriptor(path) == null) {
ImageDescriptor desc = ImageDescriptor.getMissingImageDescriptor();
try {
desc = ImageDescriptor.createFromURL(makeIconFileURL(path));
} catch (final MalformedURLException me) {
Activator.logError(me);
}
myRegistry.put(path, desc);
}
return myRegistry.get(path);
}
private static URL makeIconFileURL(final String iconPath) throws MalformedURLException {
final String pathSuffix = "/icons/"; //$NON-NLS-1$
return Activator.getDefault().getBundle().getEntry(pathSuffix + iconPath);
}
public void dispose() {
myRegistry.dispose();
}
}