/******************************************************************************* * Copyright (c) 2013 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.demo.controls; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class MnemonicsTab extends ExampleTab { private static final String DEFAULT_ACTIVATOR = "CTRL+ALT"; private static final String[] DEFAULT_SHORTCUT = new String[]{ "CTRL+ALT+Y" }; protected boolean useCTabFolder; public MnemonicsTab() { super( "Mnemonics" ); } @Override protected void createStyleControls( Composite parent ) { createActivatorControls( parent ); createShortcutControls( parent ); createCTabFolderButton( parent ); } private void createShortcutControls( Composite parent ) { final Display display = parent.getDisplay(); display.setData( RWT.ACTIVE_KEYS, DEFAULT_SHORTCUT ); display.setData( RWT.CANCEL_KEYS, DEFAULT_SHORTCUT ); final Text shortcutText = new Text( parent, SWT.BORDER ); shortcutText.setText( DEFAULT_SHORTCUT[ 0 ] ); shortcutText.setLayoutData( new RowData( 110, SWT.DEFAULT ) ); Button setShortcut = new Button( parent, SWT.PUSH ); setShortcut.setText( "Set global shortcut" ); setShortcut.addListener( SWT.Selection, new Listener() { public void handleEvent( Event event ) { String[] shortcut = new String[]{ shortcutText.getText() }; display.setData( RWT.ACTIVE_KEYS, shortcut ); display.setData( RWT.CANCEL_KEYS, shortcut ); } } ); display.addFilter( SWT.KeyDown, new Listener() { public void handleEvent( Event event ) { log( event.toString() ); } } ); } private void createActivatorControls( Composite parent ) { final Display display = parent.getDisplay(); display.setData( RWT.MNEMONIC_ACTIVATOR, DEFAULT_ACTIVATOR ); final Text activatorText = new Text( parent, SWT.BORDER ); activatorText.setText( DEFAULT_ACTIVATOR ); activatorText.setLayoutData( new RowData( 110, SWT.DEFAULT ) ); Button setActivator = new Button( parent, SWT.PUSH ); setActivator.setText( "Set activator" ); setActivator.addListener( SWT.Selection, new Listener() { public void handleEvent( Event event ) { display.setData( RWT.MNEMONIC_ACTIVATOR, activatorText.getText() ); } } ); } private void createCTabFolderButton( Composite parent ) { final Button ctabFolderButton = new Button( parent, SWT.TOGGLE ); ctabFolderButton.setText( "Use CTabFolder" ); ctabFolderButton.addListener( SWT.Selection, new Listener() { public void handleEvent( Event event ) { useCTabFolder = ctabFolderButton.getSelection(); createNew(); } } ); } @Override protected void createExampleControls( Composite parent ) { parent.setLayout( new FillLayout() ); int tabCount = 4; if( useCTabFolder ) { CTabFolder folder = new CTabFolder( parent, getStyle() ); CTabItem[] tabItems = new CTabItem[ tabCount ]; for( int i = 0; i < tabCount; i++ ) { tabItems[ i ] = new CTabItem( folder, SWT.NONE ); tabItems[ i ].setText( "CTabItem &" + ( i + 1) ); Composite content = createItemContent( folder, i ); tabItems[ i ].setControl( content ); } folder.setSelection( 0 ); } else { TabFolder folder = new TabFolder( parent, getStyle() ); TabItem[] tabItems = new TabItem[ tabCount ]; for( int i = 0; i < tabCount; i++ ) { tabItems[ i ] = new TabItem( folder, SWT.NONE ); tabItems[ i ].setText( "TabItem &" + ( i + 1 ) ); Composite content = createItemContent( folder, i ); tabItems[ i ].setControl( content ); } } } private Composite createItemContent( Composite folder, int index ) { Composite content = new Composite( folder, SWT.NONE ); content.setLayout( new GridLayout( 4, false ) ); switch( index ) { case 0: createButtonExample( content ); break; case 1: createToolBarExample( content ); createLabelExample( content ); break; case 2: createGroupExample( content ); break; case 3: createMenuExample( content ); break; } return content; } private void createMenuExample( final Composite content ) { final Button button = new Button( content, SWT.PUSH ); button.setText( "Open Shell with Menu" ); button.addListener( SWT.Selection, new Listener() { public void handleEvent( Event event ) { createShellWithMenu( content ); } } ); } private void createShellWithMenu( Composite content ) { final Shell shell = new Shell( content.getShell(), SWT.BORDER ); shell.setLayout( new GridLayout() ); createMenuBar( shell ); // Bug? - Without a widget in the shell it doesn't get correctly focused Button closeButton = new Button( shell, SWT.PUSH ); closeButton.setText( "Close" ); closeButton.addListener( SWT.Selection, new Listener() { public void handleEvent( Event event ) { shell.dispose(); } } ); shell.setLocation( content.toDisplay( 0, 0 ) ); shell.setSize( content.getSize() ); shell.open(); content.addListener( SWT.Dispose, new Listener() { public void handleEvent( Event event ) { shell.dispose(); } } ); } private void createMenuBar( final Shell shell) { String[] items = new String[] { "&File", "&Edit", "&Lazy", "E&xit" }; Menu bar = new Menu( shell, SWT.BAR ); shell.setMenuBar( bar ); for( String text : items ) { MenuItem menuItem = new MenuItem( bar, SWT.CASCADE ); menuItem.setText( text ); Menu dropdown = new Menu( shell, SWT.DROP_DOWN ); menuItem.setMenu( dropdown ); } MenuItem pushOne = createMenuItem( bar.getItem( 0 ).getMenu(), SWT.PUSH, "Push &One\tCtrl+Shift+1" ); pushOne.setAccelerator( SWT.CTRL | SWT.SHIFT | '1' ); MenuItem pushTwo = createMenuItem( bar.getItem( 0 ).getMenu(), SWT.PUSH, "Push &Two\tCtrl+Shift+2" ); pushTwo.setAccelerator( SWT.CTRL | SWT.SHIFT | '2' ); MenuItem check = createMenuItem( bar.getItem( 0 ).getMenu(), SWT.CHECK, "&Check\tCtrl+C" ); check.setAccelerator( SWT.CTRL | 'C' ); createMenuItem( bar.getItem( 0 ).getMenu(), SWT.SEPARATOR, "Separator &W" ); createMenuItem( bar.getItem( 0 ).getMenu(), SWT.RADIO, "Radio &X" ); createMenuItem( bar.getItem( 0 ).getMenu(), SWT.RADIO, "Radio &Y" ); createMenuItem( bar.getItem( 0 ).getMenu(), SWT.RADIO, "Radio &Z" ); createMenuItem( bar.getItem( 1 ).getMenu(), SWT.PUSH, "Push &Three" ); MenuItem casc = createMenuItem( bar.getItem( 1 ).getMenu(), SWT.CASCADE, "&Submenu" ); Menu submenu = new Menu( shell, SWT.DROP_DOWN ); casc.setMenu( submenu ); createMenuItem( submenu, SWT.CHECK, "Ch&eck" ); createMenuItem( submenu, SWT.RADIO, "Radio &8" ); createMenuItem( submenu, SWT.RADIO, "Radio &9" ); createMenuItem( bar.getItem( 2 ).getMenu(), SWT.PUSH, "Default &Item" ); crateLazyMenu( bar.getItem( 2 ) ); MenuItem close = createMenuItem( bar.getItem( 3 ).getMenu(), SWT.PUSH, "Close &Shell" ); close.addListener( SWT.Selection, new Listener() { public void handleEvent( Event event ) { shell.dispose(); } } ); } private void crateLazyMenu( MenuItem item ) { final Menu menu = item.getMenu(); menu.addListener( SWT.Show, new Listener() { public void handleEvent( Event event ) { menu.getItem( 0 ).dispose(); createMenuItem( menu, SWT.PUSH, "&Generated Item" ); } } ); } private MenuItem createMenuItem( Menu menu, int style, String text ) { final MenuItem item = new MenuItem( menu, style ); item.setText( text ); item.addListener( SWT.Selection, new Listener() { public void handleEvent( Event e ) { log( item.getText() ); } } ); return item; } private void createButtonExample( Composite content ) { createButton( content, SWT.PUSH, "Push &One" ); createButton( content, SWT.PUSH, "Push &Two" ); createButton( content, SWT.PUSH, "Push &Three" ); createButton( content, SWT.TOGGLE, "To&ggle" ); createButton( content, SWT.CHECK, "&Checkbox" ); createButton( content, SWT.RADIO, "Radio &X" ); createButton( content, SWT.RADIO, "Radio &Y" ); createButton( content, SWT.RADIO, "Radio &Z" ); } private void createToolBarExample( Composite content ) { Label label = new Label( content, SWT.NONE ); label.setText( "ToolBar:" ); ToolBar bar = new ToolBar( content, SWT.BORDER ); createToolItem( bar, SWT.PUSH, "Push &Three" ); createToolItem( bar, SWT.CHECK, "Toggl&e" ); createToolItem( bar, SWT.RADIO, "Radio &8" ); createToolItem( bar, SWT.RADIO, "Radio &9" ); GridData layoutData = new GridData(); layoutData.horizontalSpan = 3; bar.setLayoutData( layoutData ); } private void createGroupExample( Composite content ) { content.setLayout(new GridLayout( 3, false ) ); Group groupA = new Group( content, SWT.SHADOW_IN ); groupA.setText( "Group &A" ); groupA.setLayout( new GridLayout() ); groupA.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false ) ); createText( groupA ); Group groupB = new Group( content, SWT.SHADOW_IN ); groupB.setText( "Group &B with Composite" ); groupB.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false ) ); groupB.setLayout( new FillLayout() ); Composite comp = new Composite( groupB, SWT.BORDER ); comp.setLayout( new GridLayout() ); createText( comp ); Group groupC = new Group( content, SWT.SHADOW_IN ); groupC.setText( "Group &C" ); groupC.setLayout( new GridLayout() ); groupC.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false ) ); createText( groupC ).setEnabled( false ); createText( groupC ).setVisible( false ); createText( groupC ); } private void createLabelExample( Composite content ) { Label label = new Label( content, SWT.NONE ); label.setText( "L&abel:" ); createText( content ); CLabel clabel = new CLabel( content, SWT.NONE ); clabel.setText( "&CLabel:" ); Button button = new Button( content, SWT.CHECK ); button.setText( "Button" ); Label labelForDisabled = new Label( content, SWT.NONE ); labelForDisabled.setText( "D&isabled:" ); createText( content ).setEnabled( false ); Label labelForInvisible = new Label( content, SWT.NONE ); labelForInvisible.setText( "In&visible:" ); createText( content ).setVisible( false ); } private Text createText( Composite content ) { Text text = new Text( content, SWT.BORDER ); text.setText( "Text" ); return text; } private void createButton( Composite content, int style, String text ) { final Button button = new Button( content, style ); button.setText( text ); button.addListener( SWT.Selection, new Listener() { public void handleEvent( Event event ) { log( button.getText() ); } } ); } private void createToolItem( ToolBar bar, int style, String text ) { final ToolItem item = new ToolItem( bar, style ); item.setText( text ); item.addListener( SWT.Selection, new Listener() { public void handleEvent( Event event ) { log( item.getText() ); } } ); } }