/******************************************************************************* * Copyright (c) 2002, 2015 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.controls; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.events.VerifyListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class ComboTab extends ExampleTab { private static final String PROP_SELECTION_LISTENER = "selectionListener"; private static final String PROP_MODIFY_LISTENER = "modifyListener"; 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 Button editableButton; private boolean empty; private boolean preselectItem; public ComboTab() { super( "Combo" ); } @Override protected void createStyleControls( Composite parent ) { createStyleButton( "BORDER", SWT.BORDER ); createStyleButton( "READ_ONLY", SWT.READ_ONLY ); createStyleButton( "FLAT", SWT.FLAT ); createOrientationButton(); createVisibilityButton(); createEnablementButton(); createFgColorButton(); createBgColorButton(); createFontChooser(); createCursorCombo(); createPropertyCheckbox( "Add Selection Listener", PROP_SELECTION_LISTENER ); createPropertyCheckbox( "Add Modify Listener", PROP_MODIFY_LISTENER ); Group grpManioulateCCombo = new Group( parent, SWT.NONE ); grpManioulateCCombo.setText( "Manipulate CCombo" ); grpManioulateCCombo.setLayout( new GridLayout() ); createSetTextLimitButton( grpManioulateCCombo, false ); createChangeSizeButton( grpManioulateCCombo ); createToggleListVisibilityButton( grpManioulateCCombo ); createEditableButton( grpManioulateCCombo ); createTextButton( grpManioulateCCombo ); Group group = new Group( parent, SWT.NONE ); group.setText( "Manipulate First Combo" ); group.setLayout( new GridLayout() ); createAddButton( group ); createSetVisibleItemCountButton( group ); createRemoveAllButton( group ); createDeselectAllButton( group ); createRemoveFirstItemButton( group ); createSelectFirstItemButton( group ); createEmptyComboButton = new Button( group, SWT.CHECK ); createEmptyComboButton.setText( "Create Empty Combo" ); createEmptyComboButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( 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() { @Override public void widgetSelected( 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, true ); } @Override 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() { @Override public void widgetSelected( SelectionEvent event ) { show( event, false ); } @Override public void widgetDefaultSelected( SelectionEvent event ) { show( event, true ); } private void show( SelectionEvent event, boolean defaultSelection ) { String type = defaultSelection ? "DefaultSelection" : "Selection"; String msg = type + ": " + event + "\n" + "Text: " + firstCombo.getText() + "\n" + "Selection: " + firstCombo.getSelectionIndex(); log( msg ); } } ); } if( hasCreateProperty( PROP_MODIFY_LISTENER ) ) { firstCombo.addModifyListener( new ModifyListener() { @Override public void modifyText( ModifyEvent event ) { log( event.toString() ); } } ); } Button btnShowSelection = new Button( parent, SWT.PUSH ); btnShowSelection.setText( "Show Selection" ); btnShowSelection.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( 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( createGridDataWithSpan( SWT.NONE, 2 ) ); verifyCombo.add( "0" ); verifyCombo.add( "1" ); verifyCombo.add( "2" ); verifyCombo.add( "3" ); verifyCombo.addVerifyListener( new VerifyListener() { @Override public void verifyText( 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( createGridDataWithSpan( SWT.NONE, 2 ) ); ComboViewer viewer = new ComboViewer( viewerCombo ); viewer.setContentProvider( new IStructuredContentProvider() { @Override public void dispose() { } @Override public void inputChanged( Viewer viewer, Object oldIn, Object newIn ) { } @Override public Object[] getElements( Object inputElement ) { return ( Object[] )inputElement; } } ); viewer.setLabelProvider( new LabelProvider() ); viewer.setInput( ITEMS ); viewer.addSelectionChangedListener( new ISelectionChangedListener() { @Override public void selectionChanged( 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( GridData.FILL_HORIZONTAL, 3 ) ); // CCombo Label lblCCombo = new Label( parent, SWT.NONE ); lblCCombo.setText( "CCombo" ); cCombo = new CCombo( parent, style ); cCombo.setItems( ITEMS ); cCombo.setEditable( checkControl( editableButton ) ? editableButton.getSelection() : true ); if( hasCreateProperty( PROP_SELECTION_LISTENER ) ) { cCombo.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent event ) { show( event, false ); } @Override public void widgetDefaultSelected( SelectionEvent event ) { show( event, true ); } private void show( SelectionEvent event, boolean defaultSelection ) { String type = defaultSelection ? "DefaultSelection" : "Selection"; String msg = type + ": " + event + "\n" + "Text: " + cCombo.getText() + "\n" + "Selection: " + cCombo.getSelectionIndex(); log( msg ); } } ); } Button btnShowSelectionCCombo = new Button( parent, SWT.PUSH ); btnShowSelectionCCombo.setText( "Show Selection" ); btnShowSelectionCCombo.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent event ) { showSelection( cCombo.getItems(), cCombo.getSelectionIndex() ); } } ); // Register controls registerControl( firstCombo ); registerControl( verifyCombo ); registerControl( viewerCombo ); registerControl( cCombo ); } private void createAddButton( 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() { @Override public void widgetSelected( SelectionEvent event ) { firstCombo.add( txtAddItem.getText() ); } } ); } private void createRemoveAllButton( Composite parent ) { Button button = new Button( parent , SWT.PUSH ); button.setText( "Remove All Items" ); button.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent event ) { firstCombo.removeAll(); } } ); } private void createDeselectAllButton( Composite parent ) { Button button = new Button( parent , SWT.PUSH ); button.setText( "Deselect All Items" ); button.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent event ) { firstCombo.deselectAll(); } } ); } private void createRemoveFirstItemButton( Composite parent ) { Button button = new Button( parent , SWT.PUSH ); button.setText( "Remove First Item" ); button.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent event ) { if( firstCombo.getItemCount() > 0 ) { firstCombo.remove( 0 ); } } } ); } private void createSelectFirstItemButton( Composite parent ) { Button button = new Button( parent , SWT.PUSH ); button.setText( "Select First Item" ); button.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent event ) { if( firstCombo.getItemCount() > 0 ) { firstCombo.select( 0 ); } } } ); } private void createSetVisibleItemCountButton( 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() { @Override public void widgetSelected( SelectionEvent event ) { try { int vic = Integer.parseInt( text.getText() ); firstCombo.setVisibleItemCount( vic ); } catch( NumberFormatException e ) { } } } ); } private void createSetSelectionControls( 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() { @Override public void widgetSelected( SelectionEvent event ) { int from = parseInt( txtSelectionFrom.getText() ); int to = parseInt( txtSelectionTo.getText() ); if( from >= 0 && to >= 0 ) { firstCombo.setSelection( new Point( from, to ) ); firstCombo.setFocus(); } else { MessageDialog.openError( getShell(), "Error", "Invalid Selection" ); } } } ); } private void createGetSelectionControls( 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() { @Override public void widgetSelected( SelectionEvent event ) { Point selection = firstCombo.getSelection(); outputSelection.setText( selection.x + ", " + selection.y ); } } ); } private int parseInt( String text ) { int result; try { result = Integer.parseInt( text ); } catch( NumberFormatException e ) { result = -1; } return result; } private void createSetTextLimitButton( Composite parent, final boolean isCombo ) { 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() { @Override public void widgetSelected( SelectionEvent event ) { try { int textLimit = Integer.parseInt( text.getText() ); if( isCombo ) { firstCombo.setTextLimit( textLimit ); } else { cCombo.setTextLimit( textLimit ); } } catch( NumberFormatException e ) { } } } ); } private void createChangeSizeButton( Composite parent ) { Button button = new Button( parent, SWT.PUSH ); button.setText( "Change Size" ); button.addSelectionListener( new SelectionAdapter() { private boolean customSize; @Override public void widgetSelected( 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 = controls.get( 0 ).getParent(); parent.layout( true, true ); } } ); } private void createToggleListVisibilityButton( Composite parent ) { Button button = new Button( parent, SWT.PUSH ); button.setText( "Toggle List Visibility" ); button.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent event ) { boolean listVisible = cCombo.getListVisible(); cCombo.setListVisible( !listVisible ); } } ); } private void createEditableButton( Composite parent ) { editableButton = new Button( parent, SWT.CHECK ); editableButton.setText( "Editable" ); editableButton.setSelection( true ); editableButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent e ) { cCombo.setEditable( editableButton.getSelection() ); } } ); } private void createTextButton( Composite parent ) { Button button = new Button( parent, SWT.PUSH ); button.setText( "Change text" ); button.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent event ) { cCombo.setText( "foo" ); } } ); } private void showSelection( String[] items, int selectionIndex ) { String selection = "(nothing)"; if( selectionIndex != -1 ) { selection = items[ selectionIndex ]; } String msg = "Your Selection: " + selection; MessageDialog.openInformation( getShell(), "Information", msg ); } private GridData createGridDataWithSpan( int style, int span ) { GridData gridData = new GridData( style ); gridData.horizontalSpan = span; return gridData; } }