org.eclipse.rap.examples.pages.RowTemplateExample.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.rap.examples.pages.RowTemplateExample.java

Source

/*******************************************************************************
 * Copyright (c) 2013 EclipseSource and others.
 * 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:
 *    EclipseSource - initial API and implementation
 ******************************************************************************/
package org.eclipse.rap.examples.pages;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.ViewerColumn;
import org.eclipse.rap.examples.ExampleUtil;
import org.eclipse.rap.examples.IExamplePage;
import org.eclipse.rap.examples.pages.internal.Person;
import org.eclipse.rap.examples.pages.internal.Persons;
import org.eclipse.rap.examples.pages.internal.PersonsTemplate;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.client.service.UrlLauncher;
import org.eclipse.rap.rwt.widgets.DialogUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;

public class RowTemplateExample implements IExamplePage {

    private final class SelectionListener extends SelectionAdapter {

        private final Composite parent;

        private SelectionListener(Composite parent) {
            this.parent = parent;
        }

        @Override
        public void widgetSelected(SelectionEvent e) {
            if ("phone".equals(e.text)) {
                TableItem item = (TableItem) e.item;
                alert("Dialing...", "Calling " + item.getText(2) + "!");
            } else if ("mail".equals(e.text)) {
                String mail = ((TableItem) e.item).getText(3);
                String firstName = ((TableItem) e.item).getText(0);
                UrlLauncher launcher = RWT.getClient().getService(UrlLauncher.class);
                if (launcher != null) {
                    launcher.openURL("mailto:" + mail + "?subject=RAP%20Rocks!&body=Hello%20" + firstName);
                } else {
                    alert("Now mailing to...", mail);
                }
            } else if ("arrow".equals(e.text)) {
                TableItem item = (TableItem) e.item;
                String firstName = item.getText(0);
                alert("Nothing here", "Lets edit " + firstName + "!");
            }
        }

        private void alert(String title, String message) {
            MessageBox messageBox = new MessageBox(parent.getShell(), SWT.ICON_INFORMATION);
            messageBox.setText(title);
            messageBox.setMessage(message);
            DialogUtil.open(messageBox, null);
        }
    }

    public void createControl(Composite parent) {
        parent.setLayout(ExampleUtil.createMainLayout(1));
        parent.setLayout(ExampleUtil.createGridLayout(1, true, true, true));
        parent.setLayoutData(ExampleUtil.createFillData());
        createTable(parent);
    }

    private void createTable(Composite comp) {
        TableViewer tableViewer = new TableViewer(comp, SWT.FULL_SELECTION | SWT.BORDER);
        tableViewer.setContentProvider(new ArrayContentProvider());
        configColumnViewer(tableViewer);
        Table table = tableViewer.getTable();
        table.addSelectionListener(new SelectionListener(comp));
        table.setData(RWT.CUSTOM_ITEM_HEIGHT, Integer.valueOf(56));
        GridData tableLayoutData = ExampleUtil.createFillData();
        tableLayoutData.verticalIndent = 10;
        table.setLayoutData(tableLayoutData);
        table.setData(RWT.ROW_TEMPLATE, new PersonsTemplate());
    }

    private void configColumnViewer(TableViewer viewer) {
        addFirstNameColumn(viewer);
        addLastNameColumn(viewer);
        addPhoneColumn(viewer);
        addMailColumn(viewer);
        viewer.setInput(Persons.get(viewer.getControl().getDisplay()));
    }

    private void addFirstNameColumn(final ColumnViewer viewer) {
        ViewerColumn firstNameColumn = createViewerColumn(viewer, "First Name", 200);
        firstNameColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                Person p = (Person) element;
                return p.getFirstName();
            }

            @Override
            public Image getImage(Object element) {
                Person p = (Person) element;
                return p.getImage();
            }
        });
    }

    private void addLastNameColumn(ColumnViewer viewer) {
        ViewerColumn lastNameColumn = createViewerColumn(viewer, "Last Name", 200);
        lastNameColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                Person p = (Person) element;
                return p.getLastName();
            }
        });
    }

    private void addPhoneColumn(ColumnViewer viewer) {
        ViewerColumn pohoneColumn = createViewerColumn(viewer, "Phone", 130);
        pohoneColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                Person p = (Person) element;
                return p.getPhone();
            }
        });
    }

    private void addMailColumn(ColumnViewer viewer) {
        ViewerColumn pohoneColumn = createViewerColumn(viewer, "E-Mail", 180);
        pohoneColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                Person p = (Person) element;
                return p.getMail();
            }
        });
    }

    private ViewerColumn createViewerColumn(final ColumnViewer viewer, String name, int width) {
        ViewerColumn viewerColumn = null;
        if (viewer instanceof TableViewer) {
            TableViewer tableViewer = (TableViewer) viewer;
            TableViewerColumn tableColumn = new TableViewerColumn(tableViewer, SWT.NONE);
            tableColumn.getColumn().setWidth(width);
            tableColumn.getColumn().setText(name);
            viewerColumn = tableColumn;
        } else if (viewer instanceof TreeViewer) {
            TreeViewer treeViewer = (TreeViewer) viewer;
            TreeViewerColumn treeColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
            treeColumn.getColumn().setWidth(width);
            treeColumn.getColumn().setText(name);
            viewerColumn = treeColumn;
        }
        return viewerColumn;
    }

}