/*******************************************************************************
* Copyright (c) 2002, 2009 Innoopract Informationssysteme GmbH.
* 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.controls;
import java.text.MessageFormat;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.rwt.graphics.Graphics;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class TreeTab extends ExampleTab {
private final static int INITIAL_COLUMNS = 5;
private static final int INITIAL_ITEMS = 15;
private Tree tree;
private boolean showImages;
private final Image treeImage;
public TreeTab( final CTabFolder topFolder ) {
super( topFolder, "Tree" );
treeImage = Graphics.getImage( "resources/tree_item.gif",
getClass().getClassLoader() );
showImages = true;
}
protected void createStyleControls( final Composite parent ) {
createStyleButton( "BORDER", SWT.BORDER );
createStyleButton( "CHECK", SWT.CHECK );
createStyleButton( "MULTI", SWT.MULTI );
createStyleButton( "NO_SCROLL", SWT.NO_SCROLL );
createVisibilityButton();
createEnablementButton();
createImagesButton( parent );
createAddNodeButton( parent );
createDisposeNodeButton( parent );
createSelectAllButton( parent );
createDeselectAllButton( parent );
createSelectButton( parent );
createDeselectButton( parent );
createSetSelectionButton( parent );
createShowColumnControl();
createFgColorButton();
createBgColorButton();
createBgImageButton();
createFontChooser();
final Button itemFgButton
= createPropertyButton( "Custom foreground on 1st item", SWT.CHECK );
itemFgButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
TreeItem item = tree.getItem( 0 );
Display display = parent.getDisplay();
Color green = display.getSystemColor( SWT.COLOR_GREEN );
item.setForeground( itemFgButton.getSelection() ? green : null );
}
} );
final Button itemBgButton
= createPropertyButton( "Custom background on 1st item", SWT.CHECK );
itemBgButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
TreeItem item = tree.getItem( 0 );
Display display = parent.getDisplay();
Color red = display.getSystemColor( SWT.COLOR_DARK_RED );
item.setBackground( itemBgButton.getSelection() ? red : null );
}
} );
final Button itemGrayButton2 = createPropertyButton( "Gray out 2nd item",
SWT.CHECK );
itemGrayButton2.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
tree.getItem( 1 ).setGrayed( itemGrayButton2.getSelection() );
}
} );
Button columnsAlignmentButton
= createPropertyButton( "Change columns alignment", SWT.PUSH );
columnsAlignmentButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
TreeColumn col1 = tree.getColumn( 1 );
if( col1.getAlignment() == SWT.RIGHT ) {
col1.setAlignment( SWT.LEFT );
} else {
col1.setAlignment( SWT.RIGHT );
}
TreeColumn col2 = tree.getColumn( 2 );
if( col2.getAlignment() == SWT.CENTER ) {
col2.setAlignment( SWT.LEFT );
} else {
col2.setAlignment( SWT.CENTER );
}
}
} );
}
protected void createExampleControls( final Composite parent ) {
parent.setLayout( new GridLayout( 1, false ) );
int style = getStyle();
tree = new Tree( parent, style );
tree.setLayoutData( new GridData( GridData.FILL_BOTH ) );
for( int i = 0; i < INITIAL_COLUMNS; i++ ) {
TreeColumn col1 = new TreeColumn( tree, SWT.NONE );
col1.setText( "Col " + i );
col1.setWidth( 150 );
}
for( int i = 0; i < INITIAL_ITEMS; i++ ) {
TreeItem item = new TreeItem( tree, SWT.NONE );
for( int j = 0; j < INITIAL_COLUMNS; j++ ) {
item.setText( j, "Node_" + ( i + 1 ) + "." + j );
}
if( i % 2 == 0 ) {
TreeItem subitem = new TreeItem( item, SWT.NONE );
for( int j = 0; j < INITIAL_COLUMNS; j++ ) {
subitem.setText( j, "Subnode_" + ( i + 1 ) + "." + j );
}
}
}
if( showImages ) {
changeImage( tree, treeImage );
}
final Label lblTreeEvent = new Label( parent, SWT.NONE );
lblTreeEvent.setLayoutData( new GridData( 300, 22 ) );
Menu treeMenu = new Menu( tree );
MenuItem treeMenuItem = new MenuItem( treeMenu, SWT.PUSH );
treeMenuItem.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
TreeItem item = tree.getSelection()[ 0 ];
String itemText = "null";
if( item != null ) {
item.getText();
}
String message = "You requested a context menu for: " + itemText;
MessageDialog.openInformation( tree.getShell(),
"Information",
message );
}
} );
treeMenuItem.setText( "TreeContextMenuItem" );
tree.setMenu( treeMenu );
tree.addTreeListener( new TreeListener() {
public void treeCollapsed( final TreeEvent event ) {
Item item = ( Item )event.item;
lblTreeEvent.setText( "Collapsed: " + item.getText() );
}
public void treeExpanded( final TreeEvent event ) {
Item item = ( Item )event.item;
lblTreeEvent.setText( "Expanded: " + item.getText() );
}
} );
tree.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
String msg = "Selected: ";
TreeItem item = ( TreeItem )event.item;
if( ( getStyle() & SWT.CHECK ) != 0 ) {
msg += ( item.getChecked() ? "[x] " : "[ ] " );
}
msg += item.getText();
switch( event.detail ) {
case SWT.NONE:
msg += ", detail: SWT.NONE";
break;
case SWT.CHECK:
msg += ", detail: SWT.CHECK";
break;
}
lblTreeEvent.setText( msg );
}
public void widgetDefaultSelected( final SelectionEvent event ) {
String title = "Widget Default Selected";
Item item = ( Item )event.item;
String message = "Widget default selected on "
+ item.getText()
+ " received";
MessageDialog.openInformation( getShell(), title, message );
}
} );
tree.setSelection( tree.getItem( 0 ) );
tree.setHeaderVisible( true );
registerControl( tree );
}
private void createImagesButton( final Composite parent ) {
final Button button = new Button( parent, SWT.TOGGLE );
button.setText( "Show Images" );
button.setSelection( true );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
showImages = button.getSelection();
changeImage( tree, showImages ? treeImage : null );
}
} );
}
private void createAddNodeButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Add child item" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
if( tree.getSelectionCount() > 0 ) {
TreeItem selection = tree.getSelection()[ 0 ];
TreeItem treeItem = new TreeItem( selection, SWT.NONE );
Object[] args = new Object[] {
new Integer( selection.getItemCount() ),
selection.getText()
};
String text = MessageFormat.format( "SubItem {0} of {1}", args );
treeItem.setText( text );
treeItem.setChecked( true );
if( showImages ) {
treeItem.setImage( treeImage );
}
}
}
} );
}
private void createDisposeNodeButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Dispose Selected Item" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
if( tree.getSelectionCount() > 0 ) {
TreeItem selection = tree.getSelection()[ 0 ];
selection.dispose();
}
}
} );
}
private void createSelectAllButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Select All" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
tree.selectAll();
}
} );
}
private void createDeselectAllButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Deselect All" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
tree.deselectAll();
}
} );
}
private void createSelectButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Select second node" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
if( tree.getItemCount() > 1 ) {
tree.select( tree.getItem( 1 ) );
}
}
} );
}
private void createDeselectButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Deselect second node" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
if( tree.getItemCount() > 1 ) {
tree.deselect( tree.getItem( 1 ) );
}
}
} );
}
private void createSetSelectionButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Set selection to first node" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
if( tree.getItemCount() > 0 ) {
tree.setSelection( tree.getItem( 0 ) );
}
}
} );
}
private void createShowColumnControl() {
Composite composite = new Composite( styleComp, SWT.NONE );
RowLayout layout = new RowLayout( SWT.HORIZONTAL );
layout.center = true;
composite.setLayout( layout );
Label label = new Label( composite, SWT.NONE );
label.setText( "Column" );
final Text text = new Text( composite, SWT.BORDER );
Util.textSizeAdjustment( label, text );
text.setText( String.valueOf( tree.getColumnCount() - 1 ) );
Button button = new Button( composite, SWT.PUSH );
button.setText( "Show" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
try {
int index = Integer.parseInt( text.getText() );
TreeColumn column = tree.getColumn( index );
tree.showColumn( column );
} catch( Exception e ) {
// ignore invalid column
}
}
} );
}
private static void changeImage( final Tree tree, final Image image ) {
TreeItem[] items = tree.getItems();
for( int i = 0; i < items.length; i++ ) {
changeImage( items[ i ], image );
}
}
private static void changeImage( final TreeItem item, final Image image ) {
item.setImage( image );
TreeItem[] items = item.getItems();
for( int i = 0; i < items.length; i++ ) {
changeImage( items[ i ], image );
}
}
}