package name.abuchen.portfolio.ui.util.viewers; import java.util.function.Function; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import name.abuchen.portfolio.money.Values; import name.abuchen.portfolio.ui.Images; public final class NumberColorLabelProvider<N extends Number> extends ColumnLabelProvider { private final Values<N> format; private final Function<Object, N> provider; public NumberColorLabelProvider(Values<N> format, Function<Object, N> provider) { this.format = format; this.provider = provider; } @Override public Color getForeground(Object element) { Number value = provider.apply(element); if (value == null) return null; return Display.getCurrent() .getSystemColor(value.doubleValue() >= 0 ? SWT.COLOR_DARK_GREEN : SWT.COLOR_DARK_RED); } @Override public Image getImage(Object element) { Number value = provider.apply(element); if (value == null) return null; return value.doubleValue() >= 0 ? Images.GREEN_ARROW.image() : Images.RED_ARROW.image(); } @Override public String getText(Object element) { N value = provider.apply(element); if (value == null) return null; return format.format(value); } }