- thanks to Dirk for providing this example -
package net.sf.rcpforms.examples.complete.formparts; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import net.sf.rcpforms.bindingvalidation.ValidationManager; import net.sf.rcpforms.bindingvalidation.forms.RCPFormFactory; import net.sf.rcpforms.bindingvalidation.forms.RCPFormPart; import net.sf.rcpforms.common.util.Validate; import net.sf.rcpforms.examples.complete.models.TestModel; import net.sf.rcpforms.tablesupport.tables.ColumnConfiguration; import net.sf.rcpforms.tablesupport.tables.RCPTreeTableData; import net.sf.rcpforms.tablesupport.tables.TableUtil; import net.sf.rcpforms.widgetwrapper.builder.GridBuilder; import net.sf.rcpforms.widgetwrapper.wrapper.EControlState; import net.sf.rcpforms.widgetwrapper.wrapper.RCPSimpleTree; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.widgets.FormToolkit; public class TreeTablePart extends RCPFormPart { @Override public void createUI(FormToolkit toolkit, Composite parent) { GridBuilder formPartBuilder = new GridBuilder(toolkit, parent, 1); createTreeTableViewer(formPartBuilder); } @Override public void bind(ValidationManager bm, Object modelBean) { // TODO Auto-generated method stub } @Override public void setState(EControlState state, boolean value) { // TODO Auto-generated method stub } private void createTreeTableViewer(final GridBuilder sf) { RCPSimpleTree treeTable = new RCPSimpleTree(); RCPTreeTableData tableData = new RCPTreeTableData(); tableData.columnConfigurations = new ColumnConfiguration[]{ new ColumnConfiguration("Name", TestModel.P_Name, 100, SWT.LEFT), new ColumnConfiguration("Birthdate", TestModel.P_Age, 70, SWT.LEFT),}; GridData gridData = new GridData(SWT.FILL, SWT.FILL,true,true); sf.add(treeTable,gridData); TreeViewer treeViewer = TableUtil.configureTreeTableViewer((TreeViewer) treeTable .getViewer(), TestModel.class, tableData, new ITreeContentProvider() { public Object[] getChildren(Object parentElement) { // create children (only as example) return new TestModel[]{new TestModel("Alice", 16), new TestModel("Bob", 12), new TestModel("Charlie", 10)}; } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { Validate.isTrue(element instanceof TestModel); TestModel model = (TestModel) element; return model.getName().startsWith("Dad") || model.getName().startsWith("Mum"); } public Object[] getElements(Object inputElement) { return ((WritableList) inputElement).toArray(); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); // create list WritableList list = new WritableList(); list.add(new TestModel("Dad", 50)); list.add(new TestModel("Mum", 50)); treeViewer.setInput(list); } public static void main(String[] args) { final TestModel model = new TestModel(); final RCPFormPart part = new TreeTablePart(); model.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { System.out.println("Model changed: " + model); } }); RCPFormFactory.getInstance().startTestShell("TreeTablePart", part, model); } }