/*******************************************************************************
* Copyright (c) 2002, 2010 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 org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class ComboTab extends ExampleTab {
private static final String PROP_SELECTION_LISTENER = "selectionListener";
private static final String[] ITEMS = new String[] {
"Eiffel",
"Java",
"Python",
"Ruby",
"Simula",
"Smalltalk"
};
private Combo firstCombo;
private Combo verifyCombo;
private Combo viewerCombo;
private CCombo cCombo;
private Button createEmptyComboButton;
private Button preselectFirstItemButton;
private boolean empty;
private boolean preselectItem;
public ComboTab( final CTabFolder topFolder ) {
super( topFolder, "Combo" );
}
protected void createStyleControls( final Composite parent ) {
createStyleButton( "BORDER", SWT.BORDER );
createStyleButton( "READ_ONLY", SWT.READ_ONLY );
createStyleButton( "FLAT", SWT.FLAT );
createVisibilityButton();
createEnablementButton();
createFgColorButton();
createBgColorButton();
createFontChooser();
createCursorCombo();
createPropertyCheckbox( "Add Selection Listener", PROP_SELECTION_LISTENER );
Group group = new Group( parent, SWT.NONE );
group.setText( "Manipulate First Combo" );
group.setLayout( new GridLayout() );
createAddButton( group );
createSetVisibleItemCountButton( group );
createRemoveAllButton( group );
createDeselectAllButton( group );
createSelectFirstItemButton( group );
createEmptyComboButton = new Button( group, SWT.CHECK );
createEmptyComboButton.setText( "Create Empty Combo" );
createEmptyComboButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent e ) {
if( createEmptyComboButton.getSelection() ) {
empty = true;
} else {
empty = false;
}
createNew();
}
} );
preselectFirstItemButton = new Button( group, SWT.CHECK );
preselectFirstItemButton.setText( "Preselect First Item" );
preselectFirstItemButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent e ) {
if( preselectFirstItemButton.getSelection() ) {
preselectItem = true;
} else {
preselectItem = false;
}
createNew();
}
} );
Label selectionTitle = new Label( group, SWT.NONE );
selectionTitle.setText( "Text selection:" );
createSetSelectionControls( group );
createGetSelectionControls( group );
createSetTextLimitButton( group, firstCombo );
Group grpManioulateCCombo = new Group( parent, SWT.NONE );
grpManioulateCCombo.setText( "Manipulate CCombo" );
grpManioulateCCombo.setLayout( new GridLayout() );
createSetTextLimitButton( grpManioulateCCombo, cCombo );
createChangeSizeButton( grpManioulateCCombo );
createShowListButton( grpManioulateCCombo );
}
protected void createExampleControls( final Composite parent ) {
parent.setLayout( new GridLayout( 3, false ) );
int style = getStyle();
// Standard Combo
Label lblFilledCombo = new Label( parent, SWT.NONE );
lblFilledCombo.setText( "Filled Combo" );
firstCombo = new Combo( parent, style );
if( !empty ) {
firstCombo.setItems( ITEMS );
}
if( !empty && preselectItem ) {
firstCombo.select( 0 );
}
if( hasCreateProperty( PROP_SELECTION_LISTENER ) ) {
firstCombo.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent evt ) {
show( evt );
}
public void widgetDefaultSelected( final SelectionEvent evt ) {
show( evt );
}
private void show( final SelectionEvent evt ) {
Shell shell = firstCombo.getShell();
String msg = "Event: " + evt + "\n"
+ "Text: " + firstCombo.getText() + "\n"
+ "Selection: " + firstCombo.getSelectionIndex();
MessageDialog.openInformation( shell, "Selection Event", msg );
}
} );
}
Button btnShowSelection = new Button( parent, SWT.PUSH );
btnShowSelection.setText( "Show Selection" );
btnShowSelection.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
showSelection( firstCombo.getItems(), firstCombo.getSelectionIndex() );
}
} );
// -- verify listener --
Label lblVerifyCombo = new Label( parent, SWT.NONE );
lblVerifyCombo.setText( "Combo with VerifyListener (only 0-9 allowed)" );
verifyCombo = new Combo( parent, style );
verifyCombo.setLayoutData( colSpan2() );
verifyCombo.add( "0" );
verifyCombo.add( "1" );
verifyCombo.add( "2" );
verifyCombo.add( "3" );
verifyCombo.addVerifyListener( new VerifyListener() {
public void verifyText( final VerifyEvent event ) {
StringBuffer allowedText = new StringBuffer();
for( int i = 0; i < event.text.length(); i++ ) {
char ch = event.text.charAt( i );
if( ch >= '0' && ch <= '9' ) {
allowedText.append( ch );
}
}
event.text = allowedText.toString();
}
} );
// Viewer Combo
Label lblViewerCombo = new Label( parent, SWT.NONE );
String msg = "ComboViewer with context menu";
lblViewerCombo.setText( msg );
viewerCombo = new Combo( parent, style );
viewerCombo.setLayoutData( colSpan2() );
ComboViewer viewer = new ComboViewer( viewerCombo );
viewer.setContentProvider( new IStructuredContentProvider() {
public void dispose() {
}
public void inputChanged( final Viewer viewer, final Object oldIn, final Object newIn ) {
}
public Object[] getElements( final Object inputElement ) {
return ( Object[] )inputElement;
}
} );
viewer.setLabelProvider( new LabelProvider() );
viewer.setInput( ITEMS );
viewer.addSelectionChangedListener( new ISelectionChangedListener() {
public void selectionChanged( final SelectionChangedEvent event ) {
String message = "Selected item: " + event.getSelection().toString();
Shell shell = parent.getShell();
MessageDialog.openInformation( shell, "Info", message );
}
} );
Menu menu = new Menu( viewerCombo );
MenuItem menuItem = new MenuItem( menu, SWT.NONE );
menuItem.setText( "MenuItem on ComboViewer" );
viewerCombo.setMenu( menu );
// Separator
int separatorStyle = SWT.SEPARATOR | SWT.HORIZONTAL | SWT.SHADOW_OUT;
Label separator = new Label( parent, separatorStyle );
separator.setLayoutData( createGridDataWithSpan() );
// CCombo
Label lblCCombo = new Label( parent, SWT.NONE );
lblCCombo.setText( "CCombo" );
cCombo = new CCombo( parent, style );
cCombo.setItems( ITEMS );
if( hasCreateProperty( PROP_SELECTION_LISTENER ) ) {
cCombo.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent evt ) {
show( evt );
}
public void widgetDefaultSelected( final SelectionEvent evt ) {
show( evt );
}
private void show( final SelectionEvent evt ) {
Shell shell = cCombo.getShell();
String msg = "Event: " + evt + "\n"
+ "Text: " + cCombo.getText() + "\n"
+ "Selection: " + cCombo.getSelectionIndex();
MessageDialog.openInformation( shell, "Selection Event", msg );
}
} );
}
Button btnShowSelectionCCombo = new Button( parent, SWT.PUSH );
btnShowSelectionCCombo.setText( "Show Selection" );
btnShowSelectionCCombo.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
showSelection( cCombo.getItems(), cCombo.getSelectionIndex() );
}
} );
// Register controls
registerControl( firstCombo );
registerControl( verifyCombo );
registerControl( viewerCombo );
registerControl( cCombo );
}
private void createAddButton( final Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout( 3, false ) );
Label lblAddItem = new Label( composite, SWT.NONE );
lblAddItem.setText( "Add Item" );
final Text txtAddItem = new Text( composite, SWT.BORDER );
txtAddItem.setText( "New Item" );
Button btnAddItem = new Button( composite, SWT.PUSH );
btnAddItem.setText( "Add" );
btnAddItem.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
firstCombo.add( txtAddItem.getText() );
}
} );
}
private void createRemoveAllButton( final Composite parent ) {
Button button = new Button( parent , SWT.PUSH );
button.setText( "Remove All Items" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
firstCombo.removeAll();
}
} );
}
private void createDeselectAllButton( final Composite parent ) {
Button button = new Button( parent , SWT.PUSH );
button.setText( "Deselect All Items" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
firstCombo.deselectAll();
}
} );
}
private void createSelectFirstItemButton( final Composite parent ) {
Button button = new Button( parent , SWT.PUSH );
button.setText( "Select First Item" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
if( firstCombo.getItemCount() > 0 ) {
firstCombo.select( 0 );
}
}
} );
}
private void createSetVisibleItemCountButton( final Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout( 3, false ) );
final Text text = new Text( composite, SWT.BORDER | SWT.SINGLE );
text.setText( "3" );
text.setLayoutData( new GridData( 20, SWT.DEFAULT ) );
Button button = new Button( composite, SWT.PUSH );
button.setText( "Set Visible Item Count" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
try {
int vic = Integer.parseInt( text.getText() );
firstCombo.setVisibleItemCount( vic );
} catch( NumberFormatException e ) {
}
}
} );
}
private void createSetSelectionControls( final Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout( 5, false ) );
Label lblSelectionFrom = new Label( composite, SWT.NONE );
lblSelectionFrom.setText( "From" );
final Text txtSelectionFrom = new Text( composite, SWT.BORDER | SWT.SINGLE );
txtSelectionFrom.setTextLimit( 2 );
txtSelectionFrom.setText( "0" );
txtSelectionFrom.setLayoutData( new GridData( 20, SWT.DEFAULT ) );
Label lblSelectionTo = new Label( composite, SWT.NONE );
lblSelectionTo.setText( "to" );
final Text txtSelectionTo = new Text( composite, SWT.BORDER | SWT.SINGLE );
txtSelectionTo.setTextLimit( 2 );
txtSelectionTo.setText( "0" );
txtSelectionTo.setLayoutData( new GridData( 20, SWT.DEFAULT ) );
Button btnSetSelection = new Button( composite, SWT.PUSH );
btnSetSelection.setText( "set" );
btnSetSelection.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
int from = parseInt( txtSelectionFrom.getText() );
int to = parseInt( txtSelectionTo.getText() );
if( from >= 0 && to >= 0 ) {
firstCombo.setSelection( new Point( from, to ) );
} else {
String msg
= "Invalid Selection";
MessageDialog.openError( getShell(), "Error", msg );
}
}
} );
}
private void createGetSelectionControls( final Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout( 2, false ) );
final Text outputSelection = new Text( composite, SWT.BORDER );
outputSelection.setEditable( false );
Button btnGetSelection = new Button( composite, SWT.PUSH );
btnGetSelection.setText( "get" );
btnGetSelection.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
Point selection = firstCombo.getSelection();
outputSelection.setText( selection.x + ", " + selection.y );
}
} );
}
private int parseInt( final String text ) {
int result;
try {
result = Integer.parseInt( text );
} catch( NumberFormatException e ) {
result = -1;
}
return result;
}
private static GridData colSpan2() {
GridData result = new GridData( SWT.BEGINNING, SWT.CENTER, false, false );
result.horizontalSpan = 2;
return result;
}
private void createSetTextLimitButton( final Composite parent,
final Control combo )
{
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout( 2, false ) );
final Text text = new Text( composite, SWT.BORDER | SWT.SINGLE );
text.setText( "5" );
text.setLayoutData( new GridData( 20, SWT.DEFAULT ) );
Button button = new Button( composite, SWT.PUSH );
button.setText( "Set Text Limit" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
try {
int textLimit = Integer.parseInt( text.getText() );
if( combo instanceof Combo ) {
( ( Combo )combo ).setTextLimit( textLimit );
} else if( combo instanceof CCombo ) {
( ( CCombo )combo ).setTextLimit( textLimit );
}
} catch( NumberFormatException e ) {
}
}
} );
}
private void createChangeSizeButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Change Size" );
button.addSelectionListener( new SelectionAdapter() {
private boolean customSize;
public void widgetSelected( final SelectionEvent event ) {
if ( customSize ) {
GridData gridData = new GridData( SWT.DEFAULT, SWT.DEFAULT );
cCombo.setLayoutData( gridData );
customSize = false;
} else {
GridData gridData = new GridData( 100, 100 );
cCombo.setLayoutData( gridData );
customSize = true;
}
Composite parent = ( ( Control )controls.get( 0 ) ).getParent();
parent.layout( true, true );
}
} );
}
private void createShowListButton( final Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Show List" );
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent event ) {
boolean listVisible = cCombo.getListVisible();
cCombo.setListVisible( !listVisible );
}
} );
}
private void showSelection( final String[] items, final int selectionIndex ) {
String selection = "(nothing)";
if( selectionIndex != -1 ) {
selection = items[ selectionIndex ];
}
String msg = "Your Selection: " + selection;
MessageDialog.openInformation( getShell(), "Information", msg );
}
private GridData createGridDataWithSpan() {
GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
gridData.horizontalSpan = 3;
return gridData;
}
}