blob: 42eb83de2d0ed1aef4faef21e58d43eac7e0b78a [file] [log] [blame]
/*******************************************************************************
* 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.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() );
}
} );
}
}