/******************************************************************************* | |
* Copyright (c) 2009 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 java.util.ArrayList; | |
import java.util.List; | |
import org.eclipse.jface.viewers.*; | |
import org.eclipse.rap.examples.IExamplePage; | |
import org.eclipse.rwt.graphics.Graphics; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.graphics.Image; | |
import org.eclipse.swt.layout.GridData; | |
import org.eclipse.swt.layout.GridLayout; | |
import org.eclipse.swt.widgets.*; | |
public class TreeViewerExample implements IExamplePage { | |
public void createControl( final Composite parent ) { | |
parent.setLayout( ExampleUtil.createGridLayout( 1, false, 10, 20 ) ); | |
Composite composite = new Composite( parent, SWT.NONE ); | |
composite.setLayout( new GridLayout() ); | |
composite.setLayoutData( new GridData( SWT.FILL, SWT.TOP, true, false ) ); | |
final Tree tree = new Tree( composite, SWT.BORDER ); | |
GridData layoutData = new GridData( GridData.FILL_BOTH ); | |
layoutData.minimumHeight = 250; | |
tree.setLayoutData( layoutData ); | |
TreeColumn column1 = new TreeColumn( tree, SWT.LEFT ); | |
column1.setText( "City" ); | |
column1.setWidth( 175 ); | |
TreeColumn column2 = new TreeColumn( tree, SWT.CENTER ); | |
column2.setText( "Timezone" ); | |
column2.setWidth( 75 ); | |
TreeColumn column3 = new TreeColumn( tree, SWT.CENTER ); | |
column3.setText( "Offset" ); | |
column3.setWidth( 75 ); | |
tree.setLinesVisible( true ); | |
tree.setHeaderVisible( true ); | |
TreeViewer viewer = new TreeViewer( tree ); | |
viewer.setContentProvider( new ExampleContentProvider() ); | |
viewer.setLabelProvider( new ExampleLabelProvider() ); | |
viewer.setInput( createDummyModel() ); | |
viewer.expandAll(); | |
} | |
private static TreeObject createDummyModel() { | |
TreeObject result = new TreeObject( "" ); | |
TreeObject asia = new TreeObject( "Asia" ); | |
result.addChild( asia ); | |
asia.addChild( new City( "Hong Kong", "HKT", +8 ) ); | |
asia.addChild( new City( "Tokyo", "JST", +9 ) ); | |
TreeObject europe = new TreeObject( "Europe" ); | |
result.addChild( europe ); | |
europe.addChild( new City( "Lisbon", "WET", 0 ) ); | |
europe.addChild( new City( "Berlin", "CET", +1 ) ); | |
europe.addChild( new City( "Sofia", "EET", +2 ) ); | |
europe.addChild( new City( "Moscow", "MT", +3 ) ); | |
TreeObject northAmerica = new TreeObject( "North America" ); | |
result.addChild( northAmerica ); | |
northAmerica.addChild( new City( "New York", "EST", -5 ) ); | |
northAmerica.addChild( new City( "Chicago", "CST", -6 ) ); | |
northAmerica.addChild( new City( "Los Angeles", "PST", -8 ) ); | |
northAmerica.addChild( new City( "Anchorage, Alaska", "AKST", -9 ) ); | |
return result; | |
} | |
static class TreeObject { | |
private TreeObject parent; | |
private final List children; | |
public final String name; | |
public TreeObject( final String name ) { | |
this.name = name; | |
children = new ArrayList(); | |
} | |
public void setParent( final TreeObject parent ) { | |
this.parent = parent; | |
} | |
public TreeObject getParent() { | |
return parent; | |
} | |
public void addChild( final TreeObject child ) { | |
children.add( child ); | |
child.setParent( this ); | |
} | |
public void removeChild( final TreeObject child ) { | |
children.remove( child ); | |
child.setParent( null ); | |
} | |
public TreeObject[] getChildren() { | |
TreeObject[] result = new TreeObject[ children.size() ]; | |
children.toArray( result ); | |
return result; | |
} | |
public boolean hasChildren() { | |
return children.size() > 0; | |
} | |
public String toString() { | |
return name; | |
} | |
} | |
static class City extends TreeObject { | |
public final String tz; | |
public final int offset; | |
public City( final String name, final String tz, final int offset ) { | |
super( name ); | |
this.tz = tz; | |
this.offset = offset; | |
} | |
} | |
static final class ExampleLabelProvider extends CellLabelProvider { | |
Image image1 = Graphics.getImage( "resources/world.gif", | |
getClass().getClassLoader() ); | |
Image image2 = Graphics.getImage( "resources/greendot.gif", | |
getClass().getClassLoader() ); | |
public void update( final ViewerCell cell ) { | |
TreeObject object = ( TreeObject )cell.getElement(); | |
int columnIndex = cell.getColumnIndex(); | |
switch( columnIndex ) { | |
case 0: | |
cell.setText( object.name ); | |
cell.setImage( object.hasChildren() ? image1 : image2 ); | |
break; | |
case 1: | |
if( object instanceof City ) { | |
City city = ( City )object; | |
cell.setText( city.tz ); | |
} | |
break; | |
case 2: | |
if( object instanceof City ) { | |
City city = ( City )object; | |
cell.setText( "UTC " | |
+ ( city.offset >= 0 ? "-" : "" ) | |
+ String.valueOf( city.offset ) ); | |
} | |
break; | |
} | |
} | |
} | |
static class ExampleContentProvider | |
implements IStructuredContentProvider, ITreeContentProvider | |
{ | |
public void inputChanged( final Viewer v, | |
final Object oldInput, | |
final Object newInput ) | |
{ | |
// TODO | |
} | |
public void dispose() { | |
// TODO | |
} | |
public Object[] getElements( final Object parent ) { | |
return getChildren( parent ); | |
} | |
public Object getParent( final Object child ) { | |
if( child instanceof City ) { | |
return ( ( City )child ).getParent(); | |
} | |
return null; | |
} | |
public Object[] getChildren( final Object parent ) { | |
if( parent instanceof TreeObject ) { | |
return ( ( TreeObject )parent ).getChildren(); | |
} | |
return new Object[ 0 ]; | |
} | |
public boolean hasChildren( final Object parent ) { | |
if( parent instanceof TreeObject ) { | |
return ( ( TreeObject )parent ).hasChildren(); | |
} | |
return false; | |
} | |
} | |
} |