blob: ede48b313d664ebabd04fb413926149a2b63169e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 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
*******************************************************************************/
package org.eclipse.update.internal.ui.parts;
import java.net.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import org.eclipse.jface.resource.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.update.internal.ui.*;
/**
* @version 1.0
* @author
*/
public class SharedLabelProvider
extends LabelProvider
implements ITableLabelProvider {
public static final int F_ERROR = 1;
public static final int F_WARNING = 2;
public static final int F_CURRENT = 4;
public static final int F_INSTALLABLE = 8;
public static final int F_LINKED = 16;
public static final int F_MOD = 32;
public static final int F_UPDATED = 64;
public static final int F_UNCONFIGURED = 128;
public static final int F_ADD = 256;
public static final int F_DEL = 512;
Hashtable images = new Hashtable();
ArrayList consumers = new ArrayList();
public SharedLabelProvider() {
}
public void connect(Object consumer) {
if (!consumers.contains(consumer))
consumers.add(consumer);
}
public void disconnect(Object consumer) {
consumers.remove(consumer);
if (consumers.size() == 0) {
reset();
}
}
public void dispose() {
reset();
super.dispose();
}
private void reset() {
for (Enumeration iterator = images.elements(); iterator.hasMoreElements();) {
Image image = (Image) iterator.nextElement();
image.dispose();
}
images.clear();
}
public Image get(ImageDescriptor desc) {
return get(desc, 0);
}
public Image get(ImageDescriptor desc, int flags) {
Object key = desc;
if (flags != 0) {
key = getKey(desc.hashCode(), flags);
}
Image image = (Image) images.get(key);
if (image == null) {
image = createImage(desc, flags);
images.put(key, image);
}
return image;
}
public Image get(Image image, int flags) {
if (flags==0) return image;
String key = getKey(image.hashCode(), flags);
Image resultImage = (Image)images.get(key);
if (resultImage == null) {
resultImage = createImage(image, flags);
images.put(key, resultImage);
}
return resultImage;
}
private String getKey(long hashCode, int flags) {
return (""+hashCode) + ":"+flags; //$NON-NLS-1$ //$NON-NLS-2$
}
private Image createImage(ImageDescriptor baseDesc, int flags) {
if (flags == 0) {
return baseDesc.createImage();
}
ImageDescriptor[] lowerLeft = getLowerLeftOverlays(flags);
ImageDescriptor[] upperRight = getUpperRightOverlays(flags);
ImageDescriptor[] lowerRight = getLowerRightOverlays(flags);
ImageDescriptor[] upperLeft = getUpperLeftOverlays(flags);
OverlayIcon compDesc =
new OverlayIcon(
baseDesc,
new ImageDescriptor[][] { upperRight, lowerRight, lowerLeft, upperLeft });
return compDesc.createImage();
}
private Image createImage(Image baseImage, int flags) {
if (flags == 0) {
return baseImage;
}
ImageDescriptor[] lowerLeft = getLowerLeftOverlays(flags);
ImageDescriptor[] upperRight = getUpperRightOverlays(flags);
ImageDescriptor[] lowerRight = getLowerRightOverlays(flags);
ImageDescriptor[] upperLeft = getUpperLeftOverlays(flags);
ImageOverlayIcon compDesc =
new ImageOverlayIcon(
baseImage,
new ImageDescriptor[][] { upperRight, lowerRight, lowerLeft, upperLeft });
return compDesc.createImage();
}
private ImageDescriptor[] getLowerLeftOverlays(int flags) {
if ((flags & F_ERROR) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_ERROR_CO };
if ((flags & F_WARNING) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_WARNING_CO };
return null;
}
private ImageDescriptor[] getUpperRightOverlays(int flags) {
if ((flags & F_ADD) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_ADD_CO };
if ((flags & F_DEL) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_DEL_CO };
if ((flags & F_UNCONFIGURED) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_UNCONF_CO };
if ((flags & F_LINKED) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_LINKED_CO };
return null;
}
private ImageDescriptor[] getLowerRightOverlays(int flags) {
if ((flags & F_CURRENT) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_CURRENT_CO };
if ((flags & F_MOD) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_MOD_CO };
/*
if ((flags & F_ADD) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_ADD_CO };
if ((flags & F_DEL) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_DEL_CO };
if ((flags & F_UNCONFIGURED) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_UNCONF_CO };
*/
return null;
}
private ImageDescriptor[] getUpperLeftOverlays(int flags) {
if ((flags & F_UPDATED) != 0)
return new ImageDescriptor[] { UpdateUIImages.DESC_UPDATED_CO };
return null;
}
public String getColumnText(Object obj, int index) {
return getText(obj);
}
public Image getColumnImage(Object obj, int index) {
return getImage(obj);
}
public Image getImageFromURL(
URL installURL,
String subdirectoryAndFilename) {
Image image = null;
try {
URL newURL = new URL(installURL, subdirectoryAndFilename);
String key = newURL.toString();
image = (Image)images.get(key);
if (image == null) {
ImageDescriptor desc = ImageDescriptor.createFromURL(newURL);
image = desc.createImage();
images.put(key, image);
}
} catch (MalformedURLException e) {
} catch (SWTException e) {
}
return image;
}
}