1
package org.python.copiedfromeclipsesrc;
3
/*******************************************************************************
4
* Copyright (c) 2000, 2005 IBM Corporation and others.
5
* All rights reserved. This program and the accompanying materials
6
* are made available under the terms of the Eclipse Public License v1.0
7
* which accompanies this distribution, and is available at
8
* http://www.eclipse.org/legal/epl-v10.html
11
* IBM Corporation - initial API and implementation
12
*******************************************************************************/
14
import org.eclipse.core.runtime.IAdaptable;
15
import org.eclipse.jface.resource.ImageDescriptor;
16
import org.eclipse.jface.viewers.DecoratingLabelProvider;
17
import org.eclipse.jface.viewers.IColorProvider;
18
import org.eclipse.jface.viewers.IFontProvider;
19
import org.eclipse.jface.viewers.ILabelProvider;
20
import org.eclipse.jface.viewers.LabelProvider;
21
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
22
import org.eclipse.swt.graphics.Color;
23
import org.eclipse.swt.graphics.Font;
24
import org.eclipse.swt.graphics.FontData;
25
import org.eclipse.swt.graphics.Image;
26
import org.eclipse.swt.graphics.RGB;
27
import org.eclipse.swt.widgets.Display;
28
import org.eclipse.ui.IEditorRegistry;
29
import org.eclipse.ui.IPropertyListener;
30
import org.eclipse.ui.PlatformUI;
31
import org.eclipse.ui.internal.util.SWTResourceUtil;
32
import org.eclipse.ui.model.IWorkbenchAdapter;
33
import org.eclipse.ui.model.IWorkbenchAdapter2;
36
* Provides basic labels for adaptable objects that have the
37
* <code>IWorkbenchAdapter</code> adapter associated with them. All dispensed
38
* images are cached until the label provider is explicitly disposed.
39
* This class provides a facility for subclasses to define annotations
40
* on the labels and icons of adaptable objects.
42
* NOTE: I JUST HATE WHEN THE SINGLE METHOD I WANT TO OVERRIDE IS DECLARED AS FINAL!!! (getText in this case)
44
public class CopiedWorkbenchLabelProvider extends LabelProvider implements
45
IColorProvider, IFontProvider {
48
* Returns a workbench label provider that is hooked up to the decorator
51
* @return a new <code>DecoratingLabelProvider</code> which wraps a <code>
52
* new <code>WorkbenchLabelProvider</code>
54
public static ILabelProvider getDecoratingWorkbenchLabelProvider() {
55
return new DecoratingLabelProvider(new CopiedWorkbenchLabelProvider(),
56
PlatformUI.getWorkbench().getDecoratorManager()
57
.getLabelDecorator());
61
* Listener that tracks changes to the editor registry and does a full update
62
* when it changes, since many workbench adapters derive their icon from the file
63
* associations in the registry.
65
private IPropertyListener editorRegistryListener = new IPropertyListener() {
66
public void propertyChanged(Object source, int propId) {
67
if (propId == IEditorRegistry.PROP_CONTENTS) {
68
fireLabelProviderChanged(new LabelProviderChangedEvent(CopiedWorkbenchLabelProvider.this));
74
* Creates a new workbench label provider.
76
public CopiedWorkbenchLabelProvider() {
77
PlatformUI.getWorkbench().getEditorRegistry().addPropertyListener(editorRegistryListener);
81
* Returns an image descriptor that is based on the given descriptor,
82
* but decorated with additional information relating to the state
83
* of the provided object.
85
* Subclasses may reimplement this method to decorate an object's
88
* @param input The base image to decorate.
89
* @param element The element used to look up decorations.
90
* @return the resuling ImageDescriptor.
91
* @see org.eclipse.jface.resource.CompositeImageDescriptor
93
protected ImageDescriptor decorateImage(ImageDescriptor input,
99
* Returns a label that is based on the given label,
100
* but decorated with additional information relating to the state
101
* of the provided object.
103
* Subclasses may implement this method to decorate an object's
105
* @param input The base text to decorate.
106
* @param element The element used to look up decorations.
107
* @return the resulting text
109
protected String decorateText(String input, Object element) {
114
* Method declared on ILabelProvider
116
public void dispose() {
117
PlatformUI.getWorkbench().getEditorRegistry().removePropertyListener(editorRegistryListener);
122
* Returns the implementation of IWorkbenchAdapter for the given
124
* @param o the object to look up.
125
* @return IWorkbenchAdapter or<code>null</code> if the adapter is not defined or the
126
* object is not adaptable.
128
protected final IWorkbenchAdapter getAdapter(Object o) {
129
if (!(o instanceof IAdaptable)) {
132
return (IWorkbenchAdapter) ((IAdaptable) o)
133
.getAdapter(IWorkbenchAdapter.class);
137
* Returns the implementation of IWorkbenchAdapter2 for the given
139
* @param o the object to look up.
140
* @return IWorkbenchAdapter2 or<code>null</code> if the adapter is not defined or the
141
* object is not adaptable.
143
protected final IWorkbenchAdapter2 getAdapter2(Object o) {
144
if (!(o instanceof IAdaptable)) {
147
return (IWorkbenchAdapter2) ((IAdaptable) o)
148
.getAdapter(IWorkbenchAdapter2.class);
152
* Method declared on ILabelProvider
154
public Image getImage(Object element) {
155
//obtain the base image by querying the element
156
IWorkbenchAdapter adapter = getAdapter(element);
157
if (adapter == null) {
160
ImageDescriptor descriptor = adapter.getImageDescriptor(element);
161
if (descriptor == null) {
165
//add any annotations to the image descriptor
166
descriptor = decorateImage(descriptor, element);
168
Image image = (Image) SWTResourceUtil.getImageTable().get(descriptor);
170
image = descriptor.createImage();
171
SWTResourceUtil.getImageTable().put(descriptor, image);
177
* Method declared on ILabelProvider
179
public String getText(Object element) {
180
//query the element for its label
181
IWorkbenchAdapter adapter = getAdapter(element);
182
if (adapter == null) {
183
return ""; //$NON-NLS-1$
185
String label = adapter.getLabel(element);
187
//return the decorated label
188
return decorateText(label, element);
192
* @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
194
public Color getForeground(Object element) {
195
return getColor(element, true);
199
* @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
201
public Color getBackground(Object element) {
202
return getColor(element, false);
206
* @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
208
public Font getFont(Object element) {
209
IWorkbenchAdapter2 adapter = getAdapter2(element);
210
if (adapter == null) {
214
FontData descriptor = adapter.getFont(element);
215
if (descriptor == null) {
219
Font font = (Font) SWTResourceUtil.getFontTable().get(descriptor);
221
font = new Font(Display.getCurrent(), descriptor);
222
SWTResourceUtil.getFontTable().put(descriptor, font);
227
private Color getColor(Object element, boolean forground) {
228
IWorkbenchAdapter2 adapter = getAdapter2(element);
229
if (adapter == null) {
232
RGB descriptor = forground ? adapter.getForeground(element) : adapter
233
.getBackground(element);
234
if (descriptor == null) {
238
Color color = (Color) SWTResourceUtil.getColorTable().get(descriptor);
240
color = new Color(Display.getCurrent(), descriptor);
241
SWTResourceUtil.getColorTable().put(descriptor, color);