Hello all,
I'm newbie to databinding.
I've got a table viewer with a cell editor.
I'd like to listen to changes of editable data in the viewer.
For example i need to calculate max and min value of viewer input after input changes with cell editor or send viewer input to other view if input has changed.
How can I do that?
class Data extends Model {
List<DataValues> values = = new ArrayList<DataValues>();
...
public void setValues(List<SensorValue> values) {
firePropertyChange("values", this.values, this.values = values);
}
...
}
class DataValues extends Model {
private Float value;
...
public void setValue(Float value) {
firePropertyChange("value", this.value, this.value = value);
}
...
}
class Viewer extends ViewPart {
..
public WritableValue data = new WritableValue(null, Data.class);
..
public void createPartControl(Composite parent) {
...
bindingContext = new DataBindingContext();
Table t = new Table(parent, SWT.NONE;
TableViewer viewer = new TableViewer(t);
ObservableListContentProvider contentProvider = new ObservableListContentProvider();
viewer.setContentProvider(contentProvider);
...
IObservableList valuesOfData = MasterDetailObservables.detailList(data, BeanProperties.list(
"values", DataValues.class).listFactory(), DataValues.class);
TableViewerColumn columnValue = new TableViewerColumn(viewer, SWT.NONE);
columnValue.setEditingSupport(new ValueEditingSupport(viewer, bindingContext));
initLabelProvider(columnValue, "value", contentProvider);
viewer.setInput(valuesOfData);
initModel();
}
private initModel() {
Data d = new Data();
List<DataValues> dataList = new ArrayList<DataValues>();
dataList.add(...);
d.setValues(dataList);
data.setValue(d);
}
private void initLabelProvider(final TableViewerColumn column, final String propertyName,
ObservableListContentProvider contentProvider) {
column.setLabelProvider(new ObservableMapCellLabelProvider(Properties.observeEach(contentProvider
.getKnownElements(), BeanProperties.values(new String[] {propertyName}))) {
...
public void update(ViewerCell cell) {
super.update(cell);
...
}
...
}
}
private class ValueEditingSupport extends ObservableValueEditingSupport {
private CellEditor cellEditor;
public ValueEditingSupport(ColumnViewer viewer, DataBindingContext dbc) {
super(viewer, dbc);
cellEditor = new TextCellEditor((Composite) viewer.getControl());
}
protected CellEditor getCellEditor(Object element) {
return cellEditor;
}
protected IObservableValue doCreateCellEditorObservable(CellEditor cellEditor) {
return SWTObservables.observeText(cellEditor.getControl(), SWT.Modify);
}
protected IObservableValue doCreateElementObservable(Object element, ViewerCell cell) {
return BeansObservables.observeValue(element, "value");
}
}
}