DataBinding and tables [message #447763] |
Fri, 14 April 2006 12:14 |
Eclipse User |
|
|
|
Originally posted by: alexixlebaulois.yahoo.fr
Hi,
I'm using Eclipse 3.2M6 and I would like to use JFace DataBinding to populate a table (the table must be editable). My problem is that I cannot find any resource about it. Does anybody know how to do that ? Thanks
Alexis
|
|
|
|
Re: DataBinding and tables [message #447933 is a reply to message #447764] |
Tue, 18 April 2006 08:30 |
Eclipse User |
|
|
|
Originally posted by: alexixlebaulois.yahoo.fr
Thank you very much for your help. I absolutely need a way to bind a model to a table with editable cells and sortable columns. Any idea of what I could use ? can TableViewer with ContentProvider and LabelProvider do that ?
Thanks
Alexis
|
|
|
|
|
Re: DataBinding and tables [message #448206 is a reply to message #447976] |
Wed, 19 April 2006 05:18 |
Brad Reynolds Messages: 309 Registered: July 2009 |
Senior Member |
|
|
------=_Part_207_32404958.1145424028429
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
For posterity I'm attaching an example of how to implement editing with the current 3.2m6 code with a TableViewer. This is just meant as an example, not a recommendation. There were a few workarounds employed, which are documented in the file, in order to make this work. Use at your own risk. There are no guarantees on the quality or the ability to run this code when Data Binding is officially released. Basically if you have problems don't blame me.
I believe the plan is to integrate support for editing as it existed in the 3.2m5 code but just hasn't yet been ported to 3.2m6.
-brad
------=_Part_207_32404958.1145424028429
Content-Type: application/octet-stream;
name=BoundEditableTableViewerExample.java
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename=BoundEditableTableViewerExample.java
package org.eclipse.jface.examples.databinding.nestedselection;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.internal.databinding.provisional.BindSpec;
import org.eclipse.jface.internal.databinding.provisional.DataBindi ngContext;
import org.eclipse.jface.internal.databinding.provisional.descripti on.Property;
import org.eclipse.jface.internal.databinding.provisional.descripti on.TableModelDescription;
import org.eclipse.jface.internal.databinding.provisional.observabl e.IObservable;
import org.eclipse.jface.internal.databinding.provisional.validatio n.IDomainValidator;
import org.eclipse.jface.internal.databinding.provisional.validatio n.ValidationError;
import org.eclipse.jface.internal.databinding.provisional.viewers.V iewersProperties;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
/**
* Quick and dirty example to show how editing of a TableViewer can be
* accomplished while using Data Binding code that exists in 3.2m6. This class
* depends upon Model data that can be found in the
* org.eclipse.jface.examples.databinding project.
* <p>
* DISCLAIMER: this is only to show how this can be accomplished with the
* provisional code. Use at your own risk as there are no guarantees that it is
* bug free, covers every scenario, or will work with the official release of
* Data Binding.
* </p>
* <p>
* Deviations from common practices (workarounds) employed:
* <ul>
* <li>Used an IDomainValidator to stop the updating of the domain when
* dismissal of the editor wasn't done with [Enter] or [Tab].
* TextObservableValue fires change events on lost focus which is normally
* desired but when editing a Table we only want the update to occur in these
* cases to be consistent with normal TableViewer editing.</li>
* <li>In the ICellModifier for the bound TableViewer getValue() returns the
* value currently in the editor. Because of binding the editor will contain the
* correct value at this point. If getValue() were to return <code>null</code>
* the viewer would throw an assertion. To get around this we're just returning
* the current value of the editor.</li>
* <li>In the ICellModifier for the bound TableViewer there is no
* implementation for modify(). Because of binding the value automatically gets
* sent to the model (unless canceled by the IDomainValidator workaround).</li>
* </ul>
* </p>
*
* @author Brad Reynolds
*/
public class BoundEditableTableViewerExample {
/**
* @param args
*/
public static void main(String[] args) {
new BoundEditableTableViewerExample().run();
}
private static final String[] columnHeaders = new String[] {
"Name", "State" }; //$NON-NLS-1$//$NON-NLS-2$
private void run() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2, true));
Label label = new Label(shell, SWT.NONE);
label.setText("Bound"); //$NON-NLS-1$
label = new Label(shell, SWT.NONE);
label.setText("Not Bound"); //$NON-NLS-1$
final Table table1 = setup(new Table(shell, SWT.FULL_SELECTION));
final Table table2 = setup(new Table(shell, SWT.FULL_SELECTION));
final Model model1 = new Model();
final Model model2 = new Model();
final TableViewer boundViewer = createBoundViewer(table1, model1);
final TableViewer normalViewer = createNormalViewer(table2, model2);
packColumns(table1);
packColumns(table2);
// Show that invoking edit on the viewer behaves the same (edit sets
// selection thus updating the editors with the selection)
Button button = new Button(shell, SWT.PUSH);
button.setText("Edit"); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
boundViewer.editElement(model1.getPersonList().get(0), 0);
}
});
button = new Button(shell, SWT.PUSH);
button.setText("Edit"); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
normalViewer.editElement(model2.getPersonList().get(0), 0);
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
/**
* Sets up a Table.
*
* @param table
* @return table
*/
private Table setup(Table table) {
table.setHeaderVisible(true);
table.setLinesVisible(true);
for (int i = 0; i < 2; i++) {
new TableColumn(table, SWT.NONE).setText(columnHeaders[i]);
}
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
return table;
}
private void packColumns(Table table) {
for (int i = 0; i < table.getColumnCount(); i++) {
table.getColumn(i).pack();
}
}
private TableViewer createBoundViewer(Table table, Model model) {
DataBindingContext dbc = BindingFactory.createContext(table);
final TableViewer viewer = new TableViewer(table);
dbc.bind(viewer, new TableModelDescription(new Property(model,
"personList", Person.class, Boolean.TRUE), new Object[] { //$NON-NLS-1$
"name", "state" }), null); //$NON-NLS-1$ //$NON-NLS-2$
IObservable selectedPerson = dbc.createObservable(new Property(viewer,
ViewersProperties.SINGLE_SELECTION));
TextCellEditor editor = new TextCellEditor(viewer.getTable());
// hack... use a domain validator to cancel the updating of the model
// when escape is pressed.
BindSpec spec = new BindSpec();
final CancelUpdateValidator validator = new CancelUpdateValidator();
spec.setDomainValidator(validator);
Text text = (Text) editor.getControl();
text.addListener(SWT.Traverse, new Listener() {
public void handleEvent(Event event) {
if (event.detail == SWT.TRAVERSE_RETURN
|| event.detail == SWT.TRAVERSE_TAB_NEXT) {
validator.allow = true;
}
}
});
dbc.bind(editor.getControl(), new Property(selectedPerson, "name", //$NON-NLS-1$
String.class, Boolean.FALSE), spec);
viewer.setCellEditors(new CellEditor[] { editor, null });
viewer.setColumnProperties(new String[] { "name", null }); //$NON-NLS-1$
viewer.setCellModifier(new BoundCellModifier(viewer));
return viewer;
}
/**
* Provides a not so elegant way to prevent the updating of the domain.
*/
private class CancelUpdateValidator implements IDomainValidator {
private boolean allow = false;
public ValidationError isValid(Object value) {
ValidationError result = null;
try {
if (!allow) {
result = ValidationError.error("canceling update..."); //$NON-NLS-1$
}
} finally {
allow = false;
}
return result;
}
}
/**
* Constructs a normal viewer without data binding.
*
* @param table
* @return viewer
*/
private TableViewer createNormalViewer(Table table, Model model) {
final TableViewer viewer = new TableViewer(table);
viewer.setContentProvider(new IStructuredContentProvider() {
public void dispose() {
// do nothing
}
public void inputChanged(Viewer viewer, Object oldInput,
Object newInput) {
// not needed for demo
}
public Object[] getElements(Object inputElement) {
return ((List) inputElement).toArray();
}
});
viewer.setLabelProvider(new ITableLabelProvider() {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
Person person = (Person) element;
switch (columnIndex) {
case 0:
return person.getName();
case 1:
return person.getState();
default:
return null;
}
}
public void addListener(ILabelProviderListener listener) {
// not needed for demo
}
public void dispose() {
// not needed for demo
}
public boolean isLabelProperty(Object element, String property) {
return "name".equals(property); //$NON-NLS-1$
}
public void removeListener(ILabelProviderListener listener) {
// not needed for demo
}
});
viewer.setInput(new ArrayList(model.getPersonList()));
viewer.setCellEditors(new CellEditor[] { new TextCellEditor(table),
null });
viewer.setColumnProperties(new String[] { "name", null }); //$NON-NLS-1$
viewer.setCellModifier(new ICellModifier() {
public boolean canModify(Object element, String property) {
return "name".equals(property); //$NON-NLS-1$
}
public Object getValue(Object element, String property) {
return "name".equals(property) ? ((Person) element).getName() : null; //$NON-NLS-1$
}
public void modify(Object element, String property, Object value) {
if (element instanceof Item) {
element = ((Item) element).getData();
}
if ("name".equals(property)) { //$NON-NLS-1$
((Person) element).setName((String) value);
viewer.update(element, new String[] { property });
}
}
});
return viewer;
}
/**
* ICellModifier implementation to be used when binding editors to model
* selection.
*/
private class BoundCellModifier implements ICellModifier {
private final TableViewer viewer;
private BoundCellModifier(TableViewer viewer) {
if (viewer == null)
throw new NullPointerException("The 'viewer' is null."); //$NON-NLS-1$
this.viewer = viewer;
}
/**
* Returns the editor for the property.
*
* @param property
* if <code>null</code> assumes no editor
* @return editor <code>null</code> if undefined
*/
private CellEditor getEditor(String property) {
if (property == null)
return null;
CellEditor editor = null;
Object[] properties = viewer.getColumnProperties();
for (int i = 0; i < properties.length; i++) {
if (property.equals(properties[i])) {
editor = viewer.getCellEditors()[i];
break;
}
}
return editor;
}
/**
* Makes the assumption that if an editor exists for the column with the
* property it's modifiable.
*/
public boolean canModify(Object element, String property) {
return getEditor(property) != null;
}
/**
* Returns the value that is already in the editor. This is a bit of a
* workaround to make things work. Because selection sets the value in
* the editor it will technically already have the right value when this
* method is invoked.
*/
public Object getValue(Object element, String property) {
CellEditor editor = getEditor(property);
return editor != null ? editor.getValue() : null;
}
/**
* Does nothing. Because of the binding the value will be copied to the
* model regardless of what we do here.
*/
public void modify(Object element, String property, Object value) {
// not needed, the binding takes care of it
}
}
}
------=_Part_207_32404958.1145424028429--
|
|
|
|
Re: DataBinding and tables [message #448234 is a reply to message #448206] |
Wed, 19 April 2006 16:26 |
Eclipse User |
|
|
|
Originally posted by: alexixlebaulois.yahoo.fr
------=_Part_279_26989848.1145464021138
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Hi,
I tried to use your solution and I get this error : <b>Unable to create view: could not find updatable for org.eclipse.jface.viewers.TableViewer@21d23b</b>. It occured at <b>dbc.bind(...)</b>. Maybe it comes from the BindingFactory.createContext(...) because I didn't find it so I had to make one (take a look at the attached code). Could you help me please ?
Alexis
------=_Part_279_26989848.1145464021138
Content-Type: application/zip; name=src.zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=src.zip
UEsDBAoAAAAAAGiOkzQAAAAAAAAAAAAAAAATAAAAc3JjL2JpbmRpbmdGYWN0 b3J5L1BLAwQUAAAA
CAAbkpM0Eo7aiPQBAAAwBwAAJgAAAHNyYy9iaW5kaW5nRmFjdG9yeS9CaW5k aW5nRmFjdG9yeS5q
YXZhtZXBauMwEIbPCeQd5uhAV32AsIdts4VCIYcW9ixLE1etIhlJdnZZ8u47 suU4sV0ITdcE2xrN
fB7/M+OUXLzzAiFXRipTPHARrPuzWswXc7UrrQtgXcFQaFV6ZG9bLpApE9AZ rpnkgadAVjpbK69s
tN+R7blEsboWQrarGGuyJ869Jeff4Spcjtx4dkfnTe7R1TzX2Cv2ee62YSj0 bI1bXunQCFiVkfff
+GfV/gr24xdS7VFf9thrfRXS7wN7/vVyYeWiN9ZoAmmmfGk9/oyrS52flA9o 0H3sv1eyQAq4t7Tv
VcBm5soq10qA0Nx7ONcTCKRxF58CA6n/LuazGD1L4T7wQJdx94NwyAOmVXZ8 NpTcEXgJkQR0bBVJ
NgWQuYDvYHA/sZktVymcvBiXcqR1FgMn5yejkBswldbteblcwe1t91mCYKEZ vkv4U0XOxjxyA0GJ
O6sH2PH0NdwPZ7ODy9YhUmt01I4T3L5oQ+bJzoDXJZ3jK6+VrVzCtkWL5EHX teiBrS9uE9t2Sm2V
hLYVk7/MTvsd8DysexvZ+vQVj8ch3R+OVoehciZGRMvhtEfTK6eOTKtsquNG phs4+SZA4I6yP7ft
rERqpO5/qFEw3rQvMyNtXzbrDfyogv1WRHUoBQk7DK9W0vRUefRKycduTNnT 7x9QSwMEFAAAAAgA
aI6TNK6zY5OdAgAAYAUAACYAAABzcmMvYmluZGluZ0ZhY3RvcnkvSURlbGV0 ZUhhbmRsZXIuamF2
YZVUy27bMBA824D/YY92EEtOgV6SokiQtKiAFg2K/ABFraxN+VBJSoJR9N+7 JP1q2hxqGIJFcmdm
Z4cuLxZzuIB72+8cbbsAy/sVvNls3sKDGKmBr04jvGue7a200pohrHuh9Nrb NkzCYSGtfp8Q0uNO
KUgwHhx6dCM2BTx15KF3duuEBmEaCB2CkFzZC7MjswUtAjoSyicQhuWVhs+M gpSoFcJgGnSpjg9q
D7ZNLx+kot4jPA61IgmfSaLh1/Gq2CSkqSPZHakIPVexloZ8cFQPgay5TIp4 8UQmQiruQuivy3Ka
pgIzT2HdtlS4FarEXq3Hq03RBa3i6b2JJuNa56/TSvyc+Rg/a6gMBW4W7h6r TK57hRpNEFFQrCsX
817I72KLUJNp2KKPQjLq7mYxX8zLi0xXGTajFRKhekCFAT8xmkJXANwZoONu ax3Y+hlliP2LAFIY
NthE+CYWMitbaqDGTqiWzc1j4H50bz0FfIq+FAdl2Wx6hR1+LuazJHHGIF8w dLaJjPkQa0tx0Hmd
f0mhFHImLGuJwyWDQHm8vkdJLfGus1PEyJg17wxSovftoNQu9xCDxtDIuZNI I+vQYgc9S7ROcxA4
YXFxFIqa5HO2gmJQfwzksMngVZszwt8TyWWSc0T2nR0Ui8IwOMZxQ2yrypqz 0VGssQEy5pIHoAcf
gJdWUf5e8QvYdGQP2vJliI7P0s2Kz9texPvDTlTm3rJnMnWRWmZ38g3hG+qJ f+QO4+APA95j3Z6J
Pti8N/dM2E3mB8vbbqKDEh7+bD/92lqFXHMc7JLz8FLciuM6+0caMss3O72a hqlDk7QN/CcCnchT
Qh8OSYkA6UAG/iMpjPofxlEmkqedE8Fys66Fx2b1V/+jpbM+Xmv+12L+G1BL AwQUAAAACABojpM0
MUglW2ICAACPBAAAJgAAAHNyYy9iaW5kaW5nRmFjdG9yeS9JSW5zZXJ0SGFu ZGxlci5qYXZhdVPR
itswEHy+gP9h3y4JjZ0r9OVayh3Xlgu09Cj5gbW0sXUnS64k24TSf+9Kci6h tH4wWKuZnZldV+ti
AWt4sP3RqaYNsHxYwdvt9h18wlFJ+O46gg/y2d4JK6wZwqZH3W28PYQJHZXC dh8TQ3rdaw2JxoMj
T24kWcK+VR56ZxuHHaCREFoCFIzs0RyVaaDDQE6h9omEaflE8p0RlcZaEwxG kks4vth5sIf08Vlo
1XuCp6HWSsBXJcjw53hTbhPT1CrRvrZS5BnFWqTywal6CMqaN0kRH56bYUjg NoT+tqqmaSop9ymt
aypNDeqKer0Zb7ZlGzodb88hmsxrnb9NJ/G5yDE+G9gZFdgs3D/tcvOu19SR CRgFRVxVLHoUL9gQ
1MpIjugLCmY9vi8WxaJa53Y7w2EcUBDsdmzbhUdm0+RKgHsD6rV6sA5s/Uwi RP8YQKCBNt3lKf0c
yMeCZUQkAQRDU2qQQZHJ8qmwWvMnS4Sa4tRIqkAS6iMXHzhh6/l7HyMszxtx h0NoWQBv0MlZHpb6
j3r4VSyuksUrhn8jRstZGhv78ao3Gok74EiQGhk3y8+il37FO/QSZQ59tgTO TjxbyMQR6nsS6qDY
Q9LOzrjD/pLTURic8fPGhoGndrrKy0W8qLGSO2deK8TgmHGZBEpL3lwHTnuk GHGdAR55GdDP+pOj
CxGrMlPl912P8b85FR85t6Rx4J7XHrib49U5y1Im0cbyRcaONG9XFhHLmbum RhkTQ5p/qIsZL7eb
Gj3Jv9TkRP4ZyMwRo85DyEge+dV55nNYS3WhOXpa8Wr/LhZ/AFBLAwQKAAAA AAA5jpM0AAAAAAAA
AAAAAAAACQAAAHNyYy9kYXRhL1BLAwQUAAAACAAakJM0KZxoMqkCAABQBwAA EwAAAHNyYy9kYXRh
L01vZGVsLmphdmGlU1FP2zAQfqZS/8OpTwmjScu2F9imoQKiU9nQNIlnNz4a g2NHttuoTPz3nd2k
SVk3HhpVSX33fd99Pp/T434PjmGiy7URi9xBNInhdDT6CJdsJTj8MAXCJ/6o v2Y602rphiWTxdDq
B1cxg0mmiy9BIbwupIQgY8GgRbNCnsCvXFgojV4YVgBTHFyOwDJilkythVpA wRwawaQNIiRLEU6Y
FROSzSXCUnE0gUfAwoJ+CIurTIrSItwt51JkMBMZKlquxskoKFW5yPJtKYGW WOSFC+uMmC+d0Ook
OKJgW4y5QM6dK8/StKqqBDd1Em0WqcQFkymWcrgaj5LcFdKj6yaqja429ixE /NPpo3+GMFXC0Wbh
4m66KV6UEgtUjnlDnpf2eyXLntgCgTPHzvu9fo9Q2jh4JJ8JOZfJTKgn5DPa Szc/F4pTS69ZRi7W
yfQSJTq8oToSzfk/YVPqm3EtjAxseppJZi3cao4Sfvd7R3U4BKI4hI5KNFYr 7yRhnEcKK7gLoWjw
TedqcAKD8en7D/57nyNzOoSms0Ecn7/FZwoP4V8bpp4OMqAPqj/J0R3Cvxdy vjSHKFzJQr/Ff/EH
fpSm8F1XwGqqV/PXlrTdOkkSQtCvnTpoi8Jn8CXbXBRk23HpsBboWv1mggy6 pVEdxdZVrbA7yLsq
O6lXkt7XdC+gUZ5rLZEpyJja4CKhHBhdTdVES4mZv5UNp5F1Zomh87XLrdpK 02XnQeenrv4r1Tk0
g4VeYfQaua1Ar7ojnabuXtrdluyk9rVkL6BR9q5FAIQNlNoK7+eGFlv3m1pe rP63mYF67Grrrwez
q3TScht0MwYdVJ2h2fROPKNOUj1vLo5umcsTuuZcF7SP4y0+6tS24hmj+N04 jlu9v+9MI73HGeHb
7jW4Pcfz8gdQSwMEFAAAAAgAOY6TNIJSmgSQAQAABAMAABQAAABzcmMvZGF0 YS9QZXJzb24uamF2
YXVRXWsbMRB8jsH/YclTEuw7J5CXOCkNaR8MgRoSyPNa2typ1ReSfIcp/e9d 6S45t03FcZJmdmdG
Un0xn8EFPDh/CKppE5w9nMPVanUNX7BTEr4FQ3Arv7vPwgln92npUZtldK+p x0CVcOZTUSi/e62h
yEQIFCl0JCt4blUEH1wT0ABaCaklQMGdHu1B2QYMJgoKdSwiLMuI5JoOlcad JthbSaH0caGJ4F7L
5qvQykeC7X6nlYBHJcjytrusVkWpb5Vo360URe7iLFLFFNRun5Szi5KIwckM U2luU/I3dd33fUWD
T+VCU2tqUNfk9bK7XFVtMjpXj5doB10X4k1B8ji6xzyWsLEq8WHhfrsZzI3X ZMgmzIFyXz2feRQ/
sCGQmHA9nzEwnFFojBG2FKKz8HM+O+FvpJ7YnC/TIjvdwenp+h8KpeRnif9h hUqHTL20hMnZDyoi
Ryzam8fCTgVDoLOjCIu/TBfHNos/FM/LQU7y21Rj+jyt38Ep97iaqDF0nibw LWeZM/zro7BsyzhT
vwFQSwMECgAAAAAA1YqTNAAAAAAAAAAAAAAAAAoAAABzcmMvdGFibGUvUEsD BBQAAAAIAFuPkzR8
IhIR/gMAACkMAAAYAAAAc3JjL3RhYmxlL1RhYmxlVGVzdC5qYXZhrVbfb9s2 EH5WgPwPBz/JqMEO
e/XyEDvKFsBzitjxBhRFQEvnhJ0sCqRsr2j9v+/Io2QpjtsBLmBQFvndD959 H6lSpv/IZ4RKLnMc
Xl5cXqh1qU0F2jwLTHNVWhSfVzJFoYoKTSFzkUlCqyJTxbMojd4qq7SbH9Hc rMR0eI6TG5of8fxY
E/jf6ix3GdrUqLKiN/HB6BJN9eWnOZy7ov2pM8xvDrNneddLi2br3Iq7++b/ WS63Mle05vK9u9Fr
qYoFz2jzs/wumr+JMee6VbhDY8WCn6FnCu33vNZGY8zzJFM/2FqN9u3jOP8L Tlz8UQC7q8Tsr/np
xZ3KnrGiTDWtW1Wd6G0bmmyxOCGCNmyibIXFqa20kfPTnDqCjXW+WZ/gdAfM Qm1wrr3CS2PYnftA
pfQiaaYDC25lSmX9Ikad1zaQG9Hg9KbIXD8oilqp9sa7wLEsUswfSwqPbepf XpSbZa5SSHNpLfjt
ztFW8PXyIqJfadSWTHgBnuoTsr1kK2J9CitFzIVZZSjvj58g9TX7A2VGe4Ur KHB3WHTOo95UrrE3
gN6MHGAP9j6dKOTTZBI3LIFSGmJBn805l+DZo2NeHwCRT9w+TiZPs2SSjOd3 99O+yzk6mAmLFee2
IM0528pskFEHxEQVaI8BK20gJg2Doui/DOnxG/xKj3fvQmpRkxIzJ2aXnNj0 fpr0nXfHlrhTpo/q
E0fY07APVW6VA4hl7CoOkQxWG1O0+vKGFYvbMyz2ZIS1G4OH46sGsmVKG+tS UKQGqUsBEjbU545F
3Pp2MCZfuzm80DKMIoojfFaMHhzAr6+T2K3UN1fs0x/4Qke90kvJ6Z6oxLoS nssDGGmdo6Qb6uEx
6bP3++VnTKuagWReBA7awEGH2+R5vbPW/QMWc7LFjIPQ3lz+XJYDqptp2BjH OjrMxexu+vskabG0
Dts9ZQH5EarZWQshBDGDNdD4eP8eXui7RggBG4sgIfP3Hmxr9UOlIfXHAlQv CBt3NlDDQa/8u69y
cLR7wQKoHbJEUBZKg9ZiJtxq/b0D1g2cYj0XB714erx5ArWyYdM3UcGPi+CE 8+oCjxsfDHMFAk/k
K4jdSz8U0BXJEdjoPHh0KCGzrL42YifQuZFb6hMyY5qlWttBWlutMipwkeXo 76bYj4DbwwkVRWoF
sZ+hL6ZKqhyurvwZMH+4XiQPs+TpIZk/PkwZHEXfvsF30fPr0dM0+Xve+I+a rQuZ53pHO3bH1JBX
9/7hx33NikZzb5SEN9yQt8t30ghrhX3zUf5aabfXk5mTmusUVzjQk7p24Kz1 Ijm8OzmGFrH6YH9k
7I/Jg3Ti7nVS53bKunVBesujazPIqBFPOFe39XeRqyL9/gNQSwMECgAAAAAA ioyTNAAAAAAAAAAA
AAAAABIAAABzcmMvdmlld2VyRmFjdG9yeS9QSwMEFAAAAAgA2YyTNP4wjXnm AQAAswQAACgAAABz
cmMvdmlld2VyRmFjdG9yeS9Cb3VuZENlbGxNb2RpZmllci5qYXZhjVLfa9sw EH52IP/DrRRq00bZ
XueFsXUdDLak0NCX0gfZvjjXKpInycnC2P8+2fJPmoeAkeTTd9/33ekKnr7y HGFPeED9nadW6WM8
nUwntCuUtqB0zjAVVBhkLxueIvNQw25RiLuMXEJ8BvpHBf+lMtoQnpWw5onA x/qn9lOUiaAUUsGN
ga+qlNmQERyfwB1Ka2AkBX+nk8B9haY9twgbklzAgLwpPW5gXuUNf/g2I6qp A9pA6AOwWIAshYiq
cGC3Wh1A4gGWLnavSFrUd39SLCwpGV6stwhXPvEKyNSZ7CKKYT6/XK6Ws+XP h9mHy6ryiosMa0UG
hv+Na+tfBHK0/hQ+WE0yh0KrArU9Dly3obFvjbbUsg7EXn1Ai35btNdBsEpe MLVPz60AoeksMufi
VolyJ++7yzCq0zaOJXQtAXLo97HbPg0YmECZ260LX183hkeOGf4uuTBhn/FE z1GLDDqXAxtdDc6B
A8cemWjkr/5c9dIvTQewne0q2o9GopRALiHlsh6OY+hbAOjn7wZOd7xh7R+m v3/X93Mk1RC7lEcu
SjxT6NRznVBtHndUbOsEPjcB1mlH8PG0yb2iDHZndeKmrWhfUTZ253NYr76t 4Etp1SxHidqNsmNE
u1UZGFsmFapVdct/UEsDBBQAAAAIAPaMkzR2DC9sBwEAACYCAAAsAAAAc3Jj L3ZpZXdlckZhY3Rv
cnkvQ2FuY2VsVXBkYXRlVmFsaWRhdG9yLmphdmGtULtuwzAMnG3A/8BmShb9 gNGpDyBTp2anFdpg
SksGJTsIivx7ZcXx4LmAQEnH091RA9of7AgmpivpJ9ro9VZXZVVyP3iN4LUz ZIWHQObSoiXDLpI6
FHPGiA27M7vODOonDuxnfELh1EsXc3z3PbI7PRCv9T/pntbjh2qWrcphbIQt WMEQ4A2dJfkeEolW
d0jeQj25GGCbDH6rskhrUWm8F0IHKOKv8AotSqBs82RsIgCHjOy/mgvZCCns SIesWmypSmGUmFTd
KFLPjKi3B7XgFvYv2XV5XBQrfaNjaK77nc2zpt+CMc9rjNkdsmxxn+sdWk7/ J0+L7UyZNm9KcVS3
xJsbGU/lD1BLAwQKAAAAAAB4iZM0AAAAAAAAAAAAAAAACgAAAHNyYy92aWV3 cy9QSwMEFAAAAAgA
ZI+TNKlnapilAwAA/AsAABMAAABzcmMvdmlld3MvVmlldy5qYXZhvVZRb9s2 EH52gf4HIugD3Tp0
8uzlobGTrZhrB7C3PQaUePa4yKJAUs6Cov99Rx4ly4mdtEgwP1AU+d3pu+/u SFcyv5NrYFsN9270
/t37d3pTGeuZsWsBeaErB+KflcxBZLpUulw7cUmT0U9gv8oSv2KfM9GlB1vK QijpZbIXlTVb7bQJ
6xNcT+7GBsH/+le5y0CWyA/HeebAbmVWwLXMvbEPr/KrwOVWVx7fxI01FVj/ dg6XgeVXo6CY7FZf
5X0VQ9ZAqVrUVXD0FjrsHE9gJevC/x/+EfQWvt29F4u/lm9bGKHFwDrxJz1T bWAAz3ltjGLiyfIw
PFE+vglbKD2KpV1lHFyFtx8FT7XzUD735YRfQAF5KMnPSlb+Zwxe4FPIB1N7 8avVKhwDPwScxulx
6L1Wa0AOl7X3x5qoixsb3Hfaw8vQoBsyeRkY03oYVmuxMnbjWuw1vi2NKe70 kaCeWCxya4oCVLA8
alJJ62NN3uCkewP4wI0YLsHtbYUSF/EYiqtVnRU6Z3khnWPBFcPDGUpFL8Ev +xZwvQR0Xnp8rDS2
BVt4i53CvkzYBTuJ11BkczIKeKu30kNj0FGA3Xqc/I6TC1biBztbPKkvUINx bS0WFu/3u+66urDb
FanT7rZ5Zrd5J+XtfqsIckjp29+jNk27qWd73fi3RiuWW0CLIE64zZAQ330Y c4Ks+0G1Xi8SxDCb
iAVZdoPgyWAU8S3rYBSMgxKXRj3w/qiHv32QcOCpVXgQctc5/HzAVrJwQOKR WYwpad4KwXfeCNr0
KVurhG1WOJ5R4vrLdDpgu5m3NTQjfvQ8xUEFiNxpxvs7qtHVWoV4WMDGYfgx jAevSOY3qsv68T6n
Tw6HnQTumW9Vq8HT/yFMZTl6p7yktb2U4H78SxQVbv4U8G6BDNiTa0GM57Pl 1WzZHwT2A1bWRdEf
fRwGh9Q6MQq2CeN5ii4u8V3CCNgty8zUpUrzi1SkRI4c9WNLo6WxjOOlxjTC zkb4+IUdSEloMlPU
m3KMfrHREPjpU6rcQyls8Vz38ezJ7xLZ7w1jOo5ZRg+KitY6ZUbVc/PH4jey JnSoj2XQ/uRKaX+C
XIbDD7P57HQ2XZyef+gApVLt1dPcbjE5j28w3oTSbV06XwkKiu9fYgwak15H agHI6KqATTiNSOgg
xQ1mnBiQNPwMs31GMZEk39tchtdHZwjGe23y2jUsh0O2nE/m7HPtzek6BIUF qdgG/N8G0b7OyBMO
6O0/UEsDBAoAAAAAAPhxjTQAAAAAAAAAAAAAAAAOAAAAc3JjL3dvcmtiZW5j aC9QSwMEFAAAAAgA
BHKNNBnWcgAHAgAAcgUAABwAAABzcmMvd29ya2JlbmNoL0FjdGl2YXRvci5q YXZhtVRha9swEP2c
QP7D0X1Jwur8gDBou2wjY4yytZ+LIp/tWxVJSHLaMfbfd7LsJHYbthUKCQmn e+/eO93JCnkvSoQH
4+43qGW1nIwnY9pa4wIYV2YoFVmP2Y9CSMwcelM7/rPeMmqFXjqywbjls5ia MqvqknR2ufHBCRlu
19dNoJ9vfElZ4cQWo4zsqta5wvdGB3wMjZ7FfD4ZwxxuKgRmoZ3gmiCV8B4k 5zmjPAQ+jOXOSYOi
AkH+lAojbjEZ23qjSLaQyz0FF0Cdc2SgD37FsqPFoinZsa5XHGuZfBCBfwrS QsH34EiXcP3l9tP6
6916Be/g7EZsFK5EEFekcz49Wx5T+ko4zIE082iJkddFTdgRHzTarmOjCI+d GLWtYOssu5ac1QQX
B3l7+HQWvYxGiYWFhYp8JPud5LR0U230+WexE7mRsxS68Ij/eJ1vWLQL07/d 5Wyocmcoh4TtJTaX
GgGs1pkHDx8eJdpARiczvrbosgTsUl/Bk7EvtsTQ/3K0vx5dK7U89shMz1ls PX7DUDudhv/pTEGb
deGatJNZR/qfjF+JYYWFqFXoRqklO8zlCU1CA8VnAvL9OwEFf6OKdFCQ4oUO TaSkHepE0O2bQ8Vi
dryAIlTHdqzg22iiaeu7457RYe0TTgcvWfQ7CE3b9Y5l+i2gfuJHZ7ZpeKb7 p+BtgrVt4s8fUEsD
BBQAAAAIAARyjTT8FkK/eAEAAPcCAAAeAAAAc3JjL3dvcmtiZW5jaC9BcHBs aWNhdGlvbi5qYXZh
lZJRT8IwFIWf119xEx/ciJYfQEwkygOaiJkz+mZKdxmF0jZtxyCE/24ZRTCQ GF/WZv16zrknNYzP
WYXQaDsfo+LTHiFiYbT1oG1FkUthHFKuLVJbKy8WSIevkvmJtou8VoqNJfYu XXGNp40oK/SOPgpn
JFtf5GpBD3rvw+De7XQIdKCYCgdcMhe+WnmrpQMmJTBnkHsHegJ+isCMkYIz L7S6doAr5PVuHxS6
xNTjcBZF+kcQQgqJC1RB5mwW2BCSdDuQKq1un9iSlZpnJAmJ7h3iP0q5Cifp LAhQyVRFR+NZyN0q
dUkSo+1/wo6MW2Yrl4XJrG4cDFYcTZt4Q5IklghlXO/g2BvlFpnHiKRZL/De rtt7iVDBAn1t1YMu
8dK9vipD7I/DG0ijxQ0obE6b+yH65VI4bdOsdUrEBNJTh18W+aB4z1++8sFb 0c+LbJ8p2ePn/dPB
57A4wK34lvyJj5535BYmQoU3EseOQ9Ddqh3uSwliW7Il31BLAwQUAAAACAAE co00D5JKTdsAAAAN
AgAALgAAAHNyYy93b3JrYmVuY2gvQXBwbGljYXRpb25BY3Rpb25CYXJBZHZp c29yLmphdmF9kbGO
gzAMhvc8hUduyQswcZ0YOnd2E8P5CEmUkFLp1HdvoLRFiJ6HxIr//7MVe1Qd tgSjC92ZrPopheDe
uzCAC60kZdhHkr8NKpKoBnZW1key6Yg2+0K5p04s69MTeGKr3fhJh94bVjhz qxn/jaHSF47uI3vt
qV+mg7MNtylMMwmfzlkCymCMUL312xZA14Gszppt4U8IyLGA/kEUeyOAeqVf GQVLxOQpFKtaOZdu
S6/gBlIDabg41tBjRw90LLbfCeN8Pdn7gIaNmVaVJyvWO4P+8fh2T6e4iTtQ SwMEFAAAAAgAYnKN
NEa3R3PRAAAABgIAAC4AAABzcmMvd29ya2JlbmNoL0FwcGxpY2F0aW9uV29y a2JlbmNoQWR2aXNv
ci5qYXZhlZCxTsNADIbn+Ck8luVeIFMFSzYkhs7Xi3tYDb6Tz2kqobw7oQ2h QJDA00m/v/+zLvtw
9JFwSHrck4TnGoBfclLDpNFR6DgXcj07n3PHwRsncc3uY33H0qbhPsmBY6+k 9R/oBd62Jy7pf8xV
uJCQ+/20hKHzpeD2k/guQTobSVvwR/AKgNPMResiDEreaD3c/P4dGJbn3STC eZSsV0GhYfXkr+03
FfWlYQSo5mufTFkiRrJG2Nh3V/SRtGQKxidq2s27uapm503kmocaqhFGeANQ SwMEFAAAAAgAVHKN
NOxEasA4AQAAuAMAADQAAABzcmMvd29ya2JlbmNoL0FwcGxpY2F0aW9uV29y a2JlbmNoV2luZG93
QWR2aXNvci5qYXZhlVLBasMwDL3nK0RPLgwT2G5lh3a7FAYbtNCz6qipqGcb 22nGRv99SdelWZas
nQ62sd570pPtUO0wJyit363JqO0kSfjVWR/B+lyS0uwCyVBGmXt0W1ZBvlg2 cdIHK1iic5oVRrZG
TlW9zdBPsz0H66/hzBvSgzUbzgtP1/FW3w5WbDJb/o/dITf9Jq5YVyBQGkOA 6ZnRTwB6i2SyAAPp
jySBKk6iF+XEsClQzXFcycIpQuHIi1ZuckwdftbtPAsoTxipey36nmKgrqdY eAOGyrarX4o9jdVr
u7m95Qycpy/Dz46MaBe6aiJwDznFLkCcatZxxspAcW44MuoFv5OoLRw/uLhL 0xu4TdPxIG+xrfWt
rhyKDepAfyIXEWMRntjQBfCSoyYxWuJaEzxixFnlhE0+aoZ2SD4BUEsDBBQA AAAIAExyjTQLZtVz
/QAAANgBAAAeAAAAc3JjL3dvcmtiZW5jaC9QZXJzcGVjdGl2ZS5qYXZhdZBN a8MwDIbP8a8QPaVQ
zHYOOwzaQqCHwkavQ3GUTNSNg62klNH/PqefPmwXCfS+evTRo9ljS3B0fl9R Z74LpfjQOy/gfKvJ
WO4D6YF1uY2+DZ7cIMW/FvKhJyM80hqNOH964kamY9C7GGOtHyrLBozFECDp gmi2dKBOAvxBgx+V
qezWHAQlpoY7tPAhnrsWyiW8wexxjE4QsyJ2eh5R6O7+opoj9t0Txp3u3NFx DSbWhMqOhdFer86T
D4C9pPm0UJZg4vSroluS1aOcz+Pw7KaEVNlx4MpS3qANdHE9jVjX07vyKehy uYBkAb1ZrT8X8Kpf
mkV6x4Q4q7P6BVBLAwQKAAAAAAA4jJM0AAAAAAAAAAAAAAAABAAAAHNyYy9Q SwECFAAKAAAAAABo
jpM0AAAAAAAAAAAAAAAAEwAAAAAAAAAAABAA/0EAAAAAc3JjL2JpbmRpbmdG YWN0b3J5L1BLAQIU
ABQAAAAIABuSkzQSjtqI9AEAADAHAAAmAAAAAAAAAAEAIAC2gTEAAABzcmMv YmluZGluZ0ZhY3Rv
cnkvQmluZGluZ0ZhY3RvcnkuamF2YVBLAQIUABQAAAAIAGiOkzSus2OTnQIA AGAFAAAmAAAAAAAA
AAEAIAC2gWkCAABzcmMvYmluZGluZ0ZhY3RvcnkvSURlbGV0ZUhhbmRsZXIu amF2YVBLAQIUABQA
AAAIAGiOkzQxSCVbYgIAAI8EAAAmAAAAAAAAAAEAIAC2gUoFAABzcmMvYmlu ZGluZ0ZhY3Rvcnkv
SUluc2VydEhhbmRsZXIuamF2YVBLAQIUAAoAAAAAADmOkzQAAAAAAAAAAAAA AAAJAAAAAAAAAAAA
EAD/QfAHAABzcmMvZGF0YS9QSwECFAAUAAAACAAakJM0KZxoMqkCAABQBwAA EwAAAAAAAAABACAA
toEXCAAAc3JjL2RhdGEvTW9kZWwuamF2YVBLAQIUABQAAAAIADmOkzSCUpoE kAEAAAQDAAAUAAAA
AAAAAAEAIAC2gfEKAABzcmMvZGF0YS9QZXJzb24uamF2YVBLAQIUAAoAAAAA ANWKkzQAAAAAAAAA
AAAAAAAKAAAAAAAAAAAAEAD/QbMMAABzcmMvdGFibGUvUEsBAhQAFAAAAAgA W4+TNHwiEhH+AwAA
KQwAABgAAAAAAAAAAQAgALaB2wwAAHNyYy90YWJsZS9UYWJsZVRlc3QuamF2 YVBLAQIUAAoAAAAA
AIqMkzQAAAAAAAAAAAAAAAASAAAAAAAAAAAAEAD/QQ8RAABzcmMvdmlld2Vy RmFjdG9yeS9QSwEC
FAAUAAAACADZjJM0/jCNeeYBAACzBAAAKAAAAAAAAAABACAAtoE/EQAAc3Jj L3ZpZXdlckZhY3Rv
cnkvQm91bmRDZWxsTW9kaWZpZXIuamF2YVBLAQIUABQAAAAIAPaMkzR2DC9s BwEAACYCAAAsAAAA
AAAAAAEAIAC2gWsTAABzcmMvdmlld2VyRmFjdG9yeS9DYW5jZWxVcGRhdGVW YWxpZGF0b3IuamF2
YVBLAQIUAAoAAAAAAHiJkzQAAAAAAAAAAAAAAAAKAAAAAAAAAAAAEAD/QbwU AABzcmMvdmlld3Mv
UEsBAhQAFAAAAAgAZI+TNKlnapilAwAA/AsAABMAAAAAAAAAAQAgALaB5BQA AHNyYy92aWV3cy9W
aWV3LmphdmFQSwECFAAKAAAAAAD4cY00AAAAAAAAAAAAAAAADgAAAAAAAAAA ABAA/0G6GAAAc3Jj
L3dvcmtiZW5jaC9QSwECFAAUAAAACAAEco00GdZyAAcCAAByBQAAHAAAAAAA AAABACAAtoHmGAAA
c3JjL3dvcmtiZW5jaC9BY3RpdmF0b3IuamF2YVBLAQIUABQAAAAIAARyjTT8 FkK/eAEAAPcCAAAe
AAAAAAAAAAEAIAC2gScbAABzcmMvd29ya2JlbmNoL0FwcGxpY2F0aW9uLmph dmFQSwECFAAUAAAA
CAAEco00D5JKTdsAAAANAgAALgAAAAAAAAABACAAtoHbHAAAc3JjL3dvcmti ZW5jaC9BcHBsaWNh
dGlvbkFjdGlvbkJhckFkdmlzb3IuamF2YVBLAQIUABQAAAAIAGJyjTRGt0dz 0QAAAAYCAAAuAAAA
AAAAAAEAIAC2gQIeAABzcmMvd29ya2JlbmNoL0FwcGxpY2F0aW9uV29ya2Jl bmNoQWR2aXNvci5q
YXZhUEsBAhQAFAAAAAgAVHKNNOxEasA4AQAAuAMAADQAAAAAAAAAAQAgALaB Hx8AAHNyYy93b3Jr
YmVuY2gvQXBwbGljYXRpb25Xb3JrYmVuY2hXaW5kb3dBZHZpc29yLmphdmFQ SwECFAAUAAAACABM
co00C2bVc/0AAADYAQAAHgAAAAAAAAABACAAtoGpIAAAc3JjL3dvcmtiZW5j aC9QZXJzcGVjdGl2
ZS5qYXZhUEsBAhQACgAAAAAAOIyTNAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAQ AP9B4iEAAHNyYy9Q
SwUGAAAAABYAFgBIBgAABCIAAAAA
------=_Part_279_26989848.1145464021138--
|
|
|
|
|
Re: DataBinding and tables [message #448285 is a reply to message #448266] |
Thu, 20 April 2006 14:28 |
Eclipse User |
|
|
|
Originally posted by: alexixlebaulois.yahoo.fr
Just another question. I'd like to put a checkbox in a cell and bind it with a boolean attribute in my model. How can I do that ?
|
|
|
|
Re: DataBinding and tables [message #448343 is a reply to message #448299] |
Fri, 21 April 2006 07:49 |
Eclipse User |
|
|
|
Originally posted by: alexixlebaulois.yahoo.fr
There is what I did :
<b>CheckboxCellEditor checkEditor = new CheckboxCellEditor(tableViewer);
dbc.bind(checkEditor.getControl(), new Property(selectedPerson, "work", boolean.class, Boolean.FALSE), spec);</b>
But I get an exception at method <b>bind</b> :
<b> org.eclipse.jface.internal.databinding.provisional.BindingEx ception: could not find updatable for null
at org.eclipse.jface.internal.databinding.provisional.DataBindi ngContext.doCreateObservable(DataBindingContext.java:444)
at org.eclipse.jface.internal.databinding.provisional.DataBindi ngContext.createObservable(DataBindingContext.java:383)
at org.eclipse.jface.internal.databinding.provisional.DataBindi ngContext.bind(DataBindingContext.java:321) </b>
|
|
|
|
Re: DataBinding and tables [message #462545 is a reply to message #448279] |
Tue, 30 January 2007 14:39 |
Eclipse User |
|
|
|
Originally posted by: isabelle.aye._nospam_laposte.net
This is a multi-part message in MIME format.
--------------060901050906030908090703
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
alexixlebaulois a
|
|
|
|
Powered by
FUDForum. Page generated in 0.25804 seconds