blob: 09ac248d34db7010f03a704dcc070b4c4675e13e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.rap.demo;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.*;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.views.properties.*;
public class DemoTreeViewPart extends ViewPart implements IDoubleClickListener {
private TreeViewer viewer;
private IPropertySheetPage propertyPage;
// TODO [rst] Add via extension
// private final class LeafStarLabelDecorator extends LabelProvider
// implements ILabelDecorator
// {
//
// public String decorateText( String text, Object element ) {
// if( text.startsWith( "Leaf" ) ) {
// return text + "*";
// }
// return text;
// }
//
// public Image decorateImage( Image image, Object element ) {
// return null;
// }
// }
private static final class ViewLabelProvider extends LabelProvider {
@Override
public Image getImage( Object element ) {
IWorkbench workbench = PlatformUI.getWorkbench();
ISharedImages sharedImages = workbench.getSharedImages();
return sharedImages.getImage( ISharedImages.IMG_OBJ_ELEMENT );
}
}
class TreeObject implements IPropertySource {
private static final String PROP_ID_LOCATION = "location";
private static final String PROP_ID_NAME = "name";
private String name;
private String location;
private TreeParent parent;
public TreeObject( String name ) {
this( name, "" );
}
public TreeObject( String name, String location ) {
this.name = name;
this.location = location;
}
public String getName() {
return name;
}
public String getLocation() {
return location;
}
public void setParent( TreeParent parent ) {
this.parent = parent;
}
public TreeParent getParent() {
return parent;
}
@Override
public String toString() {
return getName();
}
public Object getEditableValue() {
return this;
}
public IPropertyDescriptor[] getPropertyDescriptors() {
return new IPropertyDescriptor[] {
new TextPropertyDescriptor( PROP_ID_NAME, "Name" ),
new TextPropertyDescriptor( PROP_ID_LOCATION, "Location" ),
};
}
public Object getPropertyValue( Object id ) {
Object result = null;
if( PROP_ID_NAME.equals( id ) ) {
result = name;
} else if( PROP_ID_LOCATION.equals( id ) ) {
result = location;
}
return result;
}
public boolean isPropertySet( Object id ) {
boolean result = false;
if( PROP_ID_NAME.equals( id ) ) {
result = name != null && !"".equals( name );
} else if( PROP_ID_LOCATION.equals( id ) ) {
result = location != null && !"".equals( location );
}
return result;
}
public void resetPropertyValue( Object id ) {
if( PROP_ID_NAME.equals( id ) ) {
name = "";
} else if( PROP_ID_LOCATION.equals( id ) ) {
location = "";
}
}
public void setPropertyValue( Object id, Object value ) {
if( PROP_ID_NAME.equals( id ) ) {
name = ( String )value;
} else if( PROP_ID_LOCATION.equals( id ) ) {
location = ( String )value;
}
update( this );
}
}
/**
* Instances of this type are decorated with an error marker
*/
private class BrokenTreeObject extends TreeObject {
public BrokenTreeObject( String name ) {
super( name );
}
}
private class TreeParent extends TreeObject {
private final List<TreeObject> children;
public TreeParent( String name ) {
super( name );
children = new ArrayList<TreeObject>();
}
public void addChild( TreeObject child ) {
children.add( child );
child.setParent( this );
}
public TreeObject[] getChildren() {
TreeObject[] result = new TreeObject[ children.size() ];
children.toArray( result );
return result;
}
public boolean hasChildren() {
return children.size() > 0;
}
}
private final class TreeViewerContentProvider
implements IStructuredContentProvider, ITreeContentProvider
{
private TreeParent invisibleRoot;
public void inputChanged( Viewer v, Object oldInput, Object newInput ) {
}
public void dispose() {
}
public Object[] getElements( Object parent ) {
if( parent instanceof IViewPart ) {
if( invisibleRoot == null ) {
initialize();
}
return getChildren( invisibleRoot );
}
return getChildren( parent );
}
public Object getParent( Object child ) {
if( child instanceof TreeObject ) {
return ( ( TreeObject )child ).getParent();
}
return null;
}
public Object[] getChildren( Object parent ) {
if( parent instanceof TreeParent ) {
return ( ( TreeParent )parent ).getChildren();
}
return new Object[ 0 ];
}
public boolean hasChildren( Object parent ) {
if( parent instanceof TreeParent ) {
return ( ( TreeParent )parent ).hasChildren();
}
return false;
}
/*
* We will set up a dummy model to initialize tree heararchy. In a real
* code, you will connect to a real model and expose its hierarchy.
*/
private void initialize() {
TreeObject to1 = new TreeObject( "EclipseCon location",
"http://maps.google.com/maps?q=5001%20Great%20America%20Pkwy%20Santa%20Clara%20CA%2095054" );
TreeObject to2 = new TreeObject( "Eclipse Foundation",
"http://maps.google.com/maps?q=Ottawa" );
TreeObject to3 = new TreeObject( "Innoopract Inc",
"http://maps.google.com/maps?q=Portland" );
TreeParent p1 = new TreeParent( "Locate in browser view" );
p1.addChild( to1 );
p1.addChild( to2 );
p1.addChild( to3 );
TreeObject to4 = new BrokenTreeObject( "Leaf 4" );
TreeParent p2 = new TreeParent( "Parent 2" );
p2.addChild( to4 );
TreeParent root = new TreeParent( "Root" );
TreeParent p3 = new TreeParent( "Child X - filter me!" );
root.addChild( p1 );
root.addChild( p2 );
root.addChild( p3 );
invisibleRoot = new TreeParent( "" );
invisibleRoot.addChild( root );
}
}
@Override
public void createPartControl( Composite parent ) {
viewer = new TreeViewer( parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL );
viewer.setContentProvider( new TreeViewerContentProvider() );
ILabelDecorator labelDecorator
= PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
ILabelProvider labelProvider
= new DecoratingLabelProvider( new ViewLabelProvider(), labelDecorator );
viewer.setLabelProvider( labelProvider );
viewer.setInput( this );
viewer.addDoubleClickListener( this );
getSite().setSelectionProvider( viewer );
}
@Override
public Object getAdapter( Class adapter ) {
Object result = super.getAdapter( adapter );
if( adapter == IPropertySheetPage.class ) {
if( propertyPage == null ) {
propertyPage = new PropertySheetPage();
}
result = propertyPage;
}
return result;
}
@Override
public void setFocus() {
viewer.getTree().setFocus();
}
public void doubleClick( DoubleClickEvent event ) {
String msg = "You doubleclicked on " + event.getSelection().toString();
Shell shell = viewer.getTree().getShell();
MessageDialog.openInformation( shell, "Treeviewer", msg );
}
private void update( TreeObject treeObject ) {
getViewer().update( treeObject, null );
}
public TreeViewer getViewer() {
return viewer;
}
}