Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
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 22:40
Eclipse UserFriend
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();
}

}
}
////////////////////////////////////////
Previous Topic:Common navigator drag adn drop support?
Next Topic:Open an external file in eclipse
Goto Forum:
  


Current Time: Sun Oct 06 06:54:07 GMT 2024

Powered by FUDForum. Page generated in 0.03296 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top