001: /*******************************************************************************
002: * Copyright (c) 2003, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: * Anton Leherbauer, Wind River - bug 146788
011: *******************************************************************************/package org.eclipse.ui.internal.navigator.extensions;
012:
013: import org.eclipse.jface.viewers.IColorProvider;
014: import org.eclipse.jface.viewers.IFontProvider;
015: import org.eclipse.jface.viewers.ILabelProvider;
016: import org.eclipse.jface.viewers.ILabelProviderListener;
017: import org.eclipse.jface.viewers.ITreePathLabelProvider;
018: import org.eclipse.jface.viewers.TreePath;
019: import org.eclipse.jface.viewers.ViewerLabel;
020: import org.eclipse.swt.graphics.Color;
021: import org.eclipse.swt.graphics.Font;
022: import org.eclipse.swt.graphics.Image;
023: import org.eclipse.ui.IMemento;
024: import org.eclipse.ui.navigator.ICommonContentExtensionSite;
025: import org.eclipse.ui.navigator.ICommonLabelProvider;
026: import org.eclipse.ui.navigator.IDescriptionProvider;
027:
028: /**
029: * @since 3.2
030: */
031: public class SafeDelegateCommonLabelProvider implements
032: ICommonLabelProvider, IColorProvider, IFontProvider,
033: ITreePathLabelProvider {
034:
035: private final ILabelProvider delegateLabelProvider;
036:
037: /**
038: * @param aLabelProvider
039: * A non-null label provider.
040: *
041: */
042: public SafeDelegateCommonLabelProvider(ILabelProvider aLabelProvider) {
043: super ();
044: delegateLabelProvider = aLabelProvider;
045: }
046:
047: /**
048: * <p>
049: * No-op.
050: * </p>
051: *
052: * @see org.eclipse.ui.navigator.ICommonLabelProvider#init(ICommonContentExtensionSite)
053: */
054: public void init(ICommonContentExtensionSite aConfig) {
055: }
056:
057: /**
058: * <p>
059: * If the delegate label provider implements <code>IDescriptionProvider</code>,
060: * it is used to retrieve the status bar message.
061: * </p>
062: * <p>
063: * Returns <b>null </b> otherwise, forcing the CommonNavigator to provide the default
064: * message.
065: * </p>
066: *
067: * @see org.eclipse.ui.navigator.ICommonLabelProvider#getDescription(java.lang.Object)
068: */
069: public String getDescription(Object element) {
070: /* The following few lines were contributed as part of a patch. */
071: if (delegateLabelProvider instanceof IDescriptionProvider) {
072: IDescriptionProvider provider = (IDescriptionProvider) delegateLabelProvider;
073: return provider.getDescription(element);
074: }
075: return null;
076: }
077:
078: /**
079: * @param listener
080: */
081: public void addListener(ILabelProviderListener listener) {
082: delegateLabelProvider.addListener(listener);
083: }
084:
085: /**
086: *
087: */
088: public void dispose() {
089: delegateLabelProvider.dispose();
090: }
091:
092: /*
093: * (non-Javadoc)
094: *
095: * @see java.lang.Object#equals(java.lang.Object)
096: */
097: public boolean equals(Object obj) {
098: return delegateLabelProvider.equals(obj);
099: }
100:
101: public Image getImage(Object element) {
102: return delegateLabelProvider.getImage(element);
103: }
104:
105: public String getText(Object element) {
106: return delegateLabelProvider.getText(element);
107: }
108:
109: /*
110: * (non-Javadoc)
111: *
112: * @see java.lang.Object#hashCode()
113: */
114: public int hashCode() {
115: return delegateLabelProvider.hashCode();
116: }
117:
118: public boolean isLabelProperty(Object element, String property) {
119: return delegateLabelProvider.isLabelProperty(element, property);
120: }
121:
122: /**
123: * @param listener
124: */
125: public void removeListener(ILabelProviderListener listener) {
126: delegateLabelProvider.removeListener(listener);
127: }
128:
129: /*
130: * (non-Javadoc)
131: *
132: * @see java.lang.Object#toString()
133: */
134: public String toString() {
135: return delegateLabelProvider.toString();
136: }
137:
138: public void restoreState(IMemento aMemento) {
139:
140: }
141:
142: public void saveState(IMemento aMemento) {
143:
144: }
145:
146: /* (non-Javadoc)
147: * @see org.eclipse.jface.viewers.ITreePathLabelProvider#updateLabel(org.eclipse.jface.viewers.ViewerLabel, org.eclipse.jface.viewers.TreePath)
148: */
149: public void updateLabel(ViewerLabel label, TreePath elementPath) {
150: if (delegateLabelProvider instanceof ITreePathLabelProvider) {
151: ITreePathLabelProvider tplp = (ITreePathLabelProvider) delegateLabelProvider;
152: String text = label.getText() != null ? label.getText()
153: : ""; //$NON-NLS-1$
154: Image image = label.getImage();
155: tplp.updateLabel(label, elementPath);
156: if (label.getText() == null)
157: label.setText(text);
158: if (label.getImage() == null && image != null)
159: label.setImage(image);
160: } else {
161: Image image = getImage(elementPath.getLastSegment());
162: if (image != null)
163: label.setImage(image);
164: String text = getText(elementPath.getLastSegment());
165: if (text != null)
166: label.setText(text);
167: }
168: }
169:
170: /* (non-Javadoc)
171: * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
172: */
173: public Color getForeground(Object element) {
174: if (delegateLabelProvider instanceof IColorProvider) {
175: return ((IColorProvider) delegateLabelProvider)
176: .getForeground(element);
177: }
178: return null;
179: }
180:
181: /* (non-Javadoc)
182: * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
183: */
184: public Color getBackground(Object element) {
185: if (delegateLabelProvider instanceof IColorProvider) {
186: return ((IColorProvider) delegateLabelProvider)
187: .getBackground(element);
188: }
189: return null;
190: }
191:
192: /* (non-Javadoc)
193: * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
194: */
195: public Font getFont(Object element) {
196: if (delegateLabelProvider instanceof IFontProvider) {
197: return ((IFontProvider) delegateLabelProvider)
198: .getFont(element);
199: }
200: return null;
201: }
202: }
|