diff options
author | Dave Orme | 2006-03-30 15:42:53 +0000 |
---|---|---|
committer | Dave Orme | 2006-03-30 15:42:53 +0000 |
commit | ac4f3be2f973bc8281708185003176a677b1c1c9 (patch) | |
tree | bd29c68036a32f6cd65c3ad029f370d4b87553c7 | |
parent | 0097dcd70a4a6d9d1ba3c7fac80fa6b47b65cfd1 (diff) | |
download | org.eclipse.e4.databinding-I20060330-1200.tar.gz org.eclipse.e4.databinding-I20060330-1200.tar.xz org.eclipse.e4.databinding-I20060330-1200.zip |
TableViewerObservableCollectionWithLabels now supports converters for columns. Applied patch from bug #133946 with minor modifications.I20060330-1200
6 files changed, 153 insertions, 20 deletions
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java index f7efd392..703e7ef5 100644 --- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java +++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java @@ -11,6 +11,7 @@ package org.eclipse.jface.internal.databinding.internal.viewers; +import org.eclipse.jface.internal.databinding.provisional.conversion.IConverter; import org.eclipse.jface.internal.databinding.provisional.observable.mapping.IMultiMapping; import org.eclipse.jface.util.ListenerList; import org.eclipse.jface.viewers.AbstractListViewer; @@ -31,6 +32,8 @@ public class AbstractListViewerObservableCollectionWithLabels extends private LabelProvider labelProvider = new LabelProvider(); private IMultiMapping labelMapping; + + protected IConverter[] modelToTargetConverters; private class LabelProvider implements IViewerLabelProvider, ILabelProvider { @@ -146,4 +149,10 @@ public class AbstractListViewerObservableCollectionWithLabels extends getViewer().refresh(); } + /* (non-Javadoc) + * @see org.eclipse.jface.internal.databinding.provisional.viewers.IObservableCollectionWithLabels#setModelToTargetConverters(org.eclipse.jface.internal.databinding.provisional.conversion.IConverter[]) + */ + public void setModelToTargetConverters(IConverter[] converters) { + this.modelToTargetConverters = converters; + } } diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java index 0a9619aa..2d2dc611 100644 --- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java +++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java @@ -136,13 +136,13 @@ public class MultiMappingAndSetBinding extends Binding { targetSet.clear(); targetSet.addAll(modelSet); target.init(new IMultiMapping() { - public Object[] getMappingValues(Object element, int[] indices) { - return model.getMappingValues(element, indices); + public Object[] getMappingValues(Object element, int[] columnIndices) { + return model.getMappingValues(element, columnIndices); } - public void setMappingValues(Object element, int[] indices, + public void setMappingValues(Object element, int[] columnIndices, Object[] values) { - model.setMappingValues(element, indices, values); + model.setMappingValues(element, columnIndices, values); } }); } diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java index b19d0c82..2788f5f2 100644 --- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java +++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java @@ -11,6 +11,7 @@ package org.eclipse.jface.internal.databinding.internal.viewers; +import org.eclipse.jface.internal.databinding.provisional.conversion.IConverter; import org.eclipse.jface.internal.databinding.provisional.observable.mapping.IMultiMapping; import org.eclipse.jface.util.ListenerList; import org.eclipse.jface.viewers.ILabelProviderListener; @@ -34,15 +35,40 @@ public class TableViewerObservableCollectionWithLabels extends private TabelLabelProvider labelProvider = new TabelLabelProvider(); private IMultiMapping labelMapping; + + private IConverter[] modelToTargetConverters; private class TabelLabelProvider implements ITableLabelProvider, ITableColorProvider, ITableFontProvider { ListenerList listeners = new ListenerList(); - private Object getColumnValue(Object element, int columnIndex) { - return labelMapping.getMappingValues(element, + private Object getColumnValue(Object element, int columnIndex) { + Object object = labelMapping.getMappingValues(element, new int[] { columnIndex })[0]; + return convertColumnValue(object, columnIndex); + } + + /** + * @param object + * @param columnIndex + * @return converted value + */ + private Object convertColumnValue(Object object, int columnIndex) { + if (modelToTargetConverters[0] != null) { + if (modelToTargetConverters.length == 1) { + return modelToTargetConverters[0].convert(object); + } + + if (modelToTargetConverters.length >= columnIndex) { + if (modelToTargetConverters[columnIndex] != null) { + return modelToTargetConverters[columnIndex].convert(object); + } + return object; + } + throw new IllegalStateException("A converter was not specified for column index " + columnIndex); //$NON-NLS-1$ + } + return object; } private ViewerLabel getColumnValueAsViewerLabel(Object element, @@ -158,4 +184,10 @@ public class TableViewerObservableCollectionWithLabels extends ((TableViewer) getViewer()).insert(element, index); } + /** + * @param converters + */ + public void setModelToTargetConverters(IConverter[] converters) { + this.modelToTargetConverters = converters; + } } diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java index 7a3795ad..87f7a7d1 100644 --- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java +++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java @@ -29,11 +29,11 @@ import org.eclipse.jface.internal.databinding.provisional.validation.IValidator; */ public class BindSpec { - private IConverter modelToTargetConverter; + private IConverter[] modelToTargetConverters = new IConverter[1];; - private IConverter targetToModelConverter; + private IConverter[] targetToModelConverters = new IConverter[1];; - private IValidator targetValidator; + private IValidator[] targetValidators = new IValidator[1]; private IDomainValidator domainValidator; @@ -64,9 +64,37 @@ public class BindSpec { IConverter targetToModelConverter, IValidator targetValidator, IDomainValidator domainValidator, Integer modelUpdatePolicy, Integer validatePolicy, Integer targetUpdatePolicy) { - this.modelToTargetConverter = modelToTargetConverter; - this.targetToModelConverter = targetToModelConverter; - this.targetValidator = targetValidator; + + this.modelToTargetConverters[0] = modelToTargetConverter; + this.targetToModelConverters[0] = targetToModelConverter; + this.targetValidators[0] = targetValidator; + this.domainValidator = domainValidator; + this.modelUpdatePolicy = modelUpdatePolicy; + this.validatePolicy = validatePolicy; + this.targetUpdatePolicy = targetUpdatePolicy; + } + + /** + * Creates a bind spec with the given converters, validators, and update + * policies. + * + * @param modelToTargetConverter + * @param targetToModelConverter + * @param targetValidator + * @param domainValidator + * @param modelUpdatePolicy + * @param validatePolicy + * @param targetUpdatePolicy + * + */ + public BindSpec(IConverter[] modelToTargetConverter, + IConverter[] targetToModelConverter, IValidator[] targetValidator, + IDomainValidator domainValidator, Integer modelUpdatePolicy, + Integer validatePolicy, Integer targetUpdatePolicy) { + + this.modelToTargetConverters = modelToTargetConverter; + this.targetToModelConverters = targetToModelConverter; + this.targetValidators = targetValidator; this.domainValidator = domainValidator; this.modelUpdatePolicy = modelUpdatePolicy; this.validatePolicy = validatePolicy; @@ -94,7 +122,7 @@ public class BindSpec { * */ public BindSpec() { - this(null, null, null, null, null, null, null); + this((IConverter)null, null, null, null, null, null, null); } /** @@ -104,7 +132,16 @@ public class BindSpec { * @return the converter, or <code>null</code> */ public IConverter getModelToTargetConverter() { - return modelToTargetConverter; + return modelToTargetConverters[0]; + } + + /** + * Returns the converters to be used + * + * @return the converters</code> + */ + public IConverter[] getModelToTargetConverters() { + return modelToTargetConverters; } /** @@ -114,8 +151,17 @@ public class BindSpec { * @return the converter, or <code>null</code> */ public IConverter getTargetToModelConverter() { - return targetToModelConverter; + return targetToModelConverters[0]; } + + /** + * Returns the converters to be used + * + * @return the converters</code> + */ + public IConverter[] getTargetToModelConverters() { + return targetToModelConverters; + } /** * Returns the validator to be used, or <code>null</code> if a default @@ -124,10 +170,19 @@ public class BindSpec { * @return the validator, or <code>null</code> */ public IValidator getTypeConversionValidator() { - return targetValidator; + return targetValidators[0]; } /** + * Returns the validators to be used. + * + * @return the validators</code> + */ + public IValidator[] getTypeConversionValidators() { + return targetValidators; + } + + /** * Returns the validator to be used, or <code>null</code> if a default * validator should be used. * @@ -181,7 +236,16 @@ public class BindSpec { * @return this BindSpec, to enable chaining of method calls */ public BindSpec setModelToTargetConverter(IConverter converter) { - this.modelToTargetConverter = converter; + this.modelToTargetConverters[0] = converter; + return this; + } + + /** + * @param converters + * @return this BindSpec, to enable chaining of method calls + */ + public BindSpec setModelToTargetConverters(IConverter[] converters) { + this.modelToTargetConverters = converters; return this; } @@ -190,7 +254,16 @@ public class BindSpec { * @return this BindSpec, to enable chaining of method calls */ public BindSpec setTargetToModelConverter(IConverter converter) { - this.targetToModelConverter = converter; + this.targetToModelConverters[0] = converter; + return this; + } + + /** + * @param converters + * @return this BindSpec, to enable chaining of method calls + */ + public BindSpec setTargetToModelConverters(IConverter[] converters) { + this.modelToTargetConverters = converters; return this; } @@ -199,11 +272,20 @@ public class BindSpec { * @return this BindSpec, to enable chaining of method calls */ public BindSpec setValidator(IValidator validator) { - this.targetValidator = validator; + this.targetValidators[0] = validator; return this; } /** + * @param validators + * @return this BindSpec, to enable chaining of method calls + */ + public BindSpec setValidators(IValidator[] validators) { + this.targetValidators = validators; + return this; + } + + /** * @param validator * @return this BindSpec, to enable chaining of method calls */ diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java index 27f699df..9d9bc9d0 100644 --- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java +++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java @@ -11,6 +11,7 @@ package org.eclipse.jface.internal.databinding.provisional.viewers; +import org.eclipse.jface.internal.databinding.provisional.conversion.IConverter; import org.eclipse.jface.internal.databinding.provisional.observable.IObservableCollection; import org.eclipse.jface.internal.databinding.provisional.observable.mapping.IMultiMapping; @@ -30,4 +31,9 @@ public interface IObservableCollectionWithLabels extends IObservableCollection { */ public void updateElements(Object[] elements); + /** + * @param converters + */ + public void setModelToTargetConverters(IConverter[] converters); + } diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java index 9bf1e449..f4fd8ce0 100644 --- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java +++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java @@ -57,7 +57,7 @@ public class ViewersBindingFactory implements IBindingFactory { try { propertyDescriptor = new PropertyDescriptor("string", objectDef.getMethod("toString", null), null); //$NON-NLS-1$ //$NON-NLS-2$ } catch (Throwable t) { - throw new IllegalStateException("Automatic creation of toString() IObservableMultiMappingWithDomain failed."); //$NON-NLS-1$ + throw new IllegalStateException("Automatic creation of toString() IObservableMultiMappingWithDomain failed.", t); //$NON-NLS-1$ } PropertyDescriptor[] propertyDescriptors = new PropertyDescriptor[1]; @@ -73,10 +73,14 @@ public class ViewersBindingFactory implements IBindingFactory { IObservableList modelList = (IObservableList) model .getDomain(); IObservableCollectionWithLabels target = (IObservableCollectionWithLabels) targetObservable; + IObservableList targetList = (IObservableList) targetObservable; dataBindingContext.fillBindSpecDefaults(dataBindingContext, bindSpec, targetList.getElementType(), modelList .getElementType()); + + target.setModelToTargetConverters(bindSpec.getModelToTargetConverters()); + MultiMappingAndListBinding binding = new MultiMappingAndListBinding( dataBindingContext, targetList, target, modelList, model, bindSpec); |