~vil/pydev/upstream

« back to all changes in this revision

Viewing changes to org.python.pydev/src/org/python/copiedfromeclipsesrc/CopiedWorkbenchLabelProvider.java

  • Committer: Vladimír Lapáček
  • Date: 2006-08-30 18:38:44 UTC
  • Revision ID: vladimir.lapacek@gmail.com-20060830183844-f4d82c1239a7770a
Initial import of upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.python.copiedfromeclipsesrc;
 
2
 
 
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
 
9
 *
 
10
 * Contributors:
 
11
 *     IBM Corporation - initial API and implementation
 
12
 *******************************************************************************/
 
13
 
 
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;
 
34
 
 
35
/**
 
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.
 
41
 * 
 
42
 * NOTE: I JUST HATE WHEN THE SINGLE METHOD I WANT TO OVERRIDE IS DECLARED AS FINAL!!! (getText in this case)
 
43
 */
 
44
public class CopiedWorkbenchLabelProvider extends LabelProvider implements
 
45
        IColorProvider, IFontProvider {
 
46
 
 
47
    /**
 
48
     * Returns a workbench label provider that is hooked up to the decorator
 
49
     * mechanism.
 
50
     * 
 
51
     * @return a new <code>DecoratingLabelProvider</code> which wraps a <code>
 
52
     *   new <code>WorkbenchLabelProvider</code>
 
53
     */
 
54
    public static ILabelProvider getDecoratingWorkbenchLabelProvider() {
 
55
        return new DecoratingLabelProvider(new CopiedWorkbenchLabelProvider(),
 
56
                PlatformUI.getWorkbench().getDecoratorManager()
 
57
                        .getLabelDecorator());
 
58
    }
 
59
    
 
60
    /**
 
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.
 
64
     */
 
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));
 
69
            }
 
70
        }
 
71
    };
 
72
 
 
73
    /**
 
74
     * Creates a new workbench label provider.
 
75
     */
 
76
    public CopiedWorkbenchLabelProvider() {
 
77
        PlatformUI.getWorkbench().getEditorRegistry().addPropertyListener(editorRegistryListener);
 
78
    }
 
79
 
 
80
    /**
 
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.
 
84
     *
 
85
     * Subclasses may reimplement this method to decorate an object's
 
86
     * image.
 
87
     * 
 
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
 
92
     */
 
93
    protected ImageDescriptor decorateImage(ImageDescriptor input,
 
94
            Object element) {
 
95
        return input;
 
96
    }
 
97
 
 
98
    /**
 
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.
 
102
     *
 
103
     * Subclasses may implement this method to decorate an object's
 
104
     * label.
 
105
     * @param input The base text to decorate.
 
106
     * @param element The element used to look up decorations.
 
107
     * @return the resulting text
 
108
     */
 
109
    protected String decorateText(String input, Object element) {
 
110
        return input;
 
111
    }
 
112
 
 
113
    /* (non-Javadoc)
 
114
     * Method declared on ILabelProvider
 
115
     */
 
116
    public void dispose() {
 
117
        PlatformUI.getWorkbench().getEditorRegistry().removePropertyListener(editorRegistryListener);
 
118
        super.dispose();
 
119
    }
 
120
    
 
121
    /**
 
122
     * Returns the implementation of IWorkbenchAdapter for the given
 
123
     * object.  
 
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. 
 
127
     */
 
128
    protected final IWorkbenchAdapter getAdapter(Object o) {
 
129
        if (!(o instanceof IAdaptable)) {
 
130
            return null;
 
131
        }
 
132
        return (IWorkbenchAdapter) ((IAdaptable) o)
 
133
                .getAdapter(IWorkbenchAdapter.class);
 
134
    }
 
135
 
 
136
    /**
 
137
     * Returns the implementation of IWorkbenchAdapter2 for the given
 
138
     * object.  
 
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. 
 
142
     */
 
143
    protected final IWorkbenchAdapter2 getAdapter2(Object o) {
 
144
        if (!(o instanceof IAdaptable)) {
 
145
            return null;
 
146
        }
 
147
        return (IWorkbenchAdapter2) ((IAdaptable) o)
 
148
                .getAdapter(IWorkbenchAdapter2.class);
 
149
    }
 
150
 
 
151
    /* (non-Javadoc)
 
152
     * Method declared on ILabelProvider
 
153
     */
 
154
    public Image getImage(Object element) {
 
155
        //obtain the base image by querying the element
 
156
        IWorkbenchAdapter adapter = getAdapter(element);
 
157
        if (adapter == null) {
 
158
            return null;
 
159
        }
 
160
        ImageDescriptor descriptor = adapter.getImageDescriptor(element);
 
161
        if (descriptor == null) {
 
162
            return null;
 
163
        }
 
164
 
 
165
        //add any annotations to the image descriptor
 
166
        descriptor = decorateImage(descriptor, element);
 
167
 
 
168
        Image image = (Image) SWTResourceUtil.getImageTable().get(descriptor);
 
169
        if (image == null) {
 
170
            image = descriptor.createImage();
 
171
            SWTResourceUtil.getImageTable().put(descriptor, image);
 
172
        }
 
173
        return image;
 
174
    }
 
175
 
 
176
    /* (non-Javadoc)
 
177
     * Method declared on ILabelProvider
 
178
     */
 
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$
 
184
        }
 
185
        String label = adapter.getLabel(element);
 
186
 
 
187
        //return the decorated label
 
188
        return decorateText(label, element);
 
189
    }
 
190
 
 
191
    /* (non-Javadoc)
 
192
     * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
 
193
     */
 
194
    public Color getForeground(Object element) {
 
195
        return getColor(element, true);
 
196
    }
 
197
 
 
198
    /* (non-Javadoc)
 
199
     * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
 
200
     */
 
201
    public Color getBackground(Object element) {
 
202
        return getColor(element, false);
 
203
    }
 
204
 
 
205
    /* (non-Javadoc)
 
206
     * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
 
207
     */
 
208
    public Font getFont(Object element) {
 
209
        IWorkbenchAdapter2 adapter = getAdapter2(element);
 
210
        if (adapter == null) {
 
211
            return null;
 
212
        }
 
213
 
 
214
        FontData descriptor = adapter.getFont(element);
 
215
        if (descriptor == null) {
 
216
            return null;
 
217
        }
 
218
 
 
219
        Font font = (Font) SWTResourceUtil.getFontTable().get(descriptor);
 
220
        if (font == null) {
 
221
            font = new Font(Display.getCurrent(), descriptor);
 
222
            SWTResourceUtil.getFontTable().put(descriptor, font);
 
223
        }
 
224
        return font;
 
225
    }
 
226
 
 
227
    private Color getColor(Object element, boolean forground) {
 
228
        IWorkbenchAdapter2 adapter = getAdapter2(element);
 
229
        if (adapter == null) {
 
230
            return null;
 
231
        }
 
232
        RGB descriptor = forground ? adapter.getForeground(element) : adapter
 
233
                .getBackground(element);
 
234
        if (descriptor == null) {
 
235
            return null;
 
236
        }
 
237
 
 
238
        Color color = (Color) SWTResourceUtil.getColorTable().get(descriptor);
 
239
        if (color == null) {
 
240
            color = new Color(Display.getCurrent(), descriptor);
 
241
            SWTResourceUtil.getColorTable().put(descriptor, color);
 
242
        }
 
243
        return color;
 
244
    }
 
245
}