/******************************************************************************* | |
* Copyright (c) 2006, 2010 IBM Corporation 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: | |
* IBM Corporation - initial API and implementation | |
* Brad Reynolds - bug 164247 | |
* Brad Reynolds - bug 164134 | |
* yves yang - port to XWT | |
*******************************************************************************/ | |
package org.eclipse.xwt.jface; | |
import java.util.Set; | |
import org.eclipse.core.databinding.observable.map.IMapChangeListener; | |
import org.eclipse.core.databinding.observable.map.IObservableMap; | |
import org.eclipse.core.databinding.observable.map.MapChangeEvent; | |
import org.eclipse.core.databinding.observable.set.IObservableSet; | |
import org.eclipse.jface.viewers.ILabelProvider; | |
import org.eclipse.jface.viewers.ITableLabelProvider; | |
import org.eclipse.jface.viewers.LabelProvider; | |
import org.eclipse.jface.viewers.LabelProviderChangedEvent; | |
import org.eclipse.jface.viewers.Viewer; | |
import org.eclipse.swt.graphics.Image; | |
/** | |
* A label provider based on one or more observable maps that track attributes | |
* that this label provider uses for display. Clients may customize by | |
* subclassing and overriding {@link #getColumnText(Object, int)}, | |
* {@link #getColumnImage(Object, int)}, for tables or trees with columns, or by | |
* implementing additional mixin interfaces for colors, fonts etc. | |
* | |
* @since 1.1 | |
* | |
*/ | |
public class ObservableMapLabelProvider extends LabelProvider implements | |
ILabelProvider, ITableLabelProvider { | |
private final IObservableMap[] textMaps; | |
private Viewer viewer; | |
private IMapChangeListener mapChangeListener = new IMapChangeListener() { | |
public void handleMapChange(MapChangeEvent event) { | |
Set<?> affectedElements = event.diff.getChangedKeys(); | |
LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent( | |
ObservableMapLabelProvider.this, affectedElements.toArray()); | |
fireLabelProviderChanged(newEvent); | |
} | |
}; | |
/** | |
* @param textMaps | |
*/ | |
public ObservableMapLabelProvider(Viewer viewer, IObservableSet domain, | |
String[] propertyNames) { | |
textMaps = new XWTObservableWrapper[propertyNames.length]; | |
for (int i = 0; i < textMaps.length; i++) { | |
textMaps[i] = new XWTObservableWrapper(domain, viewer, propertyNames[i]); | |
textMaps[i].addMapChangeListener(mapChangeListener); | |
} | |
this.viewer = viewer; | |
} | |
public void dispose() { | |
for (int i = 0; i < textMaps.length; i++) { | |
textMaps[i].removeMapChangeListener(mapChangeListener); | |
} | |
super.dispose(); | |
} | |
public Image getImage(Object element) { | |
return getColumnImage(element, 0); | |
} | |
public Image getColumnImage(Object element, int columnIndex) { | |
if (columnIndex < textMaps.length) { | |
Object result = textMaps[columnIndex].get(element); | |
return JFacesHelper.getColumnImage(viewer, result, columnIndex); | |
} | |
return null; | |
} | |
public String getText(Object element) { | |
return getColumnText(element, 0); | |
} | |
public String getColumnText(Object element, int columnIndex) { | |
if (columnIndex < textMaps.length) { | |
Object result = textMaps[columnIndex].get(element); | |
return JFacesHelper.getColumnText(viewer, result, columnIndex); | |
} | |
return null; | |
} | |
} | |