org.ripla.rap.demo.widgets.views.TreeWidgetsView.java Source code

Java tutorial

Introduction

Here is the source code for org.ripla.rap.demo.widgets.views.TreeWidgetsView.java

Source

/*******************************************************************************
 * Copyright (c) 2013 RelationWare, Benno Luthiger
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * RelationWare, Benno Luthiger
 ******************************************************************************/

package org.ripla.rap.demo.widgets.views;

import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.ripla.interfaces.IMessages;
import org.ripla.rap.demo.widgets.Activator;
import org.ripla.rap.demo.widgets.data.CountryBean;
import org.ripla.rap.demo.widgets.data.CountryTree.TreeObject;
import org.ripla.rap.util.AbstractRiplaView;
import org.ripla.rap.util.GridLayoutHelper;
import org.ripla.rap.util.LabelHelper;
import org.ripla.rap.util.Popup;
import org.ripla.rap.util.Popup.PopupButtons;

/**
 * The view to display the RAP tree widgets.
 * 
 * @author Luthiger
 */
@SuppressWarnings("serial")
public class TreeWidgetsView extends AbstractRiplaView {
    private static final IMessages MESSAGES = Activator.getMessages();

    /**
     * TreeWidgetsView constructor.
     * 
     * @param inParent
     *            {@link Composite}
     * @param inTree
     *            {@link TreeObject}
     */
    public TreeWidgetsView(final Composite inParent, final TreeObject inTree) {
        super(inParent);
        createTitle(MESSAGES.getMessage("widgets.title.page.tree"));

        LabelHelper.createLabel(this, MESSAGES.getMessage("widgets.view.tree.title"), "ripla-font");

        final TreeViewer lViewer = new TreeViewer(this, SWT.V_SCROLL | SWT.H_SCROLL);
        final Tree lTree = lViewer.getTree();
        lTree.setLayout(GridLayoutHelper.createGridLayout());
        lTree.setData(RWT.CUSTOM_VARIANT, "ripla-font");
        final GridData lLayoutData = GridLayoutHelper.createFillLayoutData();
        lLayoutData.heightHint = 430;
        lTree.setLayoutData(lLayoutData);

        lViewer.setContentProvider(new CountryTreeContentProvider());
        lViewer.setLabelProvider(new CellLabelProvider() {
            @Override
            public void update(final ViewerCell inCell) {
                final TreeObject lCountry = (TreeObject) inCell.getElement();
                inCell.setText(lCountry.getLabel());
            }
        });
        lViewer.expandAll();
        lViewer.setInput(inTree);
        lViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(final SelectionChangedEvent inEvent) {
                final TreeObject lTreeObject = (TreeObject) ((IStructuredSelection) inEvent.getSelection())
                        .getFirstElement();
                if (lTreeObject.hasChildren()) {
                    if (lViewer.getExpandedState(lTreeObject)) {
                        lViewer.collapseToLevel(lTreeObject, AbstractTreeViewer.ALL_LEVELS);
                    } else {
                        lViewer.expandToLevel(lTreeObject, 1);
                    }
                } else {
                    popup(lTreeObject.getCountry());
                }
            }
        });

        lTree.forceFocus();
        lTree.select(lTree.getItem(0));
    }

    private void popup(final CountryBean inCountry) {
        final Popup lPopup = new Popup(getShell(), MESSAGES.getMessage("widgets.table.popup.title"),
                inCountry.toHtml(), Popup.DFT_WIDTH, 500);
        lPopup.setButtons(PopupButtons.CANCEL);
        lPopup.open();
    }

    // ---

    private static class CountryTreeContentProvider implements ITreeContentProvider {

        @Override
        public Object[] getElements(final Object inParent) {
            return getChildren(inParent);
        }

        @Override
        public Object[] getChildren(final Object inParent) {
            if (inParent instanceof TreeObject) {
                return ((TreeObject) inParent).getChidren();
            }
            return new Object[0];
        }

        @Override
        public Object getParent(final Object inChild) {
            if (inChild instanceof TreeObject) {
                return ((TreeObject) inChild).getParent();
            }
            return null;
        }

        @Override
        public boolean hasChildren(final Object inParent) {
            if (inParent instanceof TreeObject) {
                return ((TreeObject) inParent).hasChildren();
            }
            return false;
        }

        @Override
        public void inputChanged(final Viewer inViewer, final Object inOldInput, final Object inNewInput) {
            // nothing to do
        }

        @Override
        public void dispose() {
            // nothing to do
        }
    }

}