Home » Eclipse Projects » Eclipse Platform » Data Binding: Not able to listen for text changes in a table editor
Data Binding: Not able to listen for text changes in a table editor [message #316687] |
Thu, 14 June 2007 18:40 |
Eclipse User |
|
|
|
Originally posted by: venkatnv.gmail.com
Hi,
I am trying to use JFace Data binding to create an editable table viewer.
however I am not able to listen for change events each time a character is added or deleted from a table cell.
I am trying to use:
final IObservableValue observableValue = BeansObservables.observeValue(realm,
modelElement, property);
observableValue.addValueChangeListener(new IValueChangeListener() {
public void handleValueChange(ValueChangeEvent event) {
System.out.println("Value 1: " + observableValue.getValue().toString());
}
});
Note:
I am using Eclipse 3.3 RC4 and the code uses some of the latest JFace binding API's. I got the InlineEditingSupport class from one of the forums ...
Appreciate any suggestion ..
Thanks,
Venkat.
My complete code snippet ..
/////////////////////////////
package myExamples.dialogs;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.databinding.Binding;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.observable.map.IObservableMap;
import org.eclipse.core.databinding.observable.value.IObservableVal ue;
import org.eclipse.core.databinding.observable.value.IValueChangeLi stener;
import org.eclipse.core.databinding.observable.value.ValueChangeEve nt;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.ObservableListContentP rovider;
import org.eclipse.jface.databinding.viewers.ObservableMapLabelProv ider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
public class TableViewerSnippet {
private Table table;
Shell sShell;
private ActionItemStatusModel model = new ActionItemStatusModel();
public void bindGUI(DataBindingContext bindingContext) {
TableViewer aiStatusViewer = new TableViewer(table);
table.setHeaderVisible(true);
String[] columns = {"Name"};
TableViewerColumn column = new TableViewerColumn(aiStatusViewer,
SWT.NONE);
column.setEditingSupport(new InlineEditingSupport(aiStatusViewer,bindingContext,"name", sShell,
new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT)));
column.getColumn().setWidth(100);
column.getColumn().setText(columns[0]);
ObservableListContentProvider aiStatusViewerContent = new ObservableListContentProvider();
aiStatusViewer.setContentProvider(aiStatusViewerContent);
IObservableMap[] attributeMaps = BeansObservables.observeMaps(
aiStatusViewerContent.getKnownElements(), ActionItemStatus.class,
new String[] { "name"});
aiStatusViewer.setLabelProvider(new ObservableMapLabelProvider(
attributeMaps));
Realm realm = SWTObservables.getRealm(sShell.getDisplay());
aiStatusViewer.setInput(new WritableList(realm, model.getAIStatusList(),
ActionItemStatus.class));
}
public void run() {
Display display = new Display();
sShell = new Shell();
sShell.setText("Shell");
sShell.setSize(new Point(461, 407));
table = new Table(sShell, SWT.FULL_SELECTION);
table.setHeaderVisible(false);
table.setLinesVisible(true);
table.setSize(378, 268);
Realm realm = SWTObservables.getRealm(sShell.getDisplay());
DataBindingContext bindingContext = new DataBindingContext(realm);
bindGUI(bindingContext);
sShell.setSize(600, 600);
sShell.open();
while (!sShell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public static void main(String[] args) {
TableViewerSnippet list = new TableViewerSnippet();
list.run();
}
class ActionItemStatus extends Model {
private String name = "";
public ActionItemStatus(String name) {
this.name = name;
}
public ActionItemStatus() {}
public String getName() {
return name;
}
public void setName(String name) {
String oldValue = this.name;
this.name = name;
firePropertyChange("name", oldValue, name);
}
}
class ActionItemStatusModel {
private ArrayList aiStatusList;
public ActionItemStatusModel() {
aiStatusList = new ArrayList();
//get AI Status from db ...
ActionItemStatus aiStatus = new ActionItemStatus("status1");
aiStatusList.add(aiStatus);
aiStatus = new ActionItemStatus("status2");
aiStatusList.add(aiStatus);
aiStatus = new ActionItemStatus("status3");
aiStatusList.add(aiStatus);
}
public ArrayList getAIStatusList() {
return aiStatusList;
}
public void addActionStatus(ActionItemStatus status) {
aiStatusList.add(status);
}
}
abstract class Model {
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
this);
private String id;
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName , listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener) ;
}
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyN ame,
listener);
}
protected void firePropertyChange(String propertyName, Object oldValue,
Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue,
newValue);
}
protected void firePropertyChange(String propertyName, int oldValue,
int newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue,
newValue);
}
protected void firePropertyChange(String propertyName, boolean oldValue,
boolean newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue,
newValue);
}
public void setId(String string) {
Object oldValue = id;
id = string;
firePropertyChange("id", oldValue, id);
}
protected Object[] append(Object[] array, Object object) {
List newList = new ArrayList(Arrays.asList(array));
newList.add(object);
return newList.toArray((Object[]) Array.newInstance(array.getClass()
.getComponentType(), newList.size()));
}
protected Object[] remove(Object[] array, Object object) {
List newList = new ArrayList(Arrays.asList(array));
newList.remove(object);
return newList.toArray((Object[]) Array.newInstance(array.getClass()
.getComponentType(), newList.size()));
}
}
class InlineEditingSupport extends EditingSupport{
protected TextCellEditor editor;
protected DataBindingContext bindingContext;
/**
* The current binding.
*/
protected Binding binding;
private Shell shell;
//This is the property of the bound table column
private String property;
private UpdateValueStrategy strategy;
/**
* @param viewer
*/
public InlineEditingSupport(ColumnViewer viewer,
DataBindingContext bindingContext, String property, Shell shell,
UpdateValueStrategy strategy) {
super(viewer);
this.editor = new TextCellEditor((Composite) viewer.getControl());
this.bindingContext = bindingContext;
this.property = property;
this.shell = shell;
this.strategy = strategy;
}
protected boolean canEdit(Object element) {
return true;
}
protected CellEditor getCellEditor(Object element) {
return editor;
}
protected Object getValue(Object element) {
// Not needed
return null;
}
protected void setValue(Object element, Object value) {
// Not Needed
}
protected void initializeCellEditorValue(CellEditor cellEditor,
ViewerCell cell) {
Realm realm = SWTObservables.getRealm(shell.getDisplay());
Object modelElement = cell.getElement();
final IObservableValue observableValue = BeansObservables.observeValue(realm,
modelElement, property);
observableValue.addValueChangeListener(new IValueChangeListener() {
public void handleValueChange(ValueChangeEvent event) {
System.out.println("Value 1: " + observableValue.getValue().toString());
}
});
binding = bindingContext
.bindValue(SWTObservables.observeText(cellEditor.getControl( ), SWT.Modify),
observableValue, strategy, null);
}
protected void saveCellEditorValue(CellEditor cellEditor,
ViewerCell cell) {
binding.updateTargetToModel();
}
}
}
////////////////////////////////////////
|
|
|
Goto Forum:
Current Time: Thu May 08 09:19:40 EDT 2025
Powered by FUDForum. Page generated in 0.04643 seconds
|