blob: f168f5e51931245b83415342af46972457d2ab47 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 The University of York.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Louis Rose - initial API and implementation
******************************************************************************/
package org.eclipse.epsilon.egl.dt.traceability.editor;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.TreeColumn;
public class AddFontProviderToTreeViewer {
private final TreeViewer viewer;
public AddFontProviderToTreeViewer(TreeViewer viewer) {
this.viewer = viewer;
}
public void add(ITableFontProvider fontProvider) {
// Force the viewer to use the ITableFontProvider interface.
// When no columns are used, the TreeViewer is not rendered as a table and the ITableFontProvider is ignored.
// A single column allows us to mimic a normal tree viewer, but also use ITableFontProvider.
new TreeColumn(viewer.getTree(),SWT.NONE).pack();
// Adapt the existing ILabelProvider to an ITableLabelProvider so that it works with TreeColumn
// and attach the custom font provider
final LabelProviderAdapter tabelLabelProvider = new LabelProviderAdapter((ILabelProvider)viewer.getLabelProvider(), fontProvider);
viewer.setLabelProvider(tabelLabelProvider);
}
private class LabelProviderAdapter implements ITableLabelProvider, ITableFontProvider {
private final ILabelProvider labelProvider;
private final ITableFontProvider fontProvider;
public LabelProviderAdapter(ILabelProvider decorated, ITableFontProvider fontProvider) {
this.labelProvider = decorated;
this.fontProvider = fontProvider;
}
@Override
public void addListener(ILabelProviderListener listener) {
labelProvider.addListener(listener);
}
@Override
public void dispose() {
labelProvider.dispose();
}
@Override
public boolean isLabelProperty(Object element, String property) {
return labelProvider.isLabelProperty(element, property);
}
@Override
public void removeListener(ILabelProviderListener listener) {
labelProvider.removeListener(listener);
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
return labelProvider.getImage(element);
}
@Override
public String getColumnText(Object element, int columnIndex) {
return labelProvider.getText(element);
}
@Override
public Font getFont(Object element, int columnIndex) {
return fontProvider.getFont(element, columnIndex);
}
}
}