blob: d261d81ffabedae4fb6f776587b19b8c4371fa72 [file] [log] [blame]
/*
* Copyright (c) 2007, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.net4j.util.ui.views;
import org.eclipse.net4j.util.internal.ui.bundle.OM;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.ui.StructuredContentProvider;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import java.util.ArrayList;
import java.util.List;
public abstract class ItemProvider<INPUT> extends StructuredContentProvider<INPUT>
implements ITreeContentProvider, ILabelProvider, IColorProvider, IFontProvider, IStyledLabelProvider
{
public static final Object[] NO_ELEMENTS = {};
private List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>(0);
public ItemProvider()
{
}
public final Object[] getElements(Object parent)
{
return getChildren(parent);
}
public boolean hasChildren(Object parent)
{
return getChildren(parent).length != 0;
}
/**
* @since 3.5
*/
public StyledString getStyledText(Object obj)
{
String text = getText(obj);
return new StyledString(text);
}
public String getText(Object obj)
{
return obj.toString();
}
public Image getImage(Object obj)
{
if (PlatformUI.isWorkbenchRunning())
{
String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
}
return null;
}
public Color getBackground(Object element)
{
return null;
}
public Color getForeground(Object element)
{
if (!LifecycleUtil.isActive(element))
{
return getDisplay().getSystemColor(SWT.COLOR_GRAY);
}
return null;
}
public Font getFont(Object element)
{
return null;
}
public boolean isLabelProperty(Object element, String property)
{
return true;
}
public ILabelProviderListener[] getListeners()
{
synchronized (listeners)
{
return listeners.toArray(new ILabelProviderListener[listeners.size()]);
}
}
public void addListener(ILabelProviderListener listener)
{
synchronized (listeners)
{
listeners.add(listener);
}
}
public void removeListener(ILabelProviderListener listener)
{
synchronized (listeners)
{
listeners.remove(listener);
}
}
protected void fillContextMenu(IMenuManager manager, ITreeSelection selection)
{
}
protected void fireLabelProviderChanged()
{
fireLabelProviderChanged(new LabelProviderChangedEvent(this));
}
protected void fireLabelProviderChanged(Object element)
{
fireLabelProviderChanged(new LabelProviderChangedEvent(this, element));
}
protected void fireLabelProviderChanged(Object[] elements)
{
fireLabelProviderChanged(new LabelProviderChangedEvent(this, elements));
}
/**
* Fires a label provider changed event to all registered listeners Only listeners registered at the time this method
* is called are notified.
*
* @param event
* a label provider changed event
* @see ILabelProviderListener#labelProviderChanged
*/
private void fireLabelProviderChanged(LabelProviderChangedEvent event)
{
for (ILabelProviderListener listener : getListeners())
{
try
{
listener.labelProviderChanged(event);
}
catch (Exception ex)
{
OM.LOG.error(ex);
}
}
}
}