blob: d85ae97b22a545cffa41d61638e70e99f647a53c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2012 Oracle. 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:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.common.ui.internal.jface;
import org.eclipse.jface.viewers.BaseLabelProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jpt.common.ui.internal.jface.LabelProviderAdapter;
import org.eclipse.jpt.common.ui.jface.TreeStateProvider;
import org.eclipse.jpt.common.utility.internal.StringTools;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.navigator.ICommonContentExtensionSite;
import org.eclipse.ui.navigator.ICommonLabelProvider;
/**
* @see NavigatorContentProvider
* <p>
* This provider can be used as the label provider
* in extensions of <code>org.eclipse.ui.navigator.navigatorContent</code>.
*/
public class NavigatorLabelProvider
extends BaseLabelProvider
implements ICommonLabelProvider
{
/**
* "Partner" content provider that holds the tree
* state provider.
*/
private NavigatorContentProvider contentProvider;
/**
* Listen to the delegate provider and forward any events.
*/
private DelegateListener delegateListener;
public NavigatorLabelProvider() {
super();
}
/**
* @see #dispose()
*/
public void init(ICommonContentExtensionSite config) {
this.contentProvider = (NavigatorContentProvider) config.getExtension().getContentProvider();
this.delegateListener = new DelegateListener();
this.getDelegate().addListener(this.delegateListener);
}
@Override
public boolean isLabelProperty(Object element, String property) {
return this.getDelegate().isLabelProperty(element, property);
}
public Image getImage(Object element) {
return this.getDelegate().getImage(element);
}
public String getText(Object element) {
return this.getDelegate().getText(element);
}
public String getDescription(Object element) {
return this.getDelegate().getDescription(element);
}
public void saveState(IMemento memento) {
// TODO
}
public void restoreState(IMemento memento) {
// TODO
}
private TreeStateProvider getDelegate() {
return this.contentProvider.getDelegate();
}
@Override
public String toString() {
return StringTools.buildToStringFor(this);
}
/**
* NB: The delegate will remove our listener when it is disposed
* in {@link NavigatorContentProvider#dispose()}. :-(
* @see BaseLabelProvider#dispose()
*/
@Override
public void dispose() {
super.dispose();
}
// ********** delegate listener **********
/* CU private */ class DelegateListener
extends LabelProviderAdapter
{
@Override
public void labelProviderChanged(LabelProviderChangedEvent event) {
NavigatorLabelProvider.this.labelProviderChanged(event);
}
}
/* CU private */ void labelProviderChanged(LabelProviderChangedEvent event) {
// forward the event with *this* provider as the source
this.fireLabelProviderChanged(new LabelProviderChangedEvent(this, event.getElements()));
}
}