Menu

HowtoUseTreeTable

Remo

How to use a Tree Table

Snippet to create a Tree Table

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

}

Related

Documentation: ManualHowtos

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.