- 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);
}
}