package de.eiswind.paris.client.core.databinding; import org.eclipse.core.databinding.observable.set.IObservableSet; import org.eclipse.core.databinding.observable.set.ISetChangeListener; import org.eclipse.core.databinding.observable.set.SetChangeEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.TableItem; public class TableViewerCheckBoxBinding implements ISetChangeListener { private IObservableSet checked; private TableViewer tableViewer; public TableViewerCheckBoxBinding(TableViewer viewer, IObservableSet checked) { this.tableViewer = viewer; this.checked = checked; setCheckedItems(); viewer.getTable().addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { if (e.detail == SWT.CHECK) { handleCheckEvent(e); } } }); checked.addSetChangeListener(this); } @Override public void handleSetChange(SetChangeEvent event) { setCheckedItems(); } private void setCheckedItems() { TableItem[] items = tableViewer.getTable().getItems(); for (int i = 0; i < items.length; i++) { items[i].setChecked(checked.contains(items[i].getData())); } } private void handleCheckEvent(Event e) { TableItem item = (TableItem) e.item; Object check = item.getData(); if (item.getChecked() == true) { checked.add(check); } else { checked.remove(check); } } }