com.eclipsesource.rowtemplate.demo.RowTemplateDemo.java Source code

Java tutorial

Introduction

Here is the source code for com.eclipsesource.rowtemplate.demo.RowTemplateDemo.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 com.eclipsesource.rowtemplate.demo;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ITreeContentProvider;
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.Viewer;
import org.eclipse.jface.viewers.ViewerColumn;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.application.AbstractEntryPoint;
import org.eclipse.rap.rwt.client.service.UrlLauncher;
import org.eclipse.rap.rwt.template.Template;
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.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.TableItem;

import com.eclipsesource.rowtemplate.demo.templates.ExampleTemplate;
import com.eclipsesource.rowtemplate.demo.templates.ImageAlignmentTemplate;
import com.eclipsesource.rowtemplate.demo.templates.ImageFillTemplate;
import com.eclipsesource.rowtemplate.demo.templates.ImageFitTemplate;
import com.eclipsesource.rowtemplate.demo.templates.PercentageTemplate;
import com.eclipsesource.rowtemplate.demo.templates.PrettyTemplate;
import com.eclipsesource.rowtemplate.demo.templates.TextAlignmentTemplate;
import com.eclipsesource.rowtemplate.demo.templates.TextWrapTemplate;

public class RowTemplateDemo extends AbstractEntryPoint {

    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 + "!");
            } else if ("like".equals(e.text)) {
                TableItem item = (TableItem) e.item;
                String firstName = item.getText(0);
                alert("I Like You", "Liking " + firstName + " on FB!");
            } else if ("firstname".equals(e.text)) {
                System.out.println("Clicking 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);
        }
    }

    private Control exampleControl;
    private Listener createGrid;
    private Combo templateCombo;
    private Combo controlCombo;
    private Button fullSelection;
    private Button headerVisible;
    private Button markup;
    private Integer[] templateHeights;
    private Template[] templates;

    @Override
    protected void createContents(final Composite parent) {
        createGrid = new Listener() {
            @Override
            public void handleEvent(Event event) {
                createGrid(parent);
                parent.layout();
            }
        };
        GridLayout layout = new GridLayout(1, true);
        layout.marginLeft = 0;
        layout.marginTop = 0;
        layout.marginRight = 0;
        layout.marginBottom = 0;
        layout.horizontalSpacing = 0;
        layout.verticalSpacing = 0;
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        parent.setLayout(layout);
        Label label = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
        label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        createConfigArea(parent);
        createGrid(parent);
    }

    private void createConfigArea(Composite parent) {
        Composite area = new Composite(parent, SWT.NONE);
        area.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        area.setLayout(new RowLayout());
        templateCombo = new Combo(area, SWT.READ_ONLY);
        templateCombo.setItems(new String[] { "no template", "ExampleTemplate", "PrettyTemplate",
                "TextAlignmentTempalte", "TextWrapTempalte", "ImageAlignmentTempalte", "ImageFitTempalte",
                "ImageFillTempalte", "PercentageTempalte" });
        Font defaultFont = parent.getFont();
        templates = new Template[] { null, new ExampleTemplate(defaultFont), new PrettyTemplate(defaultFont),
                new TextAlignmentTemplate(), new TextWrapTemplate(), new ImageAlignmentTemplate(),
                new ImageFitTemplate(), new ImageFillTemplate(), new PercentageTemplate() };
        templateHeights = new Integer[] { null, Integer.valueOf(92), Integer.valueOf(56), Integer.valueOf(60),
                Integer.valueOf(100), Integer.valueOf(74), Integer.valueOf(78), Integer.valueOf(78),
                Integer.valueOf(100) };
        templateCombo.select(2);
        controlCombo = new Combo(area, SWT.READ_ONLY);
        controlCombo.setItems(new String[] { "Table", "Tree" });
        controlCombo.select(0);
        fullSelection = new Button(area, SWT.CHECK);
        fullSelection.setText("FULL_SELECTION");
        markup = new Button(area, SWT.CHECK);
        markup.setText("MARKUP_ENABLED");
        headerVisible = new Button(area, SWT.CHECK);
        headerVisible.setText("header");
        templateCombo.addListener(SWT.Selection, createGrid);
        controlCombo.addListener(SWT.Selection, createGrid);
        fullSelection.addListener(SWT.Selection, createGrid);
        headerVisible.addListener(SWT.Selection, createGrid);
        markup.addListener(SWT.Selection, createGrid);
    }

    private void createGrid(Composite parent) {
        if (exampleControl != null) {
            exampleControl.dispose();
        }
        switch (controlCombo.getSelectionIndex()) {
        case 0:
            createTable(parent);
            break;
        case 1:
            createTree(parent);
            break;
        }
        exampleControl.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        exampleControl.setData(RWT.MARKUP_ENABLED, Boolean.valueOf(markup.getSelection()));
        int tempalteIndex = templateCombo.getSelectionIndex();
        exampleControl.setData(RWT.ROW_TEMPLATE, templates[tempalteIndex]);
        exampleControl.setData(RWT.CUSTOM_ITEM_HEIGHT, templateHeights[tempalteIndex]);
        exampleControl.moveAbove(null);
    }

    private void createTable(Composite parent) {
        TableViewer tableViewer = new TableViewer(parent, getStyle());
        exampleControl = tableViewer.getTable();
        tableViewer.setContentProvider(new ArrayContentProvider());
        configColumnViewer(tableViewer);
        tableViewer.getTable().setHeaderVisible(headerVisible.getSelection());
        tableViewer.getTable().setLinesVisible(headerVisible.getSelection());
        tableViewer.getTable().addSelectionListener(new SelectionListener(parent));
    }

    private void createTree(Composite parent) {
        TreeViewer treeViewer = new TreeViewer(parent, getStyle());
        exampleControl = treeViewer.getTree();
        treeViewer.setContentProvider(new ITreeContentProvider() {
            @Override
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            @Override
            public void dispose() {
            }

            @Override
            public boolean hasChildren(Object element) {
                return ((Person) element).getChildren() != null;
            }

            @Override
            public Object getParent(Object element) {
                return null;
            }

            @Override
            public Object[] getElements(Object inputElement) {
                return (Person[]) inputElement;
            }

            @Override
            public Object[] getChildren(Object parentElement) {
                return ((Person) parentElement).getChildren();
            }
        });
        configColumnViewer(treeViewer);
        treeViewer.getTree().addSelectionListener(new SelectionListener(parent));
        treeViewer.getTree().setHeaderVisible(headerVisible.getSelection());
        treeViewer.getTree().setLinesVisible(headerVisible.getSelection());
    }

    private int getStyle() {
        int style = fullSelection.getSelection() ? SWT.FULL_SELECTION : SWT.NONE;
        return style;
    }

    private void configColumnViewer(ColumnViewer viewer) {
        addFirstNameColumn(viewer);
        addLastNameColumn(viewer);
        addPhoneColumn(viewer);
        addMailColumn(viewer);
        addFooColumn(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();
            }

            @Override
            public Color getForeground(Object element) {
                String firstName = ((Person) element).getFirstName();
                if (firstName != null && firstName.length() > 0 && firstName.charAt(0) % 2 == 0) {
                    return controlCombo.getDisplay().getSystemColor(SWT.COLOR_GRAY);
                }
                return null;
            }

            @Override
            public Color getBackground(Object element) {
                String firstName = ((Person) element).getFirstName();
                if (firstName != null && firstName.length() > 0 && firstName.charAt(0) % 2 == 0) {
                    return controlCombo.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY);
                }
                return null;
            }
        });
    }

    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 void addFooColumn(ColumnViewer viewer) {
        ViewerColumn fooColumn = createViewerColumn(viewer, "Foo", 200);
        fooColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return "foo";
            }
        });
    }

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

}