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